Welcome to pyNastran’s documentation for v1.3!

The pyNastran software interfaces to Nastran’s complicated input and output files and provides a simplified interface to read/edit/write the various files. The software is compatible currently being used on Windows, Linux, and Mac.

The BDF reader/editor/writer supports 406 cards including coordinate systems. Card objects have methods to access data such as Mass, Area, etc. The BDF writer writes a small field formatted file, but makes full use of the 8-character Nastran field. The OpenMDAO BDF parametrization syntax is also supported.

The OP2 reader supports static/transient results, which unless you analyzing frequency response data should be good enough. It also supports F06 Writing for most of the objects. Results include: displacement, velocity, acceleration, temperature, eigenvectors, eigenvalues, SPC forces, MPC forces, grid point forces, load vectors, applied loads, strain energy, as well as stress and strain.

The Python OP4 reader/writer supports reading ASCII/binary sparse and dense matrices, and writing ASCII matrices.

A simple GUI has been developed that can view BDF models and display static/dynamic displacement/eignevectors (real/complex) and stress/strain (real) results from the OP2. Additionally, AVUS, Cart3d, Usm3d, Tetgen, STL, and Panair are somewhat supported and included for use.

Installation

Installation

Installation From Release

pyNastran is an easy package to install once you have the required Python modules. It’s a pure Python package so you shouldn’t have too many problems. Just type on the command line:

pip install pyNastran

That will install the minimum set of what you need to run pyNastran (so no GUI). If you want GUI functionality, chances are you have PyQt5 or PySide2, but don’t have vtk. Vtk is a bit more challenging on Windows, but there is website to help with that.

Additionally, the software can optionally use matplotlib, pandas, h5py, colorama, but chances are you already have those. If you don’t, they’re very easy to install.

Python

The software is tested on Windows and Linux against:

  • Python 3.7

  • Python 3.8

  • Python 3.9 (availible in pyNastran 1.3.4)

  • Python 3.10 (availible in pyNastran 1.3.4)

Packages

pyNastran is tested against a range of package versions (lowest to highest based on availbility), so it should work. The recommended set of packages are:

  • Required:

    • numpy >= 1.14

    • scipy >= 1.0

    • cpylog >= 1.4.0

    • docopt-ng == 0.7.2 (required for command line tools)

  • Optional:

    • colorama >= 0.3.9 (colored logging)

    • pandas >= 0.25

    • matplotlib >= 2.2.4 (plotting)

    • h5py >= 2.8.0 (HDF5 support)

  • GUI:

    • vtk >= 7 (vtk=9 has some warnings)

    • qtpy >= 1.4.0

    • Qt (pick one)

      • PyQt5 >= 5.9.2

      • PySide2 >= 5.11.2

      • PyQt6

      • PySide6

    • QScintilla >= 2.13.0 (optional for fancy scripting; PyQt5/6 only)

    • pygments >= 2.2.0 (optional for fancy scripting; PyQt5/6 only)

    • imageio >= 2.4.1,<3 (optional for animation support)

Use Web docs

See docs

Installation From Source

pyNastran is an easy package to install once you have the required Python modules. It’s a pure Python package so you shouldn’t have too many problems.

Installing from source is recommened if:
  • You want the most recent version (see installation.rst-main)

  • You want easier access to the source

  • You’re on an air-gapped machine

  • Install Python (see installation_release)

    • skip the pip install pyNastran step

  • Install Sphinx, GraphViz, alabaster (for documentation)

  • Install Git

  • Clone pyNastran-main from Github

  • Install pyNastran

Install GraphViz

Install additional python packages

pip install Sphinx
pip install alabaster
pip install numpydoc
  • Download & install Git

  • Download a GUI for Git (optional)

There are two ways to install the 1.3 (main/dev) version of pyNastran

  1. Download the most recent zip version

  2. Clone pyNastran (see below). Using Git allows you to easily update to the latest dev version when you want to as well as push any commits of your own.

If you don’t want the gui, use setup_no_gui.py instead of setup.py.

>>> python setup.py install

or:

>>> python setup_no_gui.py install

Right-click in a folder and select Git Clone.

installation/clone.png

Enter the above information. If desired, click the branch box and and enter a branch name and click OK.

Checkout/clone the dev code by typing (preferred):

>>> git clone https://github.com/SteveDoyle2/pynastran

To checkout a branch

>>> git.exe clone --branch 1.3 --progress -v "https://github.com/SteveDoyle2/pyNastran.git" "C:\\work\\pyNastran_1.3"

Two options for documentation exist.

Build Docs

Navigate to pyNastran/docs_sphinx directory on the command line.

>>> make html

Installed Programs

List of Installed Programs

Various Command line utilities are installed by pyNastran:

pyNastranGUI

The Graphical User Interface (GUI) looks like:

_images/qt.png

See gui for more details.

test_bdf

Runs through various checks on a BDF that Nastran doesn’t do. Verifies your model is referenced properly. Creates a summary table.

See test_bdf for more details.

>>> test_bdf fem.bdf > test.out

The file test.out will be created…

INFO:    fname=bdf.pyc                lineNo=371    ---starting BDF.read of fem.bdf---
INFO:    fname=bdf.pyc                lineNo=589    reject_card_name = |TEMPD|
INFO:    fname=bdf.pyc                lineNo=589    reject_card_name = |CTRIA3|
INFO:    fname=bdf.pyc                lineNo=384    ---finished BDF.read of fem.bdf---
INFO:    fname=write_mesh.pyc         lineNo=68     ***writing fem02.bdf_out


INFO:    fname=bdf.pyc                lineNo=371    ---starting BDF.read of fem.bdf_out---
INFO:    fname=bdf.pyc                lineNo=589    reject_card_name = |TEMPD|
INFO:    fname=bdf.pyc                lineNo=384    ---finished BDF.read of fem.bdf_out---
INFO:    fname=write_mesh.pyc         lineNo=68     ***writing fem02.bdf_out2


diff_keys1=[] diff_keys2=[]
   key=CHEXA   value1=52   value2=52
   key=CPENTA  value1=52   value2=52
   key=ENDDATA value1=1    value2=1
   key=GRID    value1=135  value2=135
  *key=INCLUDE value1=1    value2=0
   key=MAT4    value1=1    value2=1
   key=NLPARM  value1=1    value2=1
   key=PARAM   value1=2    value2=2
   key=PSOLID  value1=1    value2=1
   key=SPC     value1=28   value2=28
   key=TEMP    value1=18   value2=18
  -key=TEMPD   value1=1    value2=1
  *key=CTRIA3  value1=1    value2=0

test_op2

Runs through various checks on an OP2 file. Creates a summary table.

See test_op2 for more details.

>>> test_op2 -c ISat_Dploy_Sm.op2

...

---stats for isat_dploy_sm.op2---
eigenvectors[1]
  isubcase = 1
  type=RealEigenvectorArray ntimes=203 nnodes=5367, table_name=BOPHIG
  data: [t1, t2, t3, r1, r2, r3] shape=[203, 5367, 6] dtype=float32
  gridTypes
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  mode_cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

cbar_force[1]
  type=RealCBarForceArray ntimes=203 nelements=790
  data: [ntimes, nnodes, 8] where 8=[bending_moment_a1, bending_moment_a2, bending_moment_b1, bending_moment_b2, shear1, shear2, axial, torq
ue]
  data.shape = (203, 790, 8)
  element name: CBAR-34
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

ctria3_stress[1]
  type=RealPlateStressArray ntimes=203 nelements=32 nnodes_per_element=1 nlayers=2 ntotal=64
  data: [ntimes, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  data.shape=(203L, 64L, 8L)
  element type: CTRIA3
  s_code: 1
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  mode2s = [0 0 0 ..., 0 0 0]
  cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

cquad4_stress[1]
  type=RealPlateStressArray ntimes=203 nelements=4580 nnodes_per_element=1 nlayers=2 ntotal=9160
  data: [ntimes, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  data.shape=(203L, 9160L, 8L)
  element type: CQUAD4
  s_code: 1
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  mode2s = [0 0 0 ..., 0 0 0]
  cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

eigenvalues[ISAT_SM_DEPLOYED MODES TO 400 HZ]
  type=RealEigenvalues neigenvalues=203
  title, extraction_order, eigenvalues, radians, cycles, generalized_mass, generalized_stiffness

Or more simply:

>>> test_op2 -ct ISat_Dploy_Sm.op2

---stats for isat_dploy_sm.op2---
eigenvectors[1]
cbar_force[1]
ctria3_stress[1]
cquad4_stress[1]
eigenvalues[u'ISAT_SM_DEPLOYED MODES TO 400 HZ']

test_op4

Limited checker for testing to see if an OP4 file will load.

>>> test_op4 --help
Usage:
test_op4 [-q] [-o] OP4_FILENAME
  test_op4 -h | --help
  test_op4 -v | --version

Tests to see if an OP4 will work with pyNastran

Positional Arguments:
  OP4_FILENAME         Path to OP4 file

Options:
  -q, --quiet          Suppresses debug messages (default=False)
  -o, --write_op4      Writes the op2 to fem.test_op4.op4 (default=True)
  -h, --help           Show this help message and exit
  -v, --version        Show program's version number and exit

bdf

Interface to various BDF-related command line tools

>>> bdf --help

Usage:
  bdf merge         (IN_BDF_FILENAMES)... [-o OUT_BDF_FILENAME]
  bdf equivalence   IN_BDF_FILENAME EQ_TOL
  bdf renumber      IN_BDF_FILENAME [-o OUT_BDF_FILENAME]
  bdf mirror        IN_BDF_FILENAME [-o OUT_BDF_FILENAME] [--plane PLANE] [--tol TOL]
  bdf export_mcids  IN_BDF_FILENAME [-o OUT_CSV_FILENAME] [--no_x] [--no_y]
  bdf split_cbars_by_pin_flags  IN_BDF_FILENAME [-o OUT_BDF_FILENAME] [-p PIN_FLAGS_CSV_FILENAME]
  bdf bin          IN_BDF_FILENAME AXIS1 AXIS2 [--cid CID] [--step SIZE]

  bdf merge         -h | --help
  bdf equivalence   -h | --help
  bdf renumber      -h | --help
  bdf mirror        -h | --help
  bdf export_mcids  -h | --help
  bdf split_cbars_by_pin_flags  -h | --help
  bdf bin          -h | --help
  bdf -v | --version

f06

Interface to various F06-related command line tools

>>> f06 --help

Usage:
  f06 plot_145 F06_FILENAME [--noline] [--modes MODES] [--subcases SUB] [--xlim FREQ] [--ylim DAMP]

  f06 plot_145 -h | --help
  f06 -v | --version

format_converter

Converts between various common formats, typically using Nastran as a common format. This allows methods like nodal equivalencing to be written once.

>>> format_converter --help

Usage:
  format_converter nastran <INPUT> <format2> <OUTPUT> [-o <OP2>]
  format_converter <format1> <INPUT> tecplot <OUTPUT> [-r RESTYPE...] [-b] [--block] [-x <X>] [-y <Y>] [-z <Z>]
  format_converter <format1> <INPUT> stl     <OUTPUT> [-b]
  format_converter <format1> <INPUT> <format2> <OUTPUT>
  format_converter -h | --help
  format_converter -v | --version

Options:
  format1        format type (nastran, cart3d, stl, ugrid, tecplot)
  format2        format type (nastran, cart3d, stl, ugrid, tecplot)
  INPUT          path to input file
  OUTPUT         path to output file
  -o OP2, --op2 OP2  path to results file (nastran-specific)
                 only used for Tecplot (not supported)
  -x X, --xx X   Creates a constant x slice; keeps points < X
  -y Y, --yy Y   Creates a constant y slice; keeps points < Y
  -z Z, --zz Z   Creates a constant z slice; keeps points < Z
  --block        Writes the data in BLOCK (vs. POINT) format
  -r, --results  Specifies the results to write to limit output
  -b, --binary   writes the STL in binary (not supported for Tecplot)
  -h, --help     show this help message and exit
  -v, --version  show program's version number and exit

Notes:
  Nastran->Tecplot assumes sequential nodes and consistent types (shell/solid)
  STL/Tecplot supports globbing as the input filename
  Tecplot slicing doesn't support multiple slice values and will give bad results (not crash)
  UGRID outfiles must be of the form model.b8.ugrid, where b8, b4, lb8, lb4 are valid choices and periods are important

Example:

>>> format_converter tecplot tecplot.*.plt tecplot.tecplot_joined.plt -x 0.0 -y 0.0 -z 0.0
>>> format_converter nastran fem.bdf stl fem.stl -b
>>> format_converter nastran fem.bdf cart3d fem.tri
>>> format_converter stl model.*.stl nastran fem.bdf

Quick Start

Overview

Features

Overview
  • Python 3.7-3.8

  • BSD-3 license

  • unicode support

  • importable from within Matlab

  • limited package requirements for BDF, OP2, and F06

  • additional features available with more packages

    • BDF/OP2:

      • h5py for HDF5 input/output support

      • PyQt5/PySide2/wxpython for file loading popup

    • OP2:

      • pandas for results/matrices for use in the Jupyter Notebook

    • F06:

      • matplotlib support for plotting

    • GUI: range of choices

      • PyQt5/PySide2

      • VTK 7-9

    • logging using cpylog

      • colorama for console logging

      • HTML logging for Jupyter Notebook

      • no markup when piping output to a file

      • supports overwriting logger object with user-defined logger

BDF Reader/Writer
  • Input/Output:

    • 402 cards supported including:

      • optimization

      • aero

      • thermal

      • superelements

    • small, large, double precision file reading/writing

    • pickling

    • HDF5 reading/writing

    • comments are stored

    • simplified card adding `python >>> model.add_grid(nid, xyz=[4.,5.,6.], comment='nid, cp, x, y, z') ` ` $GRID comment $grid,nid,cp,x,y,z GRID,10,,4.0,5.0,6.0 `

  • methods:

    • loads summation

    • mass properties (including NSM)

    • nodal equivalencing

    • mesh quality

      • aspect ratio, taper ratio, skew, min/max interior angle

      • quad collapsing

      • element deletion

    • deck merging

    • renumber

    • unit conversion

    • cutting plane

    • visualization of material coordinate systems

    • mirroring

    • solid skinning (free faces)

    • length, area, volume, mass breakdowns

  • list of cards supported…

Card Group

Cards

MATS1

MATS1

MATT1

MATT1

MATT2

MATT2

MATT3

MATT3

MATT4

MATT4

MATT5

MATT5

MATT8

MATT8

MATT9

MATT9

acmodl

ACMODL

aecomps

AECOMP, AECOMPL

aefacts

AEFACT

aelinks

AELINK

aelists

AELIST

aeparams

AEPARM

aero

AERO

aeros

AEROS

aestats

AESTAT

aesurf

AESURF

aesurfs

AESURFS

ao_element_flags

CBARAO

asets

ASET, ASET1

axic

AXIC

axif

AXIF

bconp

BCONP

bcrparas

BCRPARA

bcs

CONV, CONVM, RADBC, RADM, TEMPBC

bctadds

BCTADD

bctparas

BCTPARA

bctsets

BCTSET

bfric

BFRIC

blseg

BLSEG

bsets

BSET, BSET1

bsurf

BSURF

bsurfs

BSURFS

cMethods

EIGC, EIGP

caeros

CAERO1, CAERO2, CAERO3, CAERO4, CAERO5

convection_properties

PCONV, PCONVM

coords

CORD1C, CORD1R, CORD1S, CORD2C, CORD2R, CORD2S, GMCORD

creep_materials

CREEP

csets

CSET, CSET1

csschds

CSSCHD

csuper

CSUPER

csupext

CSUPEXT

cyax

CYAX

cyjoin

CYJOIN

dareas

DAREA

dconstrs

DCONADD, DCONSTR

ddvals

DDVAL

delays

DELAY

dequations

DEQATN

desvars

DESVAR

divergs

DIVERG

dlinks

DLINK

dload_entries

ACSRCE, QVECT, RANDPS, RANDT1, RLOAD1, RLOAD2, TLOAD1,

TLOAD2

dloads

DLOAD

dmi

DMI

dmiax

DMIAX

dmig

DMIG

dmij

DMIJ

dmiji

DMIJI

dmik

DMIK

doptprm

DOPTPRM

dphases

DPHASE

dresps

DRESP1, DRESP2, DRESP3

dscreen

DSCREEN

dtable

DTABLE

dti

DTI

dvcrels

DVCREL1, DVCREL2

dvgrids

DVGRID

dvmrels

DVMREL1, DVMREL2

dvprels

DVPREL1, DVPREL2

elements

CBAR, CBEAM, CBEAM3, CBEND, CBUSH, CBUSH1D, CBUSH2D,

CDAMP1, CDAMP2, CDAMP3, CDAMP4, CDAMP5, CELAS1, CELAS2,

CELAS3, CELAS4, CFAST, CGAP, CHBDYE, CHBDYG, CHBDYP,

CHEXA, CIHEX1, CIHEX2, CONROD, CPENTA, CPLSTN3, CPLSTN4,

CPLSTN6, CPLSTN8, CPYRAM, CQUAD, CQUAD4, CQUAD8, CQUADR,

CQUADX, CQUADX4, CQUADX8, CRAC2D, CRAC3D, CROD, CSHEAR,

CTETRA, CTRAX3, CTRAX6, CTRIA3, CTRIA6, CTRIAR, CTRIAX,

CTRIAX6, CTUBE, CVISC, GENEL

feedge

FEEDGE

feface

FEFACE

flfacts

FLFACT

flutters

FLUTTER

frequencies

FREQ, FREQ1, FREQ2, FREQ3, FREQ4, FREQ5

gmcurv

GMCURV

gmsurf

GMSURF

grdset

GRDSET

gridb

GRIDB

gusts

GUST

hyperelastic_materials

MATHE, MATHP

load_combinations

CLOAD, LOAD, LSEQ

loads

ACCEL, ACCEL1, FORCE, FORCE1, FORCE2, GMLOAD, GRAV,

LOADCYN, MOMENT, MOMENT1, MOMENT2, PLOAD, PLOAD1, PLOAD2,

PLOAD4, PLOADX1, QBDY1, QBDY2, QBDY3, QHBDY, QVOL,

RFORCE, RFORCE1, SLOAD, SPCD, TEMP

masses

CMASS1, CMASS2, CMASS3, CMASS4, CONM1, CONM2

materials

MAT1, MAT10, MAT11, MAT2, MAT3, MAT3D, MAT8, MAT9, MATG

methods

EIGB, EIGR, EIGRL

mkaeros

MKAERO1, MKAERO2

modtrak

MODTRAK

monitor_points

MONDSP1, MONPNT1, MONPNT2, MONPNT3

mpcadds

MPCADD

mpcs

MPC

nlparms

NLPARM

nlpcis

NLPCI

nodes

EPOINT, GRID, SPOINT

normals

SNORM

nsmadds

NSMADD

nsms

NSM, NSM1, NSML, NSML1

nxstrats

NXSTRAT

omits

OMIT, OMIT1

paeros

PAERO1, PAERO2, PAERO3, PAERO4, PAERO5

params

PARAM

pbusht

PBUSHT

pdampt

PDAMPT

pelast

PELAST

phbdys

PHBDY

plotels

PLOTEL

points

POINT

properties

PBAR, PBARL, PBCOMP, PBEAM, PBEAML, PBEND, PBMSECT,

PBRSECT, PBUSH, PBUSH1D, PCOMP, PCOMPG, PCOMPS, PCONEAX,

PDAMP, PDAMP5, PELAS, PFAST, PGAP, PIHEX, PLPLANE,

PLSOLID, PPLANE, PRAC2D, PRAC3D, PROD, PSHEAR, PSHELL,

PSOLID, PTUBE, PVISC

properties_mass

PMASS

pset

PSET

pval

PVAL

qsets

QSET, QSET1

radcavs

RADCAV, RADLST

radmtx

RADMTX

radset

RADSET

random_tables

TABRND1, TABRNDG

release

RELEASE

rigid_elements

RBAR, RBAR1, RBE1, RBE2, RBE3, RROD, RSPLINE, RSSCON

ringaxs

POINTAX, RINGAX

ringfl

RINGFL

rotors

ROTORD, ROTORG

se_bsets

SEBSET, SEBSET1

se_csets

SECSET, SECSET1

se_qsets

SEQSET, SEQSET1

se_sets

SESET

se_suport

SESUP

se_usets

SEQSET1

sebndry

SEBNDRY

sebulk

SEBULK

seconct

SECONCT

seelt

SEELT

seexcld

SEEXCLD

selabel

SELABEL

seload

SELOAD

seloc

SELOC

sempln

SEMPLN

senqset

SENQSET

seqgp

SEQGP

setree

SETREE

sets

SET1, SET3

spcadds

SPCADD

spcoffs

SPCOFF, SPCOFF1

spcs

GMSPC, SPC, SPC1, SPCAX

splines

SPLINE1, SPLINE2, SPLINE3, SPLINE4, SPLINE5, SPLINE6,

SPLINE7

suport

SUPORT

suport1

SUPORT1

tables

TABLEH1, TABLEHT, TABLES1, TABLEST

tables_d

TABLED1, TABLED2, TABLED3, TABLED4

tables_m

TABLEM1, TABLEM2, TABLEM3, TABLEM4

tables_sdamping

TABDMP1

tempds

TEMPD

thermal_materials

MAT4, MAT5

tics

TIC

topvar

TOPVAR

transfer_functions

TF

trims

TRIM, TRIM2

tstepnls

TSTEP1, TSTEPNL

tsteps

TSTEP

usets

USET, USET1

view3ds

VIEW3D

views

VIEW

  • Executive Control Deck

  • System Control Deck

  • Case Control Deck

  • cross-referencing to simplify accessing data

    • *_ref attributes are cross-referenced

    • element.nodes is not cross-referenced

    • element.nodes_ref is cross-referenced

  • safe cross-referencing for imperfect models

  • optional error storage to get a list of all discovered errors as once

  • model validation

OP4 Reader/Writer
  • For matrices, the OP2 is preferred. It’s simply faster.

  • Types:

    • ASCII/binary

    • SMALL/BIG MAT format

    • Real/Complex

    • Sparse/Dense

    • Single/Double Precision

  • ASCII writer

OP2 Reader / OP2 Writer / F06 Writer
  • Supported Nastran versions:

    • MSC Nastran

    • NX Nastran

    • Optistruct

    • Radioss

    • IMAT

    • Autodesk Nastran/Nastran-in-CAD

      • geometry not supported

  • Input/Output:

    • Very fast OP2 reader (up to 500 MB/sec with an SSD) - Memory efficient - support directly loading into HDF5 for very large models

    • HDF5 export/import support for MATLAB integration

    • pandas support (results & matrices)

    • OP2/F06 writing

    • Most fatal errors caught (geometry input errors not caught)

    • geometry can be read directly from op2 (it’s not perfect, but it’s much faster)

  • Operations:

    • transform displacement/eigenvectors/spc/mpc/applied loads to global coordinate system

    • transform stresses/forces to material coordinate system

  • Supports:

    • superelements

    • optimization

    • mesh adaptivity

    • preload

    • shape optimization

OP2 Results
  • This is probably an incomplete list. Most results are supported.

  • Basic Tables

    • Types:
      • Displacment

      • Velocity

      • Acceleration

      • Eigenvectors

      • SPC/MPC Forces

      • Applied Loads

      • Load Vectors

      • Temperature

    • Real/Complex

    • Random; no NO (Number of Crossings) or RMS results

  • Stress/Strain

    • Real/Complex

    • Random; no NO (Number of Crossings) or RMS results

    • Types:

      • Spring, Rod, Bar, Beam, Bushing, Gap, Shell, Solid

  • Forces

    • Real/Complex

    • Types:

      • Loads: Spring, Rod, Bar, Beam, Bushing, Gap, Shell (Isotropic/Composite), Solid

      • Thermal Gradient/Flux: 1D, 2D, 3D

  • Grid Point Forces

    • Real/Complex

  • Strain Energy

    • Real/Complex

    • Types:

      • Spring, Rod, Bar, Beam, Bushing, Gap, Shell (Isotropic/Composite), Solid, Rigid, DMIG

  • Matrices

    • Basic:

      • Real/Complex

      • Sparse/Dense

      • Single/Double Precision

    • MATPOOL:

      • Real/Complex

      • Sparse/Dense

      • Single/Double Precision

  • Other

    • Eigenvalues

      • Modal, Buckling, Complex

    • Grid Point Weight

    • Monitor Points

    • Design Optimization:

      • Convergence History

      • Limited Design Responses:

        • Weight

        • Stress (Isotropic/Composite)

        • Strain (Isotropic/Composite)

        • Force

        • Flutter

Main OP2 Results

The main op2 results can be accessed directly from the op2 object (e.g., model.displacements, model.celas1_stress).

  • OUG - displacement, temperatures, eigenvectors, velocity, acceleration

  • displacements

  • velocities

  • accelerations

  • displacements_scaled

  • temperatures

  • eigenvectors

  • OQG - spc/mpc forces

  • spc_forces

  • spc_forces_v

  • spc_forces_scaled_response_spectra_nrl

  • mpc_forces

  • mpc_forces_RAQCONS

  • mpc_forces_RAQEATC

  • thermal_gradient_and_flux

  • OGF - grid point forces

  • grid_point_forces

  • OPG - summation of loads for each element

  • load_vectors

  • load_vectors_v

  • thermal_load_vectors

  • applied_loads

  • force_vectors

  • OES/OSTR

  • 0d - CELASx stress/strain

  • celas1_stress

  • celas2_stress

  • celas3_stress

  • celas4_stress

  • celas1_strain

  • celas2_strain

  • celas3_strain

  • celas4_strain

  • isotropic CROD/CONROD/CTUBE stress/strain

  • crod_stress

  • conrod_stress

  • ctube_stress

  • crod_strain

  • conrod_strain

  • ctube_strain

  • isotropic CBAR stress/strain

  • cbar_stress

  • cbar_strain

  • cbar_stress_10nodes

  • cbar_strain_10nodes

  • isotropic CBEAM stress/strain

  • cbeam_stress

  • cbeam_strain

  • nonlinear_cbeam_stress

  • CBEND

  • cbend_stress

  • cbend_strain

  • isotropic CTRIA3/CQUAD4 stress

  • ctria3_stress

  • ctriar_stress

  • ctria6_stress

  • cquadr_stress

  • cquad4_stress

  • cquad8_stress

  • isotropic CTRIA3/CQUAD4 strain

  • ctria3_strain

  • ctriar_strain

  • ctria6_strain

  • cquadr_strain

  • cquad4_strain

  • cquad8_strain

  • isotropic CTETRA/CHEXA/CPENTA stress/strain

  • ctetra_stress

  • chexa_stress

  • cpenta_stress

  • ctetra_strain

  • chexa_strain

  • cpenta_strain

  • CSHEAR stress/strain

  • cshear_stress

  • cshear_strain

  • GAPNL 86

  • nonlinear_cgap_stress

  • CBUSH 226

  • nonlinear_cbush_stress

  • cbush1d_stress_strain

  • nonlinear_cbush1d_stress_strain

  • cplstn3_stress

  • cplstn4_stress

  • cplstn6_stress

  • cplstn8_stress

  • cplsts3_stress

  • cplsts4_stress

  • cplsts6_stress

  • cplsts8_stress

  • cplstn3_strain

  • cplstn4_strain

  • cplstn6_strain

  • cplstn8_strain

  • cplsts3_strain

  • cplsts4_strain

  • cplsts6_strain

  • cplsts8_strain

  • CTRIAX6

  • ctriax_stress

  • ctriax_strain

  • cbush_stress

  • cbush_strain

  • nonlinear CROD/CONROD/CTUBE stress

  • nonlinear_crod_stress

  • nonlinear_crod_strain

  • nonlinear_ctube_stress

  • nonlinear_ctube_strain

  • nonlinear_conrod_stress

  • nonlinear_conrod_strain

  • CEALS1 224, CELAS3 225

  • nonlinear_celas1_stress

  • nonlinear_celas3_stress

  • composite CTRIA3/CQUAD4 stress

  • cquad4_composite_stress

  • cquad8_composite_stress

  • cquadr_composite_stress

  • ctria3_composite_stress

  • ctria6_composite_stress

  • ctriar_composite_stress

  • cquad4_composite_strain

  • cquad8_composite_strain

  • cquadr_composite_strain

  • ctria3_composite_strain

  • ctria6_composite_strain

  • ctriar_composite_strain

  • OESNLXR - CTRIA3/CQUAD4 stress

  • nonlinear_cquad4_stress

  • nonlinear_ctria3_stress

  • nonlinear_cquad4_strain

  • nonlinear_ctria3_strain

  • hyperelastic_cquad4_strain

  • OESNLXR - solids

    • nonlinear_ctetra_stress_strain

    • nonlinear_cpenta_stress_strain

    • nonlinear_chexa_stress_strain

  • PVT

  • params

  • LAMA

  • eigenvalues

  • HISADD

  • convergence_history

  • R1TABRG

-response1_table

  • OEF - Forces

  • 0-d

  • celas1_force

  • celas2_force

  • celas3_force

  • celas4_force

  • cvisc_force

  • coneax_force

  • cdamp1_force

  • cdamp2_force

  • cdamp3_force

  • cdamp4_force

  • cgap_force

  • rod

  • crod_force

  • conrod_force

  • ctube_force

  • bar/beam

  • cbar_force

  • cbar_force_abs

  • cbar_force_srss

  • cbar_force_nrl

  • cbar_force_10nodes

  • cbeam_force

  • cbeam_force_vu

  • cbush_force

  • cbend_force

  • shell

  • cquad4_force

  • cquad8_force

  • cquadr_force

  • ctria3_force

  • ctria6_force

  • ctriar_force

  • cshear_force

  • solid

  • chexa_pressure_force

  • cpenta_pressure_force

  • ctetra_pressure_force

  • vu_quad_force

  • vu_tria_force

  • OEF - Fluxes

  • conv_thermal_load

  • chbdye_thermal_load

  • chbdye_thermal_load_flux

  • chbdyg_thermal_load

  • chbdyg_thermal_load_flux

  • chbdyp_thermal_load

  • chbdyp_thermal_load_flux

  • thermalLoad_1D

  • crod_thermal_load

  • crod_thermal_load_flux

  • cbeam_thermal_load

  • cbeam_thermal_load_flux

  • ctube_thermal_load

  • ctube_thermal_load_flux

  • conrod_thermal_load

  • conrod_thermal_load_flux

  • cbar_thermal_load

  • cbar_thermal_load_flux

  • cbend_thermal_load

  • cbend_thermal_load_flux

  • thermalLoad_2D_3D

  • cquad4_thermal_load

  • cquad4_thermal_load_flux

  • ctriax6_thermal_load

  • ctriax6_thermal_load_flux

  • cquad8_thermal_load

  • cquad8_thermal_load_flux

  • ctria3_thermal_load

  • ctria3_thermal_load_flux

  • ctria6_thermal_load

  • ctria6_thermal_load_flux

  • ctetra_thermal_load

  • ctetra_thermal_load_flux

  • chexa_thermal_load

  • chexa_thermal_load_flux

  • cpenta_thermal_load

  • cpenta_thermal_load_flux

  • thermalLoad_VU

  • thermalLoad_VU_3D

  • vu_beam_thermal_load

  • OEFIT - Failure Indices

  • cquad4_composite_force_failure_indicies

  • cquad8_composite_force_failure_indicies

  • ctria3_composite_force_failure_indicies

  • ctria6_composite_force_failure_indicies

  • OGS1 - Grid Point Stresses

  • grid_point_surface_stresses

  • grid_point_stresses_volume_direct

  • grid_point_stresses_volume_principal

  • grid_point_stress_discontinuities

  • OEE - Strain Energy Density

  • cquad4_strain_energy

  • cquad8_strain_energy

  • cquadr_strain_energy

  • cquadx_strain_energy

  • ctria3_strain_energy

  • ctria6_strain_energy

  • ctriar_strain_energy

  • ctriax_strain_energy

  • ctriax6_strain_energy

  • cshear_strain_energy

  • ctetra_strain_energy

  • cpenta_strain_energy

  • chexa_strain_energy

  • cpyram_strain_energy

  • crod_strain_energy

  • ctube_strain_energy

  • conrod_strain_energy

  • cbar_strain_energy

  • cbeam_strain_energy

  • cgap_strain_energy

  • cbush_strain_energy

  • celas1_strain_energy

  • celas2_strain_energy

  • celas3_strain_energy

  • celas4_strain_energy

  • cdum8_strain_energy

  • cbend_strain_energy

  • dmig_strain_energy

  • genel_strain_energy

  • conm2_strain_energy

  • rbe1_strain_energy

  • rbe3_strain_energy

  • unused?

  • displacement_scaled_response_spectra_nrl

  • displacement_scaled_response_spectra_abs

  • displacement_scaled_response_spectra_srss

  • velocity_scaled_response_spectra_abs

  • acceleration_scaled_response_spectra_nrl

  • acceleration_scaled_response_spectra_abs

OP2.Results()

The OP2.Results() are accessed using model.results. as a prefix (e.g., model.results.modal_contribution.celas1_stress).

  • eqexin

  • gpdt

  • bgpdt

  • ato # AutoCorrelationObjects() - see below

  • psd # PowerSpectralDensityObjects() - see below

  • rms # RootMeansSquareObjects() - see below

  • no # NumberOfCrossingsObjects() - see below

  • crm # CumulativeRootMeansSquareObjects() - see below

  • modal_contribution

    • celas1_stress

    • celas2_stress

    • celas3_stress

    • celas4_stress

    • celas1_strain

    • celas2_strain

    • celas3_strain

    • celas4_strain

    • crod_stress

    • conrod_stress

    • ctube_stress

    • crod_strain

    • conrod_strain

    • ctube_strain

    • ctetra_stress

    • cpenta_stress

    • chexa_stress

    • ctetra_strain

    • cpenta_strain

    • chexa_strain

    • cbar_stress

    • cbar_strain

    • cbeam_stress

    • cbeam_strain

    • ctria3_stress

    • ctria6_stress

    • cquad4_stress

    • cquad8_stress

    • cquadr_stress

    • ctriar_stress

    • ctria3_strain

    • ctria6_strain

    • cquad4_strain

    • cquad8_strain

    • cquadr_strain

    • ctriar_strain

    • cquad4_composite_stress

    • cquad8_composite_stress

    • cquadr_composite_stress

    • ctria3_composite_stress

    • ctria6_composite_stress

    • ctriar_composite_stress

    • cquad4_composite_strain

    • cquad8_composite_strain

    • cquadr_composite_strain

    • ctria3_composite_strain

    • ctria6_composite_strain

    • ctriar_composite_strain

    • cshear_stress

    • cshear_strain

    • cshear_force

    • cbush_stress

    • cbush_strain

  • strength_ratio

    • cquad4_composite_stress

    • cquad8_composite_stress

    • cquadr_composite_stress

    • ctria3_composite_stress

    • ctria6_composite_stress

    • ctriar_composite_stress

    • cquad4_composite_strain

    • cquad8_composite_strain

    • cquadr_composite_strain

    • ctria3_composite_strain

    • ctria6_composite_strain

    • ctriar_composite_strain

  • ROUGV1 # relative disp/vel/acc/eigenvectors

    • displacements

    • velocities

    • accelerations

    • eigenvectors

  • RADEFFM

    • eigenvectors

  • RADCONS

    • eigenvectors

  • RAFCONS

    • cbar_force

    • cquad4_force

    • cbush_force

  • RASCONS

    • ctetra_stress

    • cpenta_stress

    • chexa_stress

    • ctetra_strain

    • cpenta_strain

    • chexa_strain

    • ctria3_stress

    • ctria6_stress

    • cquad4_stress

    • cquad8_stress

    • cquadr_stress

    • ctriar_stress

    • ctria3_strain

    • ctria6_strain

    • cquad4_strain

    • cquad8_strain

    • cquadr_strain

    • ctriar_strain

  • RAECONS

    • ctria3_strain

    • cquad4_strain

    • chexa_strain

  • RAGCONS

    • grid_point_forces

  • RAPCONS

    • cquad4_composite_stress

    • cquad8_composite_stress

    • cquadr_composite_stress

    • ctria3_composite_stress

    • ctria6_composite_stress

    • ctriar_composite_stress

  • RANCONS

    • cbar_strain_energy

    • cbush_strain_energy

    • chexa_strain_energy

    • ctria3_strain_energy

    • cquad4_strain_energy

  • RADEATC

    • eigenvectors

  • RAFEATC

    • cbar_force

    • cquad4_force

    • cbush_force

  • RASEATC

    • chexa_stress

    • cquad4_stress

  • RAEEATC

    • chexa_strain

    • ctria3_strain

    • cquad4_strain

  • RAGEATC

    • grid_point_forces

  • RAPEATC

    • cquad4_composite_stress

    • cquad8_composite_stress

    • cquadr_composite_stress

    • ctria3_composite_stress

    • ctria6_composite_stress

    • ctriar_composite_stress

  • RANEATC

    • cbar_strain_energy

    • cbush_strain_energy

    • chexa_strain_energy

    • ctria3_strain_energy

    • cquad4_strain_energy

All of these results have the same outputs (shown under model.results.crm). For example, model.results.ato.displacements, model.results.crm.displacements.

  • ato # AutoCorrelationObjects()

  • psd # PowerSpectralDensityObjects()

  • rms # RootMeansSquareObjects()

  • no # NumberOfCrossingsObjects()

  • crm # CumulativeRootMeansSquareObjects()

    • displacements

    • velocities

    • accelerations

    • load_vectors

    • spc_forces

    • mpc_forces

    • crod_force

    • conrod_force

    • ctube_force

    • cbar_force

    • cbeam_force

    • cbush_stress

    • cbush_strain

    • crod_stress

    • conrod_stress

    • ctube_stress

    • cbar_stress

    • cbeam_stress

    • crod_strain

    • conrod_strain

    • ctube_strain

    • cbar_strain

    • cbeam_strain

    • ctetra_strain

    • cpenta_strain

    • chexa_strain

    • ctetra_stress

    • cpenta_stress

    • chexa_stress

    • celas1_stress

    • celas2_stress

    • celas3_stress

    • celas4_stress

    • celas1_strain

    • celas2_strain

    • celas3_strain

    • celas4_strain

    • celas1_force

    • celas2_force

    • celas3_force

    • celas4_force

    • ctria3_force

    • ctria6_force

    • ctriar_force

    • cquad4_force

    • cquad8_force

    • cquadr_force

    • ctria3_stress

    • ctria6_stress

    • cquad4_stress

    • cquad8_stress

    • cquadr_stress

    • ctriar_stress

    • ctria3_strain

    • ctria6_strain

    • cquad4_strain

    • cquad8_strain

    • cquadr_strain

    • ctriar_strain

    • cbend_stress

    • cbend_strain

    • cbend_force

    • cshear_stress

    • cshear_strain

    • cshear_force

    • cbush_force

    • cdamp1_force

    • cdamp2_force

    • cdamp3_force

    • cdamp4_force

    • cvisc_force

    • cquad4_composite_stress

    • cquad8_composite_stress

    • cquadr_composite_stress

    • ctria3_composite_stress

    • ctria6_composite_stress

    • ctriar_composite_stress

    • cquad4_composite_strain

    • cquad8_composite_strain

    • cquadr_composite_strain

    • ctria3_composite_strain

    • ctria6_composite_strain

    • ctriar_composite_strain

Matrices with explicit methods

These are simply accessor methods to various matrices. For example, model.total_effective_mass_matrix is the same as self.matrices['EFMFSMS'].

  • total_effective_mass_matrix (EFMFSMS)

  • effective_mass_matrix (EFMASSS)

  • rigid_body_mass_matrix (RBMASS)

  • modal_effective_mass_fraction (EFMFACS)

  • modal_participation_factors (MPFACS)

  • modal_effective_mass (MEFMASS)

  • modal_effective_weight (MEFWTS)

F06 Plotter
  • flutter (SOL 145) parser

    • Supports:
      • multiple subcases

      • PK and PKNL methods

    • plot_Vg_Vf(…), plot_Vg(…), plot_root_locus(…)

    • input/output units

GUI
  • buttons for picking, rotation center, distance, min/max

  • GUI Features:

    • Packages:

      • PyQt4/PyQt5

      • PySide/PySide2

      • QScintilla & pygments support for scripting code editor

    • color coded logging

    • legend menu

      • min/max control

      • number of labels/colors

      • additional color maps

      • legend position

    • animation menu

      • mix and match fringe/displacement/vector results (e.g., stress shown on a displaced model)

      • Real/Complex Results
        • Scale factor

        • Phase

        • Time

      • Multiple Animation Profiles

      • Where:

        • in GUI

        • exported gif

    • node/element highlighting

    • element groups

    • high resolution screenshots

    • nodal/centroidal picking

    • coordinate systems

    • results sidebar

    • custom user results

      • nodal fringe

      • centroidal fringe

      • deflection

      • nodal vector results (e.g., SPC forces)

    • preferences menu

Nastran Specific Features
  • multiple OP2s

  • deflection plots

  • SOL 200 support

  • geometry

    • all elements supported in BDF

  • bar profile visualzation

    • 3D

    • dimensional vectors

  • aero models

    • CAERO panels & subpanels

    • sideslip coordinate systems support

  • mass elements

  • plotting elements (e.g., PLOTEL)

  • nominal geometry (useful for deflection plots)

Nastran Geometry Results
  • node id

  • element id

  • property id

    • PSHELL breakdown

      • thickness, ts/t, 12I/t^3

      • for each material:

        • material id

        • stiffnesses

        • is_isotropic

    • PCOMP breakdown

      • total thickness

      • for each layer:

        • thickness

        • material id

        • stiffnesses

        • is_isotropic

    • PSOLID breakdown

      • material id

      • stiffnesses

      • is_isotropic

  • loads

  • optimization

  • design regions

  • current value

  • lower/upper bounds

  • mesh quality:

    • area, min/max interior angle, skew angle, aspect ratio, taper ratio results

Nastran OP2 Results
  • solution types:

    • analysis types:

      • static

      • modal

      • frequency response

      • load step

    • additional model complexity

      • optimization

      • preload

  • result quantities:

    • displacement, velocity, acceleration, eigenvectors

    • SPC/MPC forces

    • applied loads

    • temperature

    • stress/strain

    • strain energy

    • limited element forces

    • thermal gradient/flux

Converters / Additional GUI Options

pyNastran’s code base makes it easy to develop other useful tools that make use of common code. As such, additional formats are supported in terms of readers/writers/converters/viewing, but are not a main focus.

These include:

  • AFLR

  • AVL

  • Cart3d

  • Panair

  • OpenFOAM

  • S/HABP

  • LAWGS

  • FAST

  • STL

  • SU2

  • Tetgen

  • Tecplot

  • Usm3d

  • Abaqus

BDF

BDF Overview

Introduction

This is meant as a tutorial on how to use the pyNastran pyNastran.bdf.bdf.BDF class

The head/tail/file_slice methods can be found at:

These examples can be found at:

Example 1: Read/Write

this example will demonstate:

  • reading the BDF

  • getting some basic information

  • writing the BDF

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> bdf_filename = os.path.join(test_path, 'solid_bending.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename)

For unicode:

The standard encoding is utf-8, but most English decks should use latin1 and will fail with utf-8.

If you just have ascii, then you don’t need to worry about the encoding.

>>> model.read_bdf(bdf_filename, encoding='latin1')

print information about the model

>>> print(model.get_bdf_stats())
---BDF Statistics---
SOL 101

bdf.loads[1]
  FORCE:   23

bdf.loads[2]
  LOAD:    1

bdf.params
  PARAM    : 2

bdf.nodes
  GRID     : 72

bdf.elements
  CTETRA   : 186

bdf.properties
  PSOLID   : 1

bdf.materials
  MAT1     : 1

bdf.coords
  CORD2R   : ???

write the file

>>> bdf_filename_out = os.path.join(test_path, 'solid_bending_out.bdf')
>>> model.write_bdf(bdf_filename_out)

looking at the output

>>> print(file_slice(bdf_filename_out, 94, 100))
GRID          71         .500008 1.61116      3.
GRID          72         .500015 1.00001      3.
$ELEMENTS_WITH_PROPERTIES
PSOLID         1       1
CTETRA         1       1       8      13      67      33
CTETRA         2       1       8       7      62      59

write the file with large field format; double precision

>>> bdf_filename_out2 = os.path.join(test_path, 'solid_bending_out2.bdf')
>>> model.write_bdf(bdf_filename_out2, size=16, is_double=False)
>>> print(file_slice(bdf_filename_out2, 166, 175))
GRID*                 71                         .500008         1.61116
*                     3.
GRID*                 72                         .500015         1.00001
*                     3.
$ELEMENTS_WITH_PROPERTIES
PSOLID         1       1
CTETRA         1       1       8      13      67      33
CTETRA         2       1       8       7      62      59
CTETRA         3       1       8      45      58      66

write the file with large field format; double precision

>>> bdf_filename_out3 = os.path.join(test_path, 'solid_bending_out3.bdf')
>>> model.write_bdf(bdf_filename_out3, size=16, is_double=True)
>>> print(file_slice(bdf_filename_out3, 166, 175))
GRID*                 71                5.0000800000D-011.6111600000D+00
*       3.0000000000D+00
GRID*                 72                5.0001500000D-011.0000100000D+00
*       3.0000000000D+00
$ELEMENTS_WITH_PROPERTIES
PSOLID         1       1
CTETRA         1       1       8      13      67      33
CTETRA         2       1       8       7      62      59
CTETRA         3       1       8      45      58      66
Example 2: Printing Nodes

this example will demonstate:

  • writing cards

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> bdf_filename = os.path.join(test_path, 'solid_bending.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)
>>> f = open('junk.out', 'w')
Method 1 - using objects

GRIDs

>>> for nid,node in sorted(model.nodes.items()):
>>>     f.write(node.write_card(size=8, is_double=False))

GRIDSET

>>> if model.gridSet:
>>>     f.write(model.gridSet.write_card(size=8, is_double=False))

SPOINTs

>>> if model.spoints:
>>>     f.write(model.spoints.write_card(size=8, is_double=False))

CORDx

>>> for cid,coord in sorted(model.coords.items()):
>>>     if cid != 0:  # if CID=0 is the global frame, skip it
>>>         f.write(coord)
Method 2 - using built-in methods
>>> model._write_nodes(f)
>>> model._write_coords(f)
Example 3: Printing Elements/Properties

Print the Element ID and associated Node and Property to an Output File

note this skips rigidElements

this example will demonstate:

  • using the BDF class to write cards/properties

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> bdf_filename = os.path.join(test_path, 'solid_bending.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)
>>> f = open('junk.out', 'w')
Method 1 - using objects
>>> for eid, element in sorted(model.elements.items()):
>>>     f.write(element.write_card(size=8, is_double=False))
>>> for pid, prop in sorted(model.properties.items()):
>>>     f.write(prop.write_card(size=8, is_double=False))
Method 2 - using built-in method
>>> model._write_elements_properties(f)
Method 3 - using built-in methods
>>> model._write_elements(f)
>>> model._write_properties(f)
Example 4: Get Element ID & Type

Print the Element ID and its type(e.g. CQUAD4, CTRIA3, etc.) to a file

note this skips rigidElements

this example will demonstate:

  • accessing element type information

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> bdf_filename = os.path.join(test_path, 'solid_bending.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)
>>> f = open('junk.out', 'w')
Method 1 - using objects
>>> for eid,element in sorted(model.elements.items()):
>>>     msg = 'eid=%s type=%s\n' %(eid, element.type)
>>> f.write(msg)
Example 5: Get Elements by Node ID

this example will demonstate:

  • getting the list of elements that share a certain node

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> bdf_filename = os.path.join(test_path, 'solid_bending.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)
>>> f = open('junk.out', 'w')

given a Node, get the Elements Attached to that Node

assume node 55

doesnt support 0d/1d elements yet

>>> nid_to_eids_map = model.get_node_id_to_element_ids_map()
>>> eids = nid_to_eids_map[55]

convert to elements instead of element IDs

>>> elements = []
>>> for eid in eids:
>>>     elements.append(model.Element(eid))
>>> print("eids = %s" % eids)
>>> print("elements =\n %s" % elements)
Example 6: Get Elements by Property ID

this example will demonstate:

  • getting a list of elements that have a certain property

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'sol_101_elements')
>>> bdf_filename = os.path.join(test_path, 'static_solid_shell_bar.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)
>>> f = open('junk.out', 'w')

Creating a List of Elements based on a Property ID

assume pid=1

>>> pid_to_eids_map = model.get_property_id_to_element_ids_map()
>>> eids4  = pid_to_eids_map[4] # PSHELL
>>> print("eids4 = %s" % eids4)
eids4 = [6, 7, 8, 9, 10, 11]

convert to elements instead of element IDs

>>> elements4 = []
>>> for eid in eids4:
>>>     elements4.append(model.Element(eid))

just to verify

>>> elem = model.elements[eids4[0]]
>>> print(elem.pid)
PSHELL         4       1     .25       1               1
Example 7: Get Elements by Material ID

this example will demonstate:

  • getting a list of elements that have a certain material

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'sol_101_elements')
>>> bdf_filename = os.path.join(test_path, 'static_solid_shell_bar.bdf')

instantiate the model

>>> from pyNastran.bdf.bdf import BDF
>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)
>>> f = open('junk.out', 'w')

assume you want the eids for material 10

>>> pid_to_eids_map = model.get_property_id_to_element_ids_map()
>>> mid_to_pids_map = model.get_material_id_to_property_ids_map()
>>> pids1 = mid_to_pids_map[1]
>>> print('pids1 = %s' % pids1)
pids1 = [1, 2, 3, 4, 5]
>>> eids = []
>>> for pid in pids1:
>>>     eids += pid_to_eids_map[pid]

convert to elements instead of element IDs

>>> elements = []
>>> for eid in eids:
>>>     element = model.Element(eid)
>>>     elements.append(element)
>>>     print(str(element).rstrip())

CBAR          13       1      15      19      0.      1.      0.
$ Direct Text Input for Bulk Data
$ Pset: "shell" will be imported as: "pshell.1"
CHEXA          1       2       2       3       4       1       8       5
               6       7
CPENTA         2       2       6       8       5      10      11       9
CPENTA         3       2       6       7       8      10      12      11
CTETRA         4       2      10      11       9      13
CTETRA         5       2      10      12      11      13
CROD          14       3      16      20
CROD          15       3      17      21
CQUAD4         6       4       4       1      14      15
CQUAD4         7       4       3       2      17      16
CTRIA3         8       4       4       3      16
CTRIA3         9       4      16      15       4
CTRIA3        10       4       1       2      17
CTRIA3        11       4      17      14       1
$
CBEAM         12       5      14      18      0.      1.      0.     GGG

BDF Introduction

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/bdf_demo.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/bdf_demo.ipynb

Import pyNastran

import os
import pyNastran
print (pyNastran.__file__)
print (pyNastran.__version__)
pkg_path = pyNastran.__path__[0]

from pyNastran.bdf.bdf import BDF, read_bdf
from pyNastran.utils import object_attributes, object_methods

print("pkg_path = %s" % pkg_path)
Let’s load the iSat model into the pyNastranGUI

it’s a .dat file, so instead of:

>>> pyNastranGUI -i bdf_filename

we need to include the format:

>>> pyNastranGUI -f nastran -i bdf_filename

Alternatively, we could load the model and the results, but in this demo we’re just showing off the geometry. To do that instead:

>>> pyNastranGUI -f nastran -i bdf_filename -o op2_filename
bdf_filename = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'iSat', 'ISat_Launch_Sm_Rgd.dat'))
#bdf_filename = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'iSat', 'ISat_Dploy_Sm.dat'))
print(bdf_filename)

# look at the model
!pyNastranGUI -f nastran -i {bdf_filename} > junk.out
Loading a BDF

There are two ways to load a BDF; the long way or the short way.

The short way instantiates the ``BDF`` class and the short way uses the ``read_bdf`` function. As this demo was written for the Jupyter Notebook, we’ll use ``read_bdf`` and then mention the other method. The class-based method allows finer control over things like: - what cards should be loaded - OpenMDAO dynamic syntax support

The class-based method
print(bdf_filename)

# create the BDF object
bdf = BDF()

# read the file from the GUI
# don't cross-reference
bdf.read_bdf(bdf_filename, xref=False)
c:nasam4formatsgitpynastran_1.2modelsiSatISat_Launch_Sm_Rgd.dat
DEBUG: bdf.py:1107 ---starting BDF.read_bdf of c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat--- DEBUG: pybdf.py:542 opening 'c:\\nasa\\m4\\formats\\git\\pynastran_1.2\\models\\iSat\\ISat_Launch_Sm_Rgd.dat' DEBUG: bdf.py:1155 ---finished BDF.read_bdf of c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat---
The function-based method
bdf = read_bdf(bdf_filename, xref=False)
DEBUG: bdf.py:1107 ---starting BDF.read_bdf of c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat--- DEBUG: pybdf.py:542 opening 'c:\\nasa\\m4\\formats\\git\\pynastran_1.2\\models\\iSat\\ISat_Launch_Sm_Rgd.dat' DEBUG: bdf.py:1155 ---finished BDF.read_bdf of c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat---

For simplicity of using the demo, we’ll again use the read_bdf method

#bdf_filename = r'D:\work\pynastran_0.8.0_py27\models\iSat\ISat_Launch_Sm_Rgd.dat'
bdf_filename = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'iSat', 'ISat_Launch_Sm_Rgd.dat'))

# read the file as a path
bdf_xref = read_bdf(bdf_filename, xref=True)
DEBUG: bdf.py:1107 ---starting BDF.read_bdf of c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat--- DEBUG: pybdf.py:542 opening 'c:\\nasa\\m4\\formats\\git\\pynastran_1.2\\models\\iSat\\ISat_Launch_Sm_Rgd.dat' DEBUG: cross_reference.py:159 Cross Referencing... WARNING: shell.py:2360 PSHELL pid=1 midsurface: z1=0.400000006 z2=-0.400000006 t=0.035999998 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=2 midsurface: z1=0.400000006 z2=-0.400000006 t=0.054000005 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=3 midsurface: z1=0.400000006 z2=-0.400000006 t=0.017999999 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=7 midsurface: z1=0.418000013 z2=-0.418000013 t=0.035999998 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=34 midsurface: z1=0.194000006 z2=-0.194000006 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=38 midsurface: z1=0.284000009 z2=-0.284000009 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=46 midsurface: z1=0.199000001 z2=-0.199000001 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=37 midsurface: z1=0.308999985 z2=-0.308999985 t=0.0186 not in range of -1.5t < zi < 1.5t DEBUG: bdf.py:1155 ---finished BDF.read_bdf of c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat---
Interrogating the BDF object

IDE’s like WingIDE, PyCharm, Spyder and “Python Tools for Visual Studio” make it very easy to program with their object introspection ability. Unfortunately, because pyNastran has so many functions, it can be difficult to learn the code.

Some handy object introspection methods were created that will work on all pyNastran objects and even non-pyNastran objects. By convention, private data members/functions start with an underscore _, and public ones do not.

We can use the generic object attributes/methods functions

print(object_attributes(bdf))
print(object_methods(bdf))
['MATS1', 'MATS3', 'MATS8', 'MATT1', 'MATT2', 'MATT3', 'MATT4', 'MATT5', 'MATT8', 'MATT9', 'active_filename', 'active_filenames', 'aecomps', 'aefacts', 'aelinks', 'aelists', 'aeparams', 'aero', 'aeros', 'aestats', 'aesurf', 'aesurfs', 'ao_element_flags', 'asets', 'axic', 'axif', 'baror', 'bconp', 'bcrparas', 'bcs', 'bctadds', 'bctparas', 'bctsets', 'bdf_filename', 'beamor', 'blseg', 'bsets', 'bsurf', 'bsurfs', 'cMethods', 'caero_ids', 'caeros', 'card_count', 'cards_to_read', 'case_control_deck', 'case_control_lines', 'convection_properties', 'coord_ids', 'coords', 'creep_materials', 'csets', 'csschds', 'csuper', 'csupext', 'dareas', 'dconadds', 'dconstrs', 'ddvals', 'debug', 'delays', 'dequations', 'desvars', 'divergs', 'dlinks', 'dload_entries', 'dloads', 'dmigs', 'dmijis', 'dmijs', 'dmiks', 'dmis', 'doptprm', 'dphases', 'dresps', 'dscreen', 'dtable', 'dti', 'dumplines', 'dvcrels', 'dvgrids', 'dvmrels', 'dvprels', 'echo', 'element_ids', 'elements', 'epoints', 'executive_control_lines', 'flfacts', 'flutters', 'force_echo_off', 'frequencies', 'grdset', 'gridb', 'gusts', 'hyperelastic_materials', 'include_dir', 'include_filenames', 'initial_superelement_models', 'is_bdf_vectorized', 'is_long_ids', 'is_msc', 'is_nx', 'is_superelements', 'is_zona', 'load_combinations', 'loads', 'log', 'masses', 'material_ids', 'materials', 'methods', 'mkaeros', 'monitor_points', 'mpcadds', 'mpcs', 'nastran_format', 'ncaeros', 'ncoords', 'nelements', 'nid_map', 'nlparms', 'nlpcis', 'nmaterials', 'nnodes', 'node_ids', 'nodes', 'normals', 'npoints', 'nproperties', 'nsmadds', 'nsms', 'nxstrats', 'omits', 'paeros', 'params', 'pbusht', 'pdampt', 'pelast', 'phbdys', 'plotels', 'point_ids', 'points', 'properties', 'properties_mass', 'property_ids', 'punch', 'qsets', 'radcavs', 'radmtx', 'radset', 'random_tables', 'read_includes', 'reject_cards', 'reject_count', 'reject_lines', 'rigid_elements', 'ringaxs', 'ringfl', 'rotors', 'rsolmap_to_str', 'save_file_structure', 'se_bsets', 'se_csets', 'se_qsets', 'se_sets', 'se_suport', 'se_usets', 'sebndry', 'sebulk', 'seconct', 'seelt', 'seexcld', 'selabel', 'seload', 'seloc', 'sempln', 'senqset', 'seqgp', 'setree', 'sets', 'sol', 'sol_iline', 'sol_method', 'spcadds', 'spcoffs', 'spcs', 'special_cards', 'splines', 'spoints', 'subcases', 'superelement_models', 'suport', 'suport1', 'system_command_lines', 'tables', 'tables_d', 'tables_m', 'tables_sdamping', 'tempds', 'thermal_materials', 'tics', 'transfer_functions', 'trims', 'tstepnls', 'tsteps', 'type_slot_str', 'units', 'usets', 'values_to_skip', 'view3ds', 'views', 'wtmass', 'zona']
['AEFact', 'AELIST', 'AELink', 'AEList', 'AEParam', 'AEStat', 'AESurf', 'Acsid', 'Aero', 'Aeros', 'CAero', 'CMethod', 'Coord', 'DAREA', 'DConstr', 'DDVal', 'DELAY', 'DEQATN', 'DLoad', 'DMIG', 'DPHASE', 'DResp', 'DVcrel', 'DVmrel', 'DVprel', 'Desvar', 'Element', 'Elements', 'EmptyNode', 'EmptyNodes', 'FLFACT', 'Flutter', 'Gust', 'HyperelasticMaterial', 'Load', 'MPC', 'Mass', 'Material', 'Materials', 'Method', 'NLParm', 'NSM', 'Node', 'Nodes', 'PAero', 'Phbdy', 'Point', 'Points', 'Properties', 'Property', 'PropertyMass', 'RandomTable', 'RigidElement', 'SET1', 'SPC', 'Set', 'Spline', 'StructuralMaterial', 'Table', 'TableD', 'TableM', 'ThermalMaterial', 'add_accel', 'add_accel1', 'add_acsrce', 'add_aecomp', 'add_aecompl', 'add_aefact', 'add_aelink', 'add_aelist', 'add_aeparm', 'add_aero', 'add_aeros', 'add_aestat', 'add_aesurf', 'add_aesurfs', 'add_aset', 'add_aset1', 'add_axic', 'add_bcrpara', 'add_bctadd', 'add_bctpara', 'add_bctset', 'add_bset', 'add_bset1', 'add_bsurf', 'add_bsurfs', 'add_caero1', 'add_caero2', 'add_caero3', 'add_caero4', 'add_caero5', 'add_card', 'add_card_fields', 'add_card_ifile', 'add_card_lines', 'add_cbar', 'add_cbarao', 'add_cbeam', 'add_cbeam3', 'add_cbend', 'add_cbush', 'add_cbush1d', 'add_cbush2d', 'add_cconeax', 'add_cdamp1', 'add_cdamp2', 'add_cdamp3', 'add_cdamp4', 'add_cdamp5', 'add_celas1', 'add_celas2', 'add_celas3', 'add_celas4', 'add_cfast', 'add_cfluid2', 'add_cfluid3', 'add_cfluid4', 'add_cgap', 'add_cgen', 'add_chbdye', 'add_chbdyg', 'add_chbdyp', 'add_chexa', 'add_cihex1', 'add_cihex2', 'add_cmass1', 'add_cmass2', 'add_cmass3', 'add_cmass4', 'add_cmfree', 'add_conm1', 'add_conm2', 'add_conrod', 'add_conv', 'add_convm', 'add_cord1c', 'add_cord1r', 'add_cord1s', 'add_cord2c', 'add_cord2r', 'add_cord2s', 'add_cpenta', 'add_cplstn3', 'add_cplstn4', 'add_cplstn6', 'add_cplstn8', 'add_cplsts3', 'add_cpyram', 'add_cquad', 'add_cquad4', 'add_cquad8', 'add_cquadr', 'add_cquadx', 'add_cquadx4', 'add_cquadx8', 'add_crac2d', 'add_crac3d', 'add_creep', 'add_crod', 'add_cset', 'add_cset1', 'add_cshear', 'add_csschd', 'add_csuper', 'add_csupext', 'add_ctetra', 'add_ctrax3', 'add_ctrax6', 'add_ctria3', 'add_ctria6', 'add_ctriar', 'add_ctriax', 'add_ctriax6', 'add_ctube', 'add_cvisc', 'add_darea', 'add_dconadd', 'add_dconstr', 'add_ddval', 'add_deform', 'add_delay', 'add_deqatn', 'add_desvar', 'add_diverg', 'add_dlink', 'add_dload', 'add_dmi', 'add_dmig', 'add_dmig_uaccel', 'add_dmij', 'add_dmiji', 'add_dmik', 'add_doptprm', 'add_dphase', 'add_dresp1', 'add_dresp2', 'add_dresp3', 'add_dscreen', 'add_dtable', 'add_dti', 'add_dvcrel1', 'add_dvcrel2', 'add_dvgrid', 'add_dvmrel1', 'add_dvmrel2', 'add_dvprel1', 'add_dvprel2', 'add_eigb', 'add_eigc', 'add_eigp', 'add_eigr', 'add_eigrl', 'add_epoint', 'add_flfact', 'add_flutter', 'add_force', 'add_force1', 'add_force2', 'add_freq', 'add_freq1', 'add_freq2', 'add_freq3', 'add_freq4', 'add_freq5', 'add_genel_flexibility', 'add_genel_stiffness', 'add_gmload', 'add_gmspc', 'add_grav', 'add_grdset', 'add_grid', 'add_gust', 'add_load', 'add_loadcyn', 'add_lseq', 'add_mat1', 'add_mat10', 'add_mat11', 'add_mat2', 'add_mat3', 'add_mat3d', 'add_mat4', 'add_mat5', 'add_mat8', 'add_mat9', 'add_matg', 'add_mathe', 'add_mathp', 'add_mats1', 'add_matt1', 'add_matt2', 'add_matt3', 'add_matt4', 'add_matt5', 'add_matt8', 'add_matt9', 'add_mkaero1', 'add_mkaero2', 'add_moment', 'add_moment1', 'add_moment2', 'add_monpnt1', 'add_monpnt2', 'add_monpnt3', 'add_mpc', 'add_mpcadd', 'add_nlparm', 'add_nlpci', 'add_nsm', 'add_nsm1', 'add_nsmadd', 'add_nsml', 'add_nsml1', 'add_nxstrat', 'add_omit1', 'add_paero1', 'add_paero2', 'add_paero3', 'add_paero4', 'add_paero5', 'add_param', 'add_pbar', 'add_pbarl', 'add_pbcomp', 'add_pbeam', 'add_pbeam3', 'add_pbeaml', 'add_pbend', 'add_pbmsect', 'add_pbrsect', 'add_pbush', 'add_pbush1d', 'add_pbusht', 'add_pcomp', 'add_pcompg', 'add_pcomps', 'add_pconeax', 'add_pconv', 'add_pconvm', 'add_pdamp', 'add_pdamp5', 'add_pdampt', 'add_pelas', 'add_pelast', 'add_pfast', 'add_pgap', 'add_phbdy', 'add_pihex', 'add_pload', 'add_pload1', 'add_pload2', 'add_pload4', 'add_ploadx1', 'add_plotel', 'add_plplane', 'add_plsolid', 'add_pmass', 'add_point', 'add_pointax', 'add_pplane', 'add_prac2d', 'add_prac3d', 'add_presax', 'add_prod', 'add_pshear', 'add_pshell', 'add_psolid', 'add_ptube', 'add_pvisc', 'add_qbdy1', 'add_qbdy2', 'add_qbdy3', 'add_qhbdy', 'add_qset', 'add_qset1', 'add_qvect', 'add_qvol', 'add_radbc', 'add_radm', 'add_randps', 'add_randt1', 'add_rbar', 'add_rbar1', 'add_rbe1', 'add_rbe2', 'add_rbe3', 'add_rforce', 'add_rforce1', 'add_rgyro', 'add_ringax', 'add_rload1', 'add_rload2', 'add_rotord', 'add_rotorg', 'add_rrod', 'add_rspint', 'add_rspline', 'add_rsscon', 'add_sebndry', 'add_sebset', 'add_sebset1', 'add_sebulk', 'add_seconct', 'add_secset', 'add_secset1', 'add_seelt', 'add_seexcld', 'add_selabel', 'add_seload', 'add_seloc', 'add_sempln', 'add_senqset', 'add_seqgp', 'add_seqset', 'add_seqset1', 'add_seset', 'add_sesup', 'add_set1', 'add_set3', 'add_setree', 'add_sload', 'add_spc', 'add_spc1', 'add_spcadd', 'add_spcax', 'add_spcd', 'add_spline1', 'add_spline2', 'add_spline3', 'add_spline4', 'add_spline5', 'add_spoint', 'add_suport', 'add_suport1', 'add_tabdmp1', 'add_tabled1', 'add_tabled2', 'add_tabled3', 'add_tabled4', 'add_tablem1', 'add_tablem2', 'add_tablem3', 'add_tablem4', 'add_tables1', 'add_tablest', 'add_tabrnd1', 'add_tabrndg', 'add_temp', 'add_tempax', 'add_tempd', 'add_tf', 'add_tic', 'add_tload1', 'add_tload2', 'add_trim', 'add_tstep', 'add_tstep1', 'add_tstepnl', 'add_uset', 'add_uset1', 'clear_attributes', 'create_card_object', 'cross_reference', 'deprecated', 'disable_cards', 'export_hdf5_file', 'export_hdf5_filename', 'geom_check', 'get_MPCx_node_ids', 'get_MPCx_node_ids_c1', 'get_SPCx_node_ids', 'get_SPCx_node_ids_c1', 'get_area_breakdown', 'get_bdf_cards', 'get_bdf_cards_dict', 'get_bdf_stats', 'get_card_ids_by_card_types', 'get_cards_by_card_types', 'get_custom_types', 'get_dependent_nid_to_components', 'get_displacement_index', 'get_displacement_index_xyz_cp_cd', 'get_dload_entries', 'get_element_faces', 'get_element_ids_dict_with_pids', 'get_element_ids_list_with_pids', 'get_element_nodes_by_element_type', 'get_elements_nodes_by_property_type', 'get_elements_properties_nodes_by_element_type', 'get_encoding', 'get_h5attrs', 'get_length_breakdown', 'get_load_arrays', 'get_mass_breakdown', 'get_material_id_to_property_ids_map', 'get_material_ids', 'get_mklist', 'get_mpcs', 'get_nid_map', 'get_node_id_to_element_ids_map', 'get_node_id_to_elements_map', 'get_node_ids_with_elements', 'get_pid_to_node_ids_and_elements_array', 'get_point_grids', 'get_pressure_array', 'get_property_id_to_element_ids_map', 'get_reduced_dloads', 'get_reduced_loads', 'get_reduced_mpcs', 'get_reduced_nsms', 'get_reduced_spcs', 'get_rigid_elements_with_node_ids', 'get_rslot_map', 'get_spcs', 'get_structural_material_ids', 'get_thermal_material_ids', 'get_volume_breakdown', 'get_xyz_in_coord', 'get_xyz_in_coord_array', 'get_xyz_in_coord_no_xref', 'include_zip', 'increase_card_count', 'is_reject', 'load', 'load_hdf5_file', 'load_hdf5_filename', 'mass_properties', 'mass_properties_no_xref', 'mass_properties_nsm', 'object_attributes', 'object_methods', 'pop_parse_errors', 'pop_xref_errors', 'read_bdf', 'reject_card_lines', 'replace_cards', 'reset_errors', 'reset_rslot_map', 'safe_acsid', 'safe_aefact', 'safe_aelist', 'safe_caero', 'safe_coord', 'safe_cross_reference', 'safe_element', 'safe_elements', 'safe_empty_nodes', 'safe_get_elements', 'safe_get_nodes', 'safe_get_points', 'safe_material', 'safe_paero', 'safe_property', 'safe_property_mass', 'safe_tabled', 'safe_tableh', 'save', 'saves', 'set_as_msc', 'set_as_nx', 'set_as_zona', 'set_cards', 'set_dynamic_syntax', 'set_error_storage', 'set_param', 'sum_forces_moments', 'sum_forces_moments_elements', 'superelement_nodes', 'transform_xyzcp_to_xyz_cid', 'uncross_reference', 'update_card', 'update_model_by_desvars', 'update_solution', 'validate', 'write_bdf', 'write_bdfs', 'write_skin_solid_faces']
print("attributes = [%s]\n" % ', '.join(bdf.object_attributes()))
print("methods = [%s]\n" % ', '.join(bdf.object_methods()))
attributes = [MATS1, MATS3, MATS8, MATT1, MATT2, MATT3, MATT4, MATT5, MATT8, MATT9, active_filename, active_filenames, aecomps, aefacts, aelinks, aelists, aeparams, aero, aeros, aestats, aesurf, aesurfs, ao_element_flags, asets, axic, axif, baror, bconp, bcrparas, bcs, bctadds, bctparas, bctsets, bdf_filename, beamor, blseg, bsets, bsurf, bsurfs, cMethods, caeros, card_count, cards_to_read, case_control_deck, case_control_lines, convection_properties, coords, creep_materials, csets, csschds, csuper, csupext, dareas, dconadds, dconstrs, ddvals, debug, delays, dequations, desvars, divergs, dlinks, dload_entries, dloads, dmigs, dmijis, dmijs, dmiks, dmis, doptprm, dphases, dresps, dscreen, dtable, dti, dumplines, dvcrels, dvgrids, dvmrels, dvprels, echo, elements, epoints, executive_control_lines, flfacts, flutters, force_echo_off, frequencies, grdset, gridb, gusts, hyperelastic_materials, include_dir, include_filenames, initial_superelement_models, is_bdf_vectorized, is_msc, is_nx, is_superelements, is_zona, load_combinations, loads, masses, materials, methods, mkaeros, monitor_points, mpcadds, mpcs, nastran_format, nid_map, nlparms, nlpcis, nodes, normals, npoints, nsmadds, nsms, nxstrats, omits, paeros, params, pbusht, pdampt, pelast, phbdys, plotels, points, properties, properties_mass, punch, qsets, radcavs, radmtx, radset, random_tables, read_includes, reject_cards, reject_count, reject_lines, rigid_elements, ringaxs, ringfl, rotors, rsolmap_to_str, save_file_structure, se_bsets, se_csets, se_qsets, se_sets, se_suport, se_usets, sebndry, sebulk, seconct, seelt, seexcld, selabel, seload, seloc, sempln, senqset, seqgp, setree, sets, sol, sol_iline, sol_method, spcadds, spcoffs, spcs, special_cards, splines, spoints, superelement_models, suport, suport1, system_command_lines, tables, tables_d, tables_m, tables_sdamping, tempds, thermal_materials, tics, transfer_functions, trims, tstepnls, tsteps, type_slot_str, units, usets, values_to_skip, view3ds, views, wtmass, zona]

methods = [AEFact, AELIST, AELink, AEList, AEParam, AEStat, AESurf, Acsid, Aero, Aeros, CAero, CMethod, Coord, DAREA, DConstr, DDVal, DELAY, DEQATN, DLoad, DMIG, DPHASE, DResp, DVcrel, DVmrel, DVprel, Desvar, Element, Elements, EmptyNode, EmptyNodes, FLFACT, Flutter, Gust, HyperelasticMaterial, Load, MPC, Mass, Material, Materials, Method, NLParm, NSM, Node, Nodes, PAero, Phbdy, Point, Points, Properties, Property, PropertyMass, RandomTable, RigidElement, SET1, SPC, Set, Spline, StructuralMaterial, Table, TableD, TableM, ThermalMaterial, add_accel, add_accel1, add_acsrce, add_aecomp, add_aecompl, add_aefact, add_aelink, add_aelist, add_aeparm, add_aero, add_aeros, add_aestat, add_aesurf, add_aesurfs, add_aset, add_aset1, add_axic, add_bcrpara, add_bctadd, add_bctpara, add_bctset, add_bset, add_bset1, add_bsurf, add_bsurfs, add_caero1, add_caero2, add_caero3, add_caero4, add_caero5, add_card, add_card_fields, add_card_ifile, add_card_lines, add_cbar, add_cbarao, add_cbeam, add_cbeam3, add_cbend, add_cbush, add_cbush1d, add_cbush2d, add_cconeax, add_cdamp1, add_cdamp2, add_cdamp3, add_cdamp4, add_cdamp5, add_celas1, add_celas2, add_celas3, add_celas4, add_cfast, add_cfluid2, add_cfluid3, add_cfluid4, add_cgap, add_cgen, add_chbdye, add_chbdyg, add_chbdyp, add_chexa, add_cihex1, add_cihex2, add_cmass1, add_cmass2, add_cmass3, add_cmass4, add_cmfree, add_conm1, add_conm2, add_conrod, add_conv, add_convm, add_cord1c, add_cord1r, add_cord1s, add_cord2c, add_cord2r, add_cord2s, add_cpenta, add_cplstn3, add_cplstn4, add_cplstn6, add_cplstn8, add_cplsts3, add_cpyram, add_cquad, add_cquad4, add_cquad8, add_cquadr, add_cquadx, add_cquadx4, add_cquadx8, add_crac2d, add_crac3d, add_creep, add_crod, add_cset, add_cset1, add_cshear, add_csschd, add_csuper, add_csupext, add_ctetra, add_ctrax3, add_ctrax6, add_ctria3, add_ctria6, add_ctriar, add_ctriax, add_ctriax6, add_ctube, add_cvisc, add_darea, add_dconadd, add_dconstr, add_ddval, add_deform, add_delay, add_deqatn, add_desvar, add_diverg, add_dlink, add_dload, add_dmi, add_dmig, add_dmig_uaccel, add_dmij, add_dmiji, add_dmik, add_doptprm, add_dphase, add_dresp1, add_dresp2, add_dresp3, add_dscreen, add_dtable, add_dti, add_dvcrel1, add_dvcrel2, add_dvgrid, add_dvmrel1, add_dvmrel2, add_dvprel1, add_dvprel2, add_eigb, add_eigc, add_eigp, add_eigr, add_eigrl, add_epoint, add_flfact, add_flutter, add_force, add_force1, add_force2, add_freq, add_freq1, add_freq2, add_freq3, add_freq4, add_freq5, add_genel_flexibility, add_genel_stiffness, add_gmload, add_gmspc, add_grav, add_grdset, add_grid, add_gust, add_load, add_loadcyn, add_lseq, add_mat1, add_mat10, add_mat11, add_mat2, add_mat3, add_mat3d, add_mat4, add_mat5, add_mat8, add_mat9, add_matg, add_mathe, add_mathp, add_mats1, add_matt1, add_matt2, add_matt3, add_matt4, add_matt5, add_matt8, add_matt9, add_mkaero1, add_mkaero2, add_moment, add_moment1, add_moment2, add_monpnt1, add_monpnt2, add_monpnt3, add_mpc, add_mpcadd, add_nlparm, add_nlpci, add_nsm, add_nsm1, add_nsmadd, add_nsml, add_nsml1, add_nxstrat, add_omit1, add_paero1, add_paero2, add_paero3, add_paero4, add_paero5, add_param, add_pbar, add_pbarl, add_pbcomp, add_pbeam, add_pbeam3, add_pbeaml, add_pbend, add_pbmsect, add_pbrsect, add_pbush, add_pbush1d, add_pbusht, add_pcomp, add_pcompg, add_pcomps, add_pconeax, add_pconv, add_pconvm, add_pdamp, add_pdamp5, add_pdampt, add_pelas, add_pelast, add_pfast, add_pgap, add_phbdy, add_pihex, add_pload, add_pload1, add_pload2, add_pload4, add_ploadx1, add_plotel, add_plplane, add_plsolid, add_pmass, add_point, add_pointax, add_pplane, add_prac2d, add_prac3d, add_presax, add_prod, add_pshear, add_pshell, add_psolid, add_ptube, add_pvisc, add_qbdy1, add_qbdy2, add_qbdy3, add_qhbdy, add_qset, add_qset1, add_qvect, add_qvol, add_radbc, add_radm, add_randps, add_randt1, add_rbar, add_rbar1, add_rbe1, add_rbe2, add_rbe3, add_rforce, add_rforce1, add_rgyro, add_ringax, add_rload1, add_rload2, add_rotord, add_rotorg, add_rrod, add_rspint, add_rspline, add_rsscon, add_sebndry, add_sebset, add_sebset1, add_sebulk, add_seconct, add_secset, add_secset1, add_seelt, add_seexcld, add_selabel, add_seload, add_seloc, add_sempln, add_senqset, add_seqgp, add_seqset, add_seqset1, add_seset, add_sesup, add_set1, add_set3, add_setree, add_sload, add_spc, add_spc1, add_spcadd, add_spcax, add_spcd, add_spline1, add_spline2, add_spline3, add_spline4, add_spline5, add_spoint, add_suport, add_suport1, add_tabdmp1, add_tabled1, add_tabled2, add_tabled3, add_tabled4, add_tablem1, add_tablem2, add_tablem3, add_tablem4, add_tables1, add_tablest, add_tabrnd1, add_tabrndg, add_temp, add_tempax, add_tempd, add_tf, add_tic, add_tload1, add_tload2, add_trim, add_tstep, add_tstep1, add_tstepnl, add_uset, add_uset1, clear_attributes, create_card_object, cross_reference, deprecated, disable_cards, export_hdf5_file, export_hdf5_filename, geom_check, get_MPCx_node_ids, get_MPCx_node_ids_c1, get_SPCx_node_ids, get_SPCx_node_ids_c1, get_area_breakdown, get_bdf_cards, get_bdf_cards_dict, get_bdf_stats, get_card_ids_by_card_types, get_cards_by_card_types, get_custom_types, get_dependent_nid_to_components, get_displacement_index, get_displacement_index_xyz_cp_cd, get_dload_entries, get_element_faces, get_element_ids_dict_with_pids, get_element_ids_list_with_pids, get_element_nodes_by_element_type, get_elements_nodes_by_property_type, get_elements_properties_nodes_by_element_type, get_encoding, get_h5attrs, get_length_breakdown, get_load_arrays, get_mass_breakdown, get_material_id_to_property_ids_map, get_material_ids, get_mklist, get_mpcs, get_nid_map, get_node_id_to_element_ids_map, get_node_id_to_elements_map, get_node_ids_with_elements, get_pid_to_node_ids_and_elements_array, get_point_grids, get_pressure_array, get_property_id_to_element_ids_map, get_reduced_dloads, get_reduced_loads, get_reduced_mpcs, get_reduced_nsms, get_reduced_spcs, get_rigid_elements_with_node_ids, get_rslot_map, get_spcs, get_structural_material_ids, get_thermal_material_ids, get_volume_breakdown, get_xyz_in_coord, get_xyz_in_coord_array, get_xyz_in_coord_no_xref, include_zip, increase_card_count, is_reject, load, load_hdf5_file, load_hdf5_filename, mass_properties, mass_properties_no_xref, mass_properties_nsm, pop_parse_errors, pop_xref_errors, read_bdf, reject_card_lines, replace_cards, reset_errors, reset_rslot_map, safe_acsid, safe_aefact, safe_aelist, safe_caero, safe_coord, safe_cross_reference, safe_element, safe_elements, safe_empty_nodes, safe_get_elements, safe_get_nodes, safe_get_points, safe_material, safe_paero, safe_property, safe_property_mass, safe_tabled, safe_tableh, save, saves, set_as_msc, set_as_nx, set_as_zona, set_cards, set_dynamic_syntax, set_error_storage, set_param, sum_forces_moments, sum_forces_moments_elements, superelement_nodes, transform_xyzcp_to_xyz_cid, uncross_reference, update_card, update_model_by_desvars, update_solution, validate, write_bdf, write_bdfs, write_skin_solid_faces]
print(bdf.get_bdf_stats())
print("card_count = %s\n" % bdf.card_count)
print("reject_count = %s" % bdf.reject_count)
---BDF Statistics---
SOL 103

bdf.spcs[1]
  SPC:     1

bdf.params
  PARAM    : 8

bdf.nodes
  GRID     : 5380

bdf.elements
  CBAR     : 827
  CBUSH    : 104
  CHEXA    : 25
  CQUAD4   : 4580
  CTRIA3   : 32

bdf.rigid_elements
  RBE2     : 44

bdf.properties
  PBAR     : 1
  PBARL    : 18
  PBUSH    : 2
  PSHELL   : 8
  PSOLID   : 4

bdf.masses
  CONM2    : 15

bdf.materials
  MAT1     : 14
  MAT8     : 8

bdf.coords
  CORD2R   : 75

bdf.methods
  EIGRL    : 1

bdf.usets
  USET     : 1


card_count = {'ENDDATA': 1, 'PARAM': 8, 'SPC': 1, 'USET': 1, 'EIGRL': 1, 'CORD2R': 75, 'GRID': 5380, 'CQUAD4': 4580, 'CBAR': 827, 'CHEXA': 25, 'RBE2': 44, 'CTRIA3': 32, 'CBUSH': 104, 'CONM2': 15, 'MAT1': 14, 'MAT8': 8, 'PSHELL': 8, 'PBARL': 18, 'PSOLID': 4, 'PBAR': 1, 'PBUSH': 2}

reject_count = {}
Cross-referencing

Cross-referencing a BDF allows improved usability of the ``BDF`` class. It comes with some negative side effects, but in general is a very useful thing. It dramatically minimizes the amount of code you need to write, greatly simplifies future operations, and is highly recommended.

The major downside is it slows down the code.

Without Cross-Referencing (xref=False)

Here the raw values of the the data objects are returned to us

cquad = bdf.elements[1]
print(cquad)
nid1 = cquad.nodes[0]
print("nid1 = %s" % nid1)
n1 = bdf.nodes[nid1]
cd4 = n1.cd
c4 = bdf.coords[cd4]
print("i (xref=False) = %s" % str(c4.i))
#print object_attributes(c4)
$*
$*  ELEMENT CARDS
$*
CQUAD4         1       1       1       2       4       3

nid1 = 1
i (xref=False) = [1. 0. 0.]
Cross-Referenced (xref=True)

Here we can trace the referenced objects very easily.

A cross-referenced attribute is indicated with the ``*_ref`` suffix: * cquad4_element.nodes : not cross referenced * cquad4_element.nodes_ref : cross referenced

print("i (xref=True) = %s" % bdf_xref.elements[1].nodes_ref[0].cd_ref.i)
i (xref=True) = [1. 0. 0.]

So how is this done?

cquad.nodes_ref = []
cquad.nodes_ref.append(n1)
print(cquad.nodes_ref[0])
$*
$*  GRID CARDS
$*
GRID           1       4    -4.5    -7.5    -14.       4
Let’s show off the GRID card
# some Grid methods
n1 = bdf_xref.nodes[1]
print(n1)

# the comment
c1 = bdf_xref.nodes[1].comment
c2 = bdf_xref.nodes[2].comment
print("c1=%r" % c1)
print("c2=%r" % c2)


# get the position of a node
# in the local cooordinate system
print("xyz = %s" % n1.xyz)

# in the global frame
print("position = %s" % n1.get_position())

# in an arbitrary frame
print("wrt5 = %s" % n1.get_position_wrt(bdf, 5))
print("wrt4 = %s" % n1.get_position_wrt(bdf, 4))
$*
$*  GRID CARDS
$*
GRID           1       4    -4.5    -7.5    -14.       4

c1='$*n$*  GRID CARDSn$*n'
c2=''
xyz = [ -4.5  -7.5 -14. ]
position = [ -4.5  -7.5 -14. ]
wrt5 = [  2.12132034  14.         -26.59188309]
wrt4 = [ -4.5  -7.5 -14. ]

Now let’s modify the ``GRID`` card and write it out

n1 = bdf_xref.nodes[1]
n1.xyz[1] = -7.5
print("repr  = %s" % n1.repr_fields())
print("raw   = %s" % n1.repr_fields())

# n1.xyz[1] = 100000000000.
print("repr2 = %s" % n1.repr_fields())
print(n1)
print(n1.write_card(size=8))
print(n1.write_card(size=16, is_double=False))
print(n1.write_card(size=16, is_double=True))
repr  = ['GRID', 1, 4, -4.5, -7.5, -14.0, 4, '', None]
raw   = ['GRID', 1, 4, -4.5, -7.5, -14.0, 4, '', None]
repr2 = ['GRID', 1, 4, -4.5, -7.5, -14.0, 4, '', None]
$*
$*  GRID CARDS
$*
GRID           1       4    -4.5    -7.5    -14.       4

$*
$*  GRID CARDS
$*
GRID           1       4    -4.5    -7.5    -14.       4

$*
$*  GRID CARDS
$*
GRID*                  1               4            -4.5            -7.5
*                   -14.               4

$*
$*  GRID CARDS
$*
GRID*                  1               4-4.500000000D+00-7.500000000D+00
*       -1.400000000D+01               4
Calculating the mass of the structure

You can also calculate the mass of individual groups

mass, cg, I = bdf_xref.mass_properties()
print("mass = %s\n" % mass)

bdf_xref.mass_properties()
area_breakdown = bdf_xref.get_area_breakdown(property_ids=None, sum_bar_area=True)
table_lines = ['%-3s: %s\n' % (k, v) for k, v in sorted(area_breakdown.items())]
print('area_breakdown:\n%s\n' % ''.join(table_lines))

pids_to_mass, mass_type_to_mass = bdf_xref.get_mass_breakdown(property_ids=None, stop_if_no_mass=True)
table_lines = ['%-3s: %s\n' % (k, v) for k, v in sorted(pids_to_mass.items())]
print('mass_breakdown properties:\n%s\n' % ''.join(table_lines))
print('mass_breakdown masses:\n%s\n' % mass_type_to_mass)

volume_breakdown = bdf_xref.get_volume_breakdown(property_ids=None)
table_lines = ['%-3s: %s\n' % (k, v) for k, v in sorted(volume_breakdown.items())]
print('volume_breakdown:\n%s' % ''.join(table_lines))
mass = 1.7746011578443164

area_breakdown:
1  : 2807.9999999999873
2  : 3775.821643408031
3  : 3126.7012947840108
4  : 30.79009842432805
7  : 2815.099327279977
9  : 14.828303331033284
10 : 0.47123889803846714
12 : 0.5364976066492582
13 : 0.8885208097843912
14 : 0.7040464383245798
15 : 0.5826161160904479
16 : 0.6148182523366601
19 : 27.937341701307243
21 : 1.8849560445432187
22 : 0.13412440166231454
23 : 0.17601160958114495
33 : 4.523893217594095
34 : 726.2061840339735
35 : 7.488919259999999
36 : 8.228384167359806
37 : 3527.999999999994
38 : 1270.3425529271904
39 : 2.6317113721498187
41 : 1.1313811432273508
42 : 10.990017829889638
43 : 18.115180916725283
46 : 741.00586611462


mass_breakdown properties:
1  : 0.027277887741788746
2  : 0.047992762103254816
3  : 0.02099754503346675
4  : 0.012215670441971119
5  : 0.33015780000000006
7  : 0.027813499178780537
8  : 0.08158356674999993
9  : 0.07764247249451299
10 : 0.0002359723127060847
11 : 0.041699540901982614
12 : 0.0004572896419732434
13 : 0.003885126000791797
14 : 0.00035284798842724434
15 : 0.0036261119992419943
16 : 0.0
19 : 0.017748849515790373
20 : 0.163081991669256
21 : 0.0036250296551127333
22 : 0.0
23 : 0.0
33 : 0.0013462746328861252
34 : 0.0035610911559462153
35 : 0.0
36 : 0.007196651333033216
37 : 0.0945659013652082
38 : 0.007602230793126197
39 : 0.0024328318514722706
41 : 0.0007353854868221845
42 : 0.0088541268554014
43 : 0.01224145559837195
46 : 0.003671235343011555


mass_breakdown masses:
{'CONM2': 0.7720000099999998}

volume_breakdown:
1  : 101.08799438399943
2  : 203.8943876231405
3  : 56.280620179411706
4  : 68.35241635875428
5  : 2100.0
7  : 101.34357015187966
8  : 110.24999999999991
9  : 48.56269340913401
10 : 0.9110618695410359
11 : 466.6577492124528
12 : 2.5587504307014672
13 : 1.3327812149482106
14 : 1.9743503011887258
15 : 0.5826161159686574
16 : 1.9983305902008948
19 : 99.3131533594663
20 : 2376.0
21 : 4.7123901113580455
22 : 0.15084661593460977
23 : 0.16128631010351485
33 : 5.197811005397997
34 : 13.507435023031892
35 : 120.88885224756376
36 : 40.26864596920936
37 : 65.62080000000002
38 : 23.62837148444574
39 : 13.612837415073471
41 : 4.11482736197198
42 : 49.5430003771425
43 : 68.496696425457
46 : 13.78270910973193
Examples of xref on elements
eid100 = bdf_xref.elements[100]
print(eid100)
print("nodes = %s" % eid100.nodes)
print("--node0--\n%s" % eid100.nodes_ref[0])
print("--cd--\n%s" % eid100.nodes_ref[0].cd)
print("cd.cid = %s" % eid100.nodes_ref[0].cd_ref.cid)

print("area = %s" % eid100.Area())
print("mass = %s" % eid100.Mass())
print("--pid--\n%s" % eid100.pid)
print("pid.pid = %s" % eid100.pid_ref.pid)
print("pid.Pid() = %s" % eid100.Pid())

print(eid100.pid_ref.mid1_ref)
print("type = %s" % eid100.pid_ref.mid1_ref.type)
print("nu12 = %s" % eid100.pid_ref.mid1_ref.nu12)
print("mass = %s" % eid100.Mass())
CQUAD4       100       1     149     152     161     160

nodes = [149, 152, 161, 160]
--node0--
GRID         149       4      3.     7.5   -16.5       4

--cd--
4
cd.cid = 4
area = 3.75
mass = 3.642880307396999e-05
--pid--
1
pid.pid = 1
pid.Pid() = 1
$*
$*  I-DEAS Material: 6  name: BUS_CFRP_PW_ORTHO
$* M46J PW ETW
MAT8           6   1.7+7   1.7+7     .98 340000. 180000. 180000..0001712
                           71.33

type = MAT8
nu12 = 0.98
mass = 3.642880307396999e-05
Write the modified deck

Let’s first switch to the desktop to make the file easy to find

import getpass
name = getpass.getuser()
os.chdir(os.path.join(r'C:\Users', name, 'Desktop'))
pwd
'C:\Users\sdoyle\Desktop'

There are two ways to write a deck - ``interspersed`` : alternate properties and elements (similar to how Patran writes decks) - ``not-interspersed (default)`` : much faster

We can also use 8 or 16 character field width as well as double precision.

Note that double precision only works for certain cards (e.g. GRID, COORD, DMIG) and not much else.

bdf_xref.write_bdf('fem.bdf', interspersed=False, size=8, is_double=False)
!tail -n 5 "fem.bdf"

bdf_xref.write_bdf('fem.bdf', interspersed=True, size=16, is_double=False)
!tail "fem.bdf"

bdf_xref.write_bdf('fem.bdf', interspersed=True, size=16, is_double=True)
!tail "fem.bdf"
DEBUG: write_mesh.py:157 ---starting BDF.write_bdf of fem.bdf---
CORD2R        75        1.355-13-2.19-15    -40.1.355-13-2.19-15      0.
             40.-2.19-15    -40.
CORD2R        76        1.355-13-2.19-15    -40.1.355-13-2.19-15      0.
             40.-2.19-15    -40.
ENDDATA
DEBUG: write_mesh.py:157 ---starting BDF.write_bdf of fem.bdf---
*
CORD2R*               75                 1.3549966049-13-2.1854783949-15
*                   -40. 1.3549966049-13-2.1854783949-15              0.
*                    40.-2.1854783949-15            -40.
*
CORD2R*               76                 1.3549966049-13-2.1854783949-15
*                   -40. 1.3549966049-13-2.1854783949-15              0.
*                    40.-2.1854783949-15            -40.
*
ENDDATA
DEBUG: write_mesh.py:157 ---starting BDF.write_bdf of fem.bdf---
*
CORD2R*               75                1.3549966049D-13-2.185478395D-15
*       -4.000000000D+011.3549966049D-13-2.185478395D-150.0000000000D+00
*       4.0000000000D+01-2.185478395D-15-4.000000000D+01
*
CORD2R*               76                1.3549966049D-13-2.185478395D-15
*       -4.000000000D+011.3549966049D-13-2.185478395D-150.0000000000D+00
*       4.0000000000D+01-2.185478395D-15-4.000000000D+01
*
ENDDATA
bdf_filename
'c:\nasa\m4\formats\git\pynastran_1.2\models\iSat\ISat_Launch_Sm_Rgd.dat'
pyNastranGUI
print(bdf_filename)
%echo {bdf_filename}
#!pyNastranGUI -f nastran -i {bdf_filename}

solid_bending_bdf = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'solid_bending', 'solid_bending.bdf'))
solid_bending_op2 = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'solid_bending', 'solid_bending.op2'))

!pyNastranGUI -f nastran -i {solid_bending_bdf} -o {solid_bending_op2}  > junk.out
print("done")
c:nasam4formatsgitpynastran_1.2modelsiSatISat_Launch_Sm_Rgd.dat
c:nasam4formatsgitpynastran_1.2modelsiSatISat_Launch_Sm_Rgd.dat
done

We can also script the GUI!

solid_bending_bdf = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'solid_bending', 'solid_bending.bdf'))
solid_bending_op2 = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'solid_bending', 'solid_bending.op2'))

if os.path.exists('wireframe_solid_bending.png'):
    os.remove('wireframe_solid_bending.png')

with open('script.py', 'w') as f:
    f.write('self.on_wireframe()\n')
    picture_filename = os.path.join(os.getcwd(), 'wireframe_solid_bending.png')
    f.write("self.on_take_screenshot(%r)\n" % picture_filename)
    f.write('sys.exit()')

!pwd
!pyNastranGUI -f nastran -i {solid_bending_bdf} -o {solid_bending_op2} --postscript script.py > junk.out

# display in a popup
!wireframe_solid_bending.png

from IPython.display import Image
from IPython.display import display
assert os.path.exists('wireframe_solid_bending.png')

# display in iPython
i = Image(filename='wireframe_solid_bending.png')
display(i)
print("the picture is visible")
/cygdrive/c/Users/sdoyle/Desktop
quick_start/bdf_demo_files%5Cbdf_demo_41_1.png
the picture is visible

test_bdf demo

In this demo, we’ll show off test_bdf

from IPython.display import HTML as html_print
from pyNastran.bdf.bdf import BDF, read_bdf, CaseControlDeck
model = BDF()

# add_grid(nid, xyz, cp=0, cd=0, ps='', seid=0)
model.add_grid(1, [0., 0., 0.])
model.add_grid(2, [1., 0., 0.])
model.add_grid(3, [1., 1., 0.])
model.add_grid(4, [0., 1., 0.])

eid = 10
pid = 100
mid = 1000
# add_cbar(eid, pid, nids, x, g0, offt='GGG', pa=0, pb=0, wa=None, wb=None)
model.add_cbar(eid,   pid, [1, 2], [0., 0., 1.], None, offt='GGG')
model.add_cbar(eid+1, pid, [2, 3], [0., 0., 1.], None, offt='GGG')
model.add_cbar(eid+2, pid, [3, 4], [0., 0., 1.], None, offt='GGG')
model.add_cbar(eid+3, pid, [4, 1], [0., 0., 1.], None, offt='GGG')

eid_cquad4 = 15
pid_pshell = 101
# add_pshell(pid, mid1=None, t=None, mid2=None, twelveIt3=1.0,
#            mid3=None, tst=0.833333,
#            nsm=0.0, z1=None, z2=None, mid4=None)
model.add_pshell(pid_pshell, mid1=mid, t=0.1, mid2=mid, mid3=mid)
model.add_cquad4(eid_cquad4, pid_pshell, [1, 2, 3, 4])

dim = [3., 3., 1., 1.] # TODO: should be [1., 2., 3., 4.]
# add_pbarl(pid, mid, Type, dim, group='MSCBML0', nsm=0.0)
pbarl = model.add_pbarl(pid, mid, 'BOX', dim, nsm=0.0)
pbarl.validate()

E = 3.e7
G = None
nu = 0.3
mat = model.add_mat1(mid, E, G, nu)

spc_id = 1
nids = 1
# add_spc1(conid, components, nodes
model.add_spc1(spc_id, 123456, nids)


dresp_id = 100
label = 'resp1'
response_type = 'STRESS'
property_type = 'PSHELL'
pid = 3
atta = 9 # von mises upper surface stress
region = None
attb = None
atti = [pid_pshell]
# add_dresp1(dresp_id, label, response_type, property_type, region, atta, attb, atti)
model.add_dresp1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

dresp_id += 1
atta = 17 # von mises lower surface stress
model.add_dresp1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

# add_dconstr(oid, dresp_id, lid=-1e+20, uid=1e+20, lowfq=0.0, highfq=1e+20)
dconstr_id = 10000
model.add_dconstr(dconstr_id, dresp_id, lid=-35000., uid=35000.)

dresp_id += 1
dresp = model.add_dresp1(dresp_id, 'WT', 'WEIGHT', None, None, None, None, None)
dresp.validate()

oid = 1000
dvids = 1
coeffs = 1.
# add_dvprel1(oid, prop_type, pid, pname_fid, dvids, coeffs,
#             p_min=None, p_max=1e+20, c0=0.0)
model.add_dvprel1(oid, 'PSHELL', pid_pshell, 'T', dvids, coeffs)

# add_desvar(desvar_id, label, xinit, xlb=-1e+20, xub=1e+20,
#            delx=None, ddval=None)
model.add_desvar(1, 'DIM1', 0.1, xlb=1e-5)
model.add_desvar(2, 'DIM2', 0.2, xlb=1e-5)
model.add_desvar(3, 'DIM3', 0.3, xlb=1e-5)
model.add_desvar(4, 'DIM4', 0.4, xlb=1e-5)
model.add_desvar(5, 'DV5', 0.1, xlb=1e-5)

#model.add_dlink(6)

eid = 10 # TODO: remove
load_id = 1
# add_pload4(sid, eids, pressures, g1=None, g34=None,
#            cid=0, nvector=None, surf_or_line='SURF', line_load_dir='NORM')
pload4 = model.add_pload4(load_id, [eid_cquad4], [1., None, None, None],
                          comment=' load')
#print(pload4.get_stats())

eid = 10 # TODO: should be 100
scale = 'LE' # TODO: should be 100.
# add_pload1(sid, eid, load_type, scale, x1, p1, x2=None, p2=None)
model.add_pload1(load_id, eid, 'FZ', scale, 0., 1.)  # TODO: change atti to None

# add_eigrl(sid, v1=None, v2=None, nd=None, msglvl=0, maxset=None, shfscl=None,
#           norm=None, options=None, values=None)
eigrl = model.add_eigrl(42, nd=42)

model.sol = 200  # start with 103
cc = CaseControlDeck([
    'DESOBJ = 102',  # DRESP1
    'DESSUB = %s' % dconstr_id,  # DCONSTR
    'SUBCASE 1',
    '  METHOD = 42',  # TODO: remove
    '  LOAD = %s' % load_id,  # TODO: remove
    '  SPC = %s' % spc_id,
    '  TRIM = 42',  # TODO: add
    'ANALYSIS = SAERO',
])
#print(cc)
model.case_control_deck = cc
model.validate()


model.write_bdf('junk.bdf')
#!cat junk.bdf
print('----------------------------------------------------------------------------------------------------')
DEBUG: write_mesh.py:245 ---starting BDF.write_bdf of junk.bdf---
----------------------------------------------------------------------------------------------------
from pyNastran.bdf.test.test_bdf import run_bdf as test_bdf
model.write_bdf('junk.bdf')
test_bdf('.', 'junk.bdf')
DEBUG: write_mesh.py:245 ---starting BDF.write_bdf of junk.bdf---
debug = False
bdf_model = junk.bdf
INFO: test_bdf.py:347 starting fem1 INFO: test_bdf.py:797 starting fem2 WARNING: test_bdf.py:819 PARAM,POST,0 is not supported by the OP2 reader ERROR: test_bdf.py:1106 An AEROS card is required for STATIC AERO - SOL 144; AEROS=None ERROR: test_bdf.py:1110 An CAEROx card is required for STATIC AERO - SOL 144 ERROR: test_bdf.py:1114 An SPLINEx card is required for STATIC AERO - SOL 144
---------------------------------------------------------------------------

RuntimeError                              Traceback (most recent call last)

<ipython-input-3-746e54da5a3e> in <module>
      1 from pyNastran.bdf.test.test_bdf import run_bdf as test_bdf
      2 model.write_bdf('junk.bdf')
----> 3 test_bdf('.', 'junk.bdf')


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in run_bdf(folder, bdf_filename, debug, xref, check, punch, mesh_form, is_folder, print_stats, encoding, sum_load, size, is_double, hdf5, stop, nastran, post, dynamic_vars, quiet, dumplines, dictsort, run_extract_bodies, save_file_structure, nerrors, dev, crash_cards, safe_xref, pickle_obj, stop_on_failure, log)
    317         pickle_obj=pickle_obj,
    318         stop_on_failure=stop_on_failure,
--> 319         log=log,
    320     )
    321     return fem1, fem2, diff_cards


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in run_and_compare_fems(bdf_model, out_model, debug, xref, check, punch, mesh_form, print_stats, encoding, sum_load, size, is_double, save_file_structure, stop, nastran, post, hdf5, dynamic_vars, quiet, dumplines, dictsort, nerrors, dev, crash_cards, safe_xref, run_extract_bodies, pickle_obj, stop_on_failure, log)
    384                         encoding=encoding, debug=debug, quiet=quiet,
    385                         ierror=ierror, nerrors=nerrors,
--> 386                         stop_on_failure=stop_on_failure, log=log)
    387
    388         diff_cards = compare(fem1, fem2, xref=xref, check=check,


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in run_fem2(bdf_model, out_model, xref, punch, sum_load, size, is_double, mesh_form, safe_xref, encoding, debug, quiet, stop_on_failure, ierror, nerrors, log)
    834                 fem2, p0, sol_base, subcase_keys, subcases, sol_200_map,
    835                 ierror=ierror, nerrors=nerrors,
--> 836                 stop_on_failure=stop_on_failure)
    837
    838     if mesh_form is not None:


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in validate_case_control(fem2, p0, sol_base, subcase_keys, subcases, unused_sol_200_map, stop_on_failure, ierror, nerrors)
    872         ierror = check_case(
    873             sol_base, subcase, fem2, p0, isubcase, subcases,
--> 874             ierror=ierror, nerrors=nerrors, stop_on_failure=stop_on_failure)
    875     return ierror
    876


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in check_case(sol, subcase, fem2, p0, isubcase, subcases, ierror, nerrors, stop_on_failure)
   1079
   1080     elif sol == 200:
-> 1081         _check_case_sol_200(sol, subcase, fem2, p0, isubcase, subcases, log)
   1082     elif sol in [114, 115, 116, 118]:
   1083         # cyclic statics, modes, buckling, frequency


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in _check_case_sol_200(sol, subcase, fem2, p0, isubcase, subcases, log)
   1270     elif analysis in ['SAERO', 'DIVERG', 'DIVERGE']:
   1271         solution = 144
-> 1272         check_case(solution, subcase, fem2, p0, isubcase, subcases)
   1273     elif analysis == 'FLUTTER':
   1274         solution = 145


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in check_case(sol, subcase, fem2, p0, isubcase, subcases, ierror, nerrors, stop_on_failure)
   1092         subcase, fem2, p0, isubcase, sol,
   1093         ierror=ierror, nerrors=nerrors,
-> 1094         stop_on_failure=stop_on_failure)
   1095     return ierror
   1096


c:\nasa\m4\formats\git\pynastran\pyNastran\bdf\test\test_bdf.py in _check_case_parameters(subcase, fem2, p0, isubcase, sol, ierror, nerrors, stop_on_failure)
   1339                 'trims=%s\n'
   1340                 'subcase:\n%s' % (trim_id, str(fem2.trims), str(subcase)))
-> 1341             raise RuntimeError(msg)
   1342         trim = fem2.trims[trim_id]
   1343


RuntimeError: TRIM = 42
trims={}
subcase:
SUBCASE 1
    ANALYSIS = SAERO
    DESOBJ = 102
    DESSUB = 10000
    LOAD = 1
    METHOD = 42
    SPC = 1
    TRIM = 42

OP2

OP2 Overview

Introduction

This is meant as a tutorial on how to use the pyNastran pyNastran.op2.op2.OP2 class

This page runs through examples relating to the OP2. The OP2 is preferred as it is much faster and easier to parse. How fast? You can read a 2 GB OP2 in 4 seconds, an 8 GB file in 15 seconds, and a 60 GB file in 1-2 minutes.

Note that a static model is a SOL 101 or SOL 144. A dynamic/”transient” solution is any transient/modal/load step/frequency based solution (e.g. 103, 109, 145).

The head/tail/file_slice methods can be found at:

These examples can be found at:

Example 1: Read Write

This example will demonstate:

  • reading the OP2

  • getting some basic information

  • writing the F06

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> op2_filename = os.path.join(test_path, 'solid_bending.op2')
>>> f06_filename = os.path.join(test_path, 'solid_bending_out.f06')

instantiate the model

>>> from pyNastran.op2.op2 import OP2
>>> model = OP2()
>>> model.read_op2(op2_filename)
>>> print(model.get_op2_stats())
op2.displacements[1]
  type=RealDisplacementArray nnodes=72
  data: [t1, t2, t3, r1, r2, r3] shape=[1, 72, 6] dtype=float32
  gridTypes
  lsdvmns = [1]

op2.spc_forces[1]
  type=RealSPCForcesArray nnodes=72
  data: [t1, t2, t3, r1, r2, r3] shape=[1, 72, 6] dtype=float32
  gridTypes
  lsdvmns = [1]

op2.ctetra_stress[1]
  type=RealSolidStressArray nelements=186 nnodes=930
  nodes_per_element=5 (including centroid)
  eType, cid
  data: [1, nnodes, 10] where 10=[oxx, oyy, ozz, txy, tyz, txz, o1, o2, o3, von_mises]
  data.shape = (1, 930, 10)
  element types: CTETRA
  lsdvmns = [1]
>>> model.write_f06(f06_filename)
F06:
 RealDisplacementArray SUBCASE=1
 RealSPCForcesArray    SUBCASE=1
 RealSolidStressArray  SUBCASE=1 - CTETRA
>>> print(tail(f06_filename, 21))
0       186           0GRID CS  4 GP
0                CENTER  X   9.658666E+02  XY  -2.978357E+01   A   2.559537E+04  LX-0.02 0.20 0.98  -1.094517E+04    2.288671E+04
                         Y   7.329372E+03  YZ   5.895411E+02   B  -7.168877E+01  LY-1.00-0.03-0.01
                         Z   2.454026E+04  ZX  -5.050599E+03   C   7.311813E+03  LZ 0.03-0.98 0.20
0                     8  X   9.658666E+02  XY  -2.978357E+01   A   2.559537E+04  LX-0.02 0.20 0.98  -1.094517E+04    2.288671E+04
                         Y   7.329372E+03  YZ   5.895411E+02   B  -7.168877E+01  LY-1.00-0.03-0.01
                         Z   2.454026E+04  ZX  -5.050599E+03   C   7.311813E+03  LZ 0.03-0.98 0.20
0                    62  X   9.658666E+02  XY  -2.978357E+01   A   2.559537E+04  LX-0.02 0.20 0.98  -1.094517E+04    2.288671E+04
                         Y   7.329372E+03  YZ   5.895411E+02   B  -7.168877E+01  LY-1.00-0.03-0.01
                         Z   2.454026E+04  ZX  -5.050599E+03   C   7.311813E+03  LZ 0.03-0.98 0.20
0                     4  X   9.658666E+02  XY  -2.978357E+01   A   2.559537E+04  LX-0.02 0.20 0.98  -1.094517E+04    2.288671E+04
                         Y   7.329372E+03  YZ   5.895411E+02   B  -7.168877E+01  LY-1.00-0.03-0.01
                         Z   2.454026E+04  ZX  -5.050599E+03   C   7.311813E+03  LZ 0.03-0.98 0.20
0                    58  X   9.658666E+02  XY  -2.978357E+01   A   2.559537E+04  LX-0.02 0.20 0.98  -1.094517E+04    2.288671E+04
                         Y   7.329372E+03  YZ   5.895411E+02   B  -7.168877E+01  LY-1.00-0.03-0.01
                         Z   2.454026E+04  ZX  -5.050599E+03   C   7.311813E+03  LZ 0.03-0.98 0.20
1    MSC.NASTRAN JOB CREATED ON 28-JAN-12 AT 12:52:32                       JANUARY  28, 2012  pyNastran v0.7.1       PAGE     3

1                                        * * * END OF JOB * * *
Example 2: Displacement (static)

This example will demonstate:

  • calculating total deflection of the nodes for a static case for an OP2

  • calculate von mises stress and max shear

\[\sqrt\left(T_x^2 + T_y^2 + T_z^2\right)\]

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> op2_filename = os.path.join(test_path, 'solid_bending.op2')
>>> out_filename = os.path.join(test_path, 'solid_bending.out')

instantiate the model

>>> from pyNastran.op2.op2 import OP2
>>> model = OP2()
>>> model.read_op2(op2_filename)
>>> print(model.get_op2_stats())

we’re analyzing a static problem, so itime=0

we’re also assuming subcase 1

>>> itime = 0
>>> isubcase = 1

get the displacement object

>>> disp = model.displacements[isubcase]

displacement is an array

# data = [tx, ty, tz, rx, ry, rz]
# for some itime
# all the nodes -> :
# get [tx, ty, tz] -> :3
>>> txyz = disp.data[itime, :, :3]

calculate the total deflection of the vector

>>> from numpy.linalg import norm
>>> total_xyz = norm(txyz, axis=1)

since norm’s axis parameter can be tricky, we’ll double check the length

>>> nnodes = disp.data.shape[1]
>>> assert len(total_xyz) == nnodes

we could also have found nnodes by using the attribute.

It has an underscore because the object is also used for elements. The underscore name is the SORT1 name, but your data may be in SORT2 format.

>>> nnodes2 = disp._nnodes
>>> assert nnodes == nnodes2
>>> assert nnodes == 72

Additionally, we know we have 72 nodes from the shape:

op2.displacements[1]
  type=RealDisplacementArray nnodes=72
  data: [t1, t2, t3, r1, r2, r3] shape=[1, 72, 6] dtype=float32
  gridTypes
  lsdvmns = [1]

now we’ll loop over the nodes and print the total deflection

>>> msg = 'nid, gridtype, tx, ty, tz, txyz'
>>> print(msg)
>>> for (nid, grid_type), txyz, total_xyzi in zip(disp.node_gridtype, txyz, total_xyz):
>>>     msg = '%s, %s, %s, %s, %s, %s' % (nid, grid_type, txyz[0], txyz[1], txyz[2], total_xyzi)
>>>     print(msg)

nid, gridtype, tx, ty, tz, txyz
1, 1, 0.00764469, 4.01389e-05, 0.000111137, 0.00764561
2, 1, 0.00762899, 5.29171e-05, 0.000142154, 0.0076305
3, 1, 0.00944763, 6.38675e-05, 7.66179e-05, 0.00944816
4, 1, 0.00427092, 2.62277e-05, 7.27848e-05, 0.00427162
5, 1, 0.00152884, 1.71054e-05, -3.47525e-06, 0.00152894
...
Example 3: Eigenvector (transient)

NA

Example 4: Solid Stress (static)

This example will demonstate:

  • calculate von mises stress and max shear for solid elements for a static case for an OP2

\[\sqrt\left(T_x^2 + T_y^2 + T_z^2\right)\]

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'solid_bending')
>>> op2_filename = os.path.join(test_path, 'solid_bending.op2')
>>> out_filename = os.path.join(test_path, 'solid_bending.out')

instantiate the model

>>> from pyNastran.op2.op2 import OP2
>>> model = OP2()
>>> model.read_op2(op2_filename)
>>> print(model.get_op2_stats())

op2.ctetra_stress[1]
  type=RealSolidStressArray nelements=186 nnodes=930
  nodes_per_element=5 (including centroid)
  eType, cid
  data: [1, nnodes, 10] where 10=[oxx, oyy, ozz, txy, tyz, txz, o1, o2, o3, von_mises]
  data.shape = (1, 930, 10)
  element types: CTETRA
  lsdvmns = [1]

we’re analyzing a static problem, so itime=0

we’re also assuming subcase 1

>>> itime = 0
>>> isubcase = 1

get the stress object (there is also cpenta_stress and chexa_stress as well as ctetra_strain/cpenta_strain/chexa_strain)

>>> stress = model.ctetra_stress[isubcase]

The stress/strain data can often be von_mises/max_shear (same for fiber_distance/curvature), so check!

 #data = [oxx, oyy, ozz, txy, tyz, txz, o1, o2, o3, von_mises]
>>> o1 = stress.data[itime, :, 6]
>>> o3 = stress.data[itime, :, 8]
>>> if stress.is_von_mises():
>>>     max_shear = (o1 - o3) / 2.
>>>     von_mises = stress.data[itime, :, 9]
>>> else:
>>>     from numpy import sqrt
>>>     o2 = data[itime, :, 8]
>>>     von_mises = sqrt(0.5*((o1-o2)**2 + (o2-o3)**2, (o3-o1)**2))
>>>     max_shear = stress.data[itime, :, 9]
>>> for (eid, node), vm, ms in zip(stress.element_node, von_mises, max_shear):
>>>     print(eid, 'CEN/4' if node == 0 else node, vm, ms)

1 CEN/4 15900.2 2957.35
1 8     15900.2 2957.35
1 13    15900.2 2957.35
1 67    15900.2 2957.35
1 33    15900.2 2957.35
2 CEN/4 16272.3 6326.18
2 8     16272.3 6326.18
2 7     16272.3 6326.18
2 62    16272.3 6326.18
2 59    16272.3 6326.18

Note that because element_node is an integer array, the centroid is 0. We renamed it to CEN/4 when we wrote it

Example 4: Solid Stress (static)

This example will demonstate:

  • calculating total deflection of the nodes for a dynamic case for an OP2

\[\sqrt\left(T_x^2 + T_y^2 + T_z^2\right)\]

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'plate_py')
>>> op2_filename = os.path.join(test_path, 'plate_py.op2')

ut_filename = os.path.join(test_path, ‘solid_bending.out’)

instantiate the model

>>> from pyNastran.op2.op2 import OP2
>>> model = OP2()
>>> model.read_op2(op2_filename)
>>> print(model.get_op2_stats())

op2.eigenvectors[1]
  type=RealEigenvectorArray ntimes=10 nnodes=231
  data: [t1, t2, t3, r1, r2, r3] shape=[10, 231, 6] dtype=float32
  gridTypes
  modes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
eigrs = [-0.00037413835525512695, -0.00022113323211669922, -0.0001882314682006836, -0.00010025501251220703, 0.0001621246337890625, 0.00
07478296756744385, 1583362560.0, 2217974016.0, 10409966592.0, 11627085824.0]
mode_cycles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> isubcase = 1
>>> eigenvector = model.eigenvectors[isubcase]

“time/mode/frequency are stored by id, so to get mode 5:

>>> modes = eigenvector._times  # it may not be "time" so we don't use the name "time"
>>> from numpy import where
>>> imode5 = where(modes == 5)[0]
>>> txyz = eigenvector.data[imode5, :, :3]

calculate the total deflection of the vector

>>> from numpy.linalg import norm
>>> total_xyz = norm(txyz, axis=1)

get the eigenvalue

>>> print('eigr5 = %s' % eigenvector.eigrs[imode5])
eigr5 = 0.000162124633789
Example 5: Isotropic Plate Stress (static)

This example will demonstate:

  • print the fiber distance and the max principal stress for a static case for an OP2

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'sol_101_elements')
>>> op2_filename = os.path.join(test_path, 'static_solid_shell_bar.op2')

instantiate the model

>>> from pyNastran.op2.op2 import OP2
>>> model = OP2()
>>> model.read_op2(op2_filename)
>>> print(model.get_op2_stats())

op2.cquad4_stress[1]
  type=RealPlateStressArray nelements=2 nnodes_per_element=5 nlayers=2 ntotal=20
  data: [1, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  data.shape=(1L, 20L, 8L)
  element types: CQUAD4
  lsdvmns = [1]
>>> isubcase = 1
>>> itime = 0 # this is a static case
>>> stress = model.cquad4_stress[isubcase]
>>> assert stress.nnodes == 5, 'this is a bilinear quad'

write the data

#[fiber_dist, oxx, oyy, txy, angle, majorP, minorP, ovm]
>>> eids = stress.element_node[:, 0]
>>> nids = stress.element_node[:, 1]
>>> if stress.is_fiber_distance():
>>>     fiber_dist = stress.data[itime, :, 0]
>>> else:
>>>     raise RuntimeError('found fiber curvature; expected fiber distance')
>>> maxp = stress.data[itime, :, 5]
>>> for (eid, nid, fdi, maxpi) in zip(eids, nids, fiber_dist, maxp):
>>>     print(eid, 'CEN/4' if nid == 0 else nid, fdi, maxpi)

6 CEN/4 -0.125 8022.26
6 CEN/4  0.125 12015.9
6 4     -0.125 7580.84
6 4      0.125 11872.9
6 1     -0.125 8463.42
6 1      0.125 12158.9
6 14    -0.125 8463.69
6 14     0.125 12158.9
6 15    -0.125 7581.17
6 15     0.125 11872.9
7 CEN/4 -0.125 10016.3
7 CEN/4  0.125 10019.5
7 3     -0.125 10307.1
7 3      0.125 10311.0
7 2     -0.125 9725.54
7 2      0.125 9727.9
7 17    -0.125 9725.54
7 17     0.125 9728.06
7 16    -0.125 10307.1
7 16     0.125 10311.1

note we have 2 layers (upper and lower surface) for any PSHELL-based elements

Example 6: Composite Plate Stress (static)

This example will demonstate:

  • print the fiber distance and the max principal stress for a static case for an OP2

our model

>>> import pyNastran
>>> pkg_path = pyNastran.__path__[0]
>>> test_path = os.path.join(pkg_path, '..', 'models', 'sol_101_elements')
>>> op2_filename = os.path.join(test_path, 'static_solid_shell_bar.op2')

instantiate the model

>>> from pyNastran.op2.op2 import OP2
>>> model = OP2()
>>> model.read_op2(op2_filename)
>>> print(model.get_op2_stats())
op2.ctria3_composite_stress[1]
  type=RealCompositePlateStressArray nelements=4 ntotal=18
  data: [1, ntotal, 9] where 9=[o11, o22, t12, t1z, t2z, angle, major, minor, max_shear]
  data.shape = (1, 18, 9)
  element types: CTRIA3
  lsdvmns = [1]
>>> isubcase = 1
>>> itime = 0 # this is a static case
>>> stress = model.ctria3_composite_stress[isubcase]

In the previous example, we had an option for a variable number of nodes for the CQUAD4s (1/5), but only nnodes=1 for the CTRIA3s.

In this example, we have 4 layers on one element and 5 on another, but they’re all at the centroid.

#[o11, o22, t12, t1z, t2z, angle, major, minor, ovm]
   >>> eids = stress.element_layer[:, 0]
   >>> layers = stress.element_layer[:, 1]
   >>> maxp = stress.data[itime, :, 6]
   >>> if stress.is_fiber_distance():
   >>>     fiber_dist = stress.data[itime, :, 0]
   >>> else:
   >>>     raise RuntimeError('found fiber curvature; expected fiber distance')
   >>> maxp = stress.data[itime, :, 5]
   >>> for (eid, layer, maxpi) in zip(eids, layers, maxp):
   >>>     print(eid, 'CEN/4', layer, maxpi)

   7  CEN/4 1  89.3406
   7  CEN/4 2  89.3745
   7  CEN/4 3  89.4313
   7  CEN/4 4  89.5115
   8  CEN/4 1 -85.6691
   8  CEN/4 2 -85.6121
   8  CEN/4 3 -85.5193
   8  CEN/4 4 -85.3937
   8  CEN/4 5 -85.2394
   9  CEN/4 1  86.3663
   9  CEN/4 2  86.6389
   9  CEN/4 3  87.0977
   9  CEN/4 4  87.7489
   10 CEN/4 1 -87.6962
   10 CEN/4 2 -87.4949
   10 CEN/4 3 -87.1543
   10 CEN/4 4 -86.6662
   10 CEN/4 5 -86.0192

OP2 Introduction

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op2_demo.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_demo.ipynb

Why use the OP2? Why not use the F06/PCH file?

Most people are comfortable with the F06. However, it’s: - Ironically, a lot harder to parse. The OP2 is very structured. - Much, much, much slower. We can read entire blocks of arrays with a single call. The data is already typed. - Much, much more memory inefficient because we aren’t appending strings onto lists and turning that into a numpy array.

F06 parsers get ridiculously hard when you start do complicated results, like: - single subcase buckling - superelements - SOL 200 optimization with sub-optimization - SPOINTs

The pyNastran OP2 Reader is fast, highly validated, and it supports most result types. The data in the OP2 is also more accurate because there is no rounding.

Validating an OP2

The test_op2 script is created when you run python setup.py develop or python setup.py install on pyNastran. Assuming it’s on your path (it’ll be in Python27:raw-latex:`Scripts `or something similar), you can run:

>>> test_op2 -f solid_bending.op2

The -f tells us to print out solid_bending.test_op2.f06, which can be compared to your F06 for a small file to build confidence in the reader. It’s also useful when you want an F06 of your model without rerunning Nastran just to see what’s in it.

If you have a large model, you can make test_op2 run much, much faster. The -c flag disables double-reading of the OP2. By default, test_op2 uses two different read methods (the old method and new method) to ensure that results are read in properly. When running the code, this is turned off, but is turned on for test_op2.

>>> test_op2 -fc solid_bending.op2
Import the packages
import os
import copy
import numpy as np
np.set_printoptions(precision=2, threshold=20, suppress=True)

import pyNastran
pkg_path = pyNastran.__path__[0]

from pyNastran.utils import print_bad_path
from pyNastran.op2.op2 import read_op2
from pyNastran.utils import object_methods, object_attributes

import pandas as pd
Sets default precision of real numbers for pandas output
pd.set_option('precision', 3)
np.set_printoptions(precision=3, threshold=20)

As with the BDF, we can use the long form and the short form. However, the long form for the OP2 doesn’t really add anything. So, let’s just use the short form.

In addition to the default numpy support, there is also ``pandas`` dataframe support.

#op2_filename = r'D:\work\pynastran_0.8.0\models\iSat\ISat_Launch_Sm_Rgd.op2'
#op2_filename = r'D:\work\pynastran_0.8.0\models\iSat\ISat_Launch_Sm_4pt.op2'
op2_filename = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'iSat', 'ISat_Launch_Sm_4pt.op2'))
assert os.path.exists(op2_filename), print_bad_path(op2_filename)

# define the input file with a file path
op2 = read_op2(op2_filename, build_dataframe=True, debug=False)
INFO: op2_scalar.py:1469 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran_1.2\\models\\iSat\\ISat_Launch_Sm_4pt.op2'
c:nasam4formatsgitpynastran_1.2pyNastranop2op2.py:752: FutureWarning:
Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method
Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/.
Pandas provides a .to_xarray() method to help automate this conversion.

  obj.build_dataframe()
OP2 Introspection

The get_op2_stats() function lets you quickly understand what in an op2.

print(op2.get_op2_stats())
eigenvectors[1]
  isubcase = 1
  type=RealEigenvectorArray ntimes=167 nnodes=5379, table_name=OUGV1
  data: [t1, t2, t3, r1, r2, r3] shape=[167, 5379, 6] dtype=float32
  node_gridtype.shape = (5379, 2)
  sort1
  modes = [  1   2   3 ... 165 166 167]
  eigns = [   2757.896    3568.136    9686.188 ... 6162773.5   6169898.5
 6229583.   ]
  mode_cycles = [  8.358   9.507  15.664 ... 395.101 395.329 397.237]

cbar_force[1]
  type=RealCBarForceArray ntimes=167 nelements=827; table_name='OEF1X'
  data: [ntimes, nnodes, 8] where 8=[bending_moment_a1, bending_moment_a2, bending_moment_b1, bending_moment_b2, shear1, shear2, axial, torque]
  data.shape = (167, 827, 8)
  element.shape = (827,)
  element name: CBAR-34
  sort1
  modes = [  1   2   3 ... 165 166 167]
  eigns = [   2757.896    3568.136    9686.188 ... 6162773.5   6169898.5
 6229583.   ]
  cycles = [  8.358   9.507  15.664 ... 395.101 395.329 397.237]

ctria3_stress[1]
  type=RealPlateStressArray ntimes=167 nelements=32 nnodes_per_element=1 nlayers=2 ntotal=64
  data: [ntimes, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  element_node.shape = (64, 2)
  data.shape=(167, 64, 8)
  element type: CTRIA3
  s_code: 1
  sort1
  modes = [  1   2   3 ... 165 166 167]
  eigns = [   2757.896    3568.136    9686.188 ... 6162773.5   6169898.5
 6229583.   ]
  mode2s = [0 0 0 ... 0 0 0]
  cycles = [  8.358   9.507  15.664 ... 395.101 395.329 397.237]

cquad4_stress[1]
  type=RealPlateStressArray ntimes=167 nelements=4580 nnodes_per_element=1 nlayers=2 ntotal=9160
  data: [ntimes, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  element_node.shape = (9160, 2)
  data.shape=(167, 9160, 8)
  element type: CQUAD4
  s_code: 1
  sort1
  modes = [  1   2   3 ... 165 166 167]
  eigns = [   2757.896    3568.136    9686.188 ... 6162773.5   6169898.5
 6229583.   ]
  mode2s = [0 0 0 ... 0 0 0]
  cycles = [  8.358   9.507  15.664 ... 395.101 395.329 397.237]
If that’s too long…
print(op2.get_op2_stats(short=True))
eigenvectors[1]
cbar_force[1]
ctria3_stress[1]
cquad4_stress[1]
Acccessing the Eigenvectors object

Eigenvectors are the simplest object. They use the same class as for displacements, velocity, acceleration, SPC Forces, MPC Forces, Applied Loads, etc. These are all node-based tables with TX, TY, TZ, RX, RY, RZ. Results are in the analysis coordinate frame (CD), which is defined by the GRID card.

Numpy-based Approach

We’ll first show off the standard numpy based results on a transient case. Static results are the same, except that you’ll always use the 0th index for the “time” index.

The tutorial is intetionally just accessing the objects in a very clear, though inefficient way. The OP2 objects can take full advantage of the numpy operations.

# what modes did we analyze:  1 to 167
print("loadcases = %s" % op2.eigenvectors.keys())

# get subcase 1
eig1 = op2.eigenvectors[1]

modes = eig1.modes
times = eig1._times #  the generic version of modes
print("modes = %s\n" % modes)
print("times = %s\n" % times)

imode2 = 1 # corresponds to mode 2
mode2 = eig1.data[imode2, :, :]

print('first 10 nodes and grid types\nNid Gridtype\n%s' % eig1.node_gridtype[:10, :])
node_ids = eig1.node_gridtype[:, 0]

index_node10 = np.where(node_ids == 10)[0]  # we add the [0] because it's 1d
mode2_node10 = mode2[index_node10]
print("translation mode2_node10 = %s" % eig1.data[imode2, index_node10, :3].ravel())
print("rotations mode2_node10 = %s" % eig1.data[imode2, index_node10, 3:].ravel())
loadcases = dict_keys([1])
modes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167]

times = [  1.   2.   3. ... 165. 166. 167.]

first 10 nodes and grid types
Nid Gridtype
[[ 1  1]
 [ 2  1]
 [ 3  1]
 [ 4  1]
 [ 5  1]
 [ 6  1]
 [ 7  1]
 [ 8  1]
 [ 9  1]
 [10  1]]
translation mode2_node10 = [0.    0.008 0.002]
rotations mode2_node10 = [-0.  0. -0.]
Pandas-based Approach

If you like pandas, you can access all the OP2 objects, which is very useful within the Jupyter Notebook. Different objects will look differently, but you can change the layout.

If you’re trying to learn pandas, there are many tutorials online, such as: http://pandas.pydata.org/pandas-docs/stable/10min.html

or a very long, but good video:

from IPython.display import YouTubeVideo
YouTubeVideo('5JnMutdy6Fw')
#https://www.youtube.com/watch?v=5JnMutdy6Fw
# get subcase 1
eig1 = op2.eigenvectors[1]

eig1.data_frame
Mode 1 2 3 4 5 6 7 8 9 10 ... 158 159 160 161 162 163 164 165 166 167
Freq 8.358 9.507 15.664 20.229 20.306 20.548 21.500 21.701 21.716 28.444 ... 382.715 385.301 387.260 390.518 390.990 391.050 393.165 395.101 395.329 397.237
Eigenvalue 2.758e+03 3.568e+03 9.686e+03 1.615e+04 1.628e+04 1.667e+04 1.825e+04 1.859e+04 1.862e+04 3.194e+04 ... 5.782e+06 5.861e+06 5.921e+06 6.021e+06 6.035e+06 6.037e+06 6.103e+06 6.163e+06 6.170e+06 6.230e+06
Radians 52.516 59.734 98.418 127.102 127.585 129.107 135.087 136.351 136.445 178.721 ... 2404.670 2420.919 2433.229 2453.695 2456.660 2457.037 2470.328 2482.493 2483.928 2495.913
NodeID Item
1 t1 -5.548e-03 4.671e-06 -1.816e-04 -5.670e-02 -1.721e-04 -4.175e-02 -8.632e-05 -1.341e-03 1.582e-03 2.438e-01 ... 5.723e-02 -5.369e-02 -3.837e-02 1.326e-01 -1.973e-02 -0.028 0.033 -0.104 6.919e-02 1.904e-02
t2 2.133e-04 5.699e-03 2.393e-02 5.803e-04 1.812e-04 1.971e-04 6.526e-05 -3.562e-02 -3.164e-02 1.291e-02 ... -3.091e-01 -3.746e-01 -5.840e-02 2.385e-02 -5.889e-02 -0.015 0.177 -0.011 -5.252e-02 -1.187e-01
t3 -8.469e-04 1.512e-03 7.038e-03 -8.160e-03 1.385e-03 -6.210e-03 -1.004e-04 -9.286e-03 -7.856e-03 3.756e-02 ... -4.534e-02 1.271e-01 2.550e-01 1.792e-01 -1.136e-03 -0.042 -0.037 0.263 -2.141e-01 1.472e-01
r1 -8.399e-06 -2.241e-04 -1.035e-03 -4.509e-05 -6.317e-05 -9.635e-06 -2.518e-06 1.322e-03 1.172e-03 -5.433e-04 ... -3.061e-02 -9.825e-04 2.993e-02 3.527e-02 1.148e-04 -0.007 -0.053 -0.004 -2.357e-02 3.403e-02
r2 -2.507e-04 1.228e-06 -8.730e-06 -2.571e-03 -6.174e-06 -1.767e-03 -3.812e-06 -5.683e-05 5.614e-05 1.008e-02 ... -1.174e-02 1.241e-03 1.025e-02 3.112e-02 -4.135e-03 -0.011 0.026 0.009 -7.311e-03 9.082e-04
r3 -5.261e-05 -1.187e-06 -1.986e-04 -1.310e-04 2.861e-05 -4.677e-05 1.092e-07 -1.774e-04 1.806e-04 -1.008e-03 ... 4.063e-05 2.184e-02 2.495e-03 -8.831e-02 1.660e-02 0.030 -0.100 0.022 -2.547e-02 5.581e-03
2 t1 -5.548e-03 4.671e-06 -1.816e-04 -5.670e-02 -1.721e-04 -4.175e-02 -8.632e-05 -1.341e-03 1.582e-03 2.438e-01 ... 5.723e-02 -5.369e-02 -3.837e-02 1.326e-01 -1.973e-02 -0.028 0.033 -0.104 6.919e-02 1.904e-02
t2 1.081e-04 5.696e-03 2.353e-02 3.182e-04 2.384e-04 1.036e-04 6.548e-05 -3.598e-02 -3.128e-02 1.090e-02 ... -3.090e-01 -3.309e-01 -5.341e-02 -1.528e-01 -2.568e-02 0.045 -0.022 0.034 -1.035e-01 -1.075e-01
t3 -3.455e-04 1.510e-03 7.056e-03 -3.018e-03 1.398e-03 -2.676e-03 -9.274e-05 -9.172e-03 -7.968e-03 1.739e-02 ... -2.187e-02 1.246e-01 2.345e-01 1.170e-01 7.135e-03 -0.020 -0.090 0.244 -1.995e-01 1.454e-01
r1 -8.399e-06 -2.241e-04 -1.035e-03 -4.509e-05 -6.317e-05 -9.635e-06 -2.518e-06 1.322e-03 1.172e-03 -5.433e-04 ... -3.061e-02 -9.825e-04 2.993e-02 3.527e-02 1.148e-04 -0.007 -0.053 -0.004 -2.357e-02 3.403e-02
r2 -2.507e-04 1.228e-06 -8.730e-06 -2.571e-03 -6.174e-06 -1.767e-03 -3.812e-06 -5.683e-05 5.614e-05 1.008e-02 ... -1.174e-02 1.241e-03 1.025e-02 3.112e-02 -4.135e-03 -0.011 0.026 0.009 -7.311e-03 9.082e-04
r3 -5.261e-05 -1.187e-06 -1.986e-04 -1.310e-04 2.861e-05 -4.677e-05 1.092e-07 -1.774e-04 1.806e-04 -1.008e-03 ... 4.063e-05 2.184e-02 2.495e-03 -8.831e-02 1.660e-02 0.030 -0.100 0.022 -2.547e-02 5.581e-03
3 t1 -6.169e-03 7.911e-06 -2.157e-04 -6.310e-02 -1.896e-04 -4.617e-02 -9.580e-05 -1.466e-03 1.704e-03 2.690e-01 ... 2.695e-02 -6.243e-02 -6.576e-03 2.369e-01 -3.571e-02 -0.065 0.135 -0.079 5.365e-02 2.056e-02
t2 2.295e-04 6.255e-03 2.639e-02 6.021e-04 2.805e-04 1.856e-04 7.132e-05 -3.892e-02 -3.453e-02 1.452e-02 ... -1.994e-01 -3.102e-01 -1.168e-01 -1.054e-01 -4.058e-02 0.023 0.200 0.023 -1.385e-02 -1.724e-01
t3 -8.457e-04 1.512e-03 7.034e-03 -8.137e-03 1.386e-03 -6.198e-03 -1.003e-04 -9.286e-03 -7.856e-03 3.749e-02 ... -4.493e-02 1.259e-01 2.542e-01 1.777e-01 -1.024e-03 -0.042 -0.038 0.262 -2.140e-01 1.467e-01
r1 -8.883e-06 -2.240e-04 -1.036e-03 -5.241e-05 -6.649e-05 -6.665e-06 -2.507e-06 1.321e-03 1.174e-03 -5.719e-04 ... -3.039e-02 2.256e-04 2.894e-02 3.716e-02 -4.793e-04 -0.008 -0.047 -0.006 -2.042e-02 3.308e-02
r2 -2.507e-04 1.229e-06 -8.736e-06 -2.571e-03 -6.175e-06 -1.767e-03 -3.812e-06 -5.683e-05 5.614e-05 1.008e-02 ... -1.174e-02 1.238e-03 1.025e-02 3.111e-02 -4.135e-03 -0.011 0.026 0.009 -7.308e-03 9.064e-04
r3 -4.657e-05 2.289e-06 -8.570e-06 -2.151e-05 -8.187e-06 1.310e-05 1.439e-07 -1.571e-04 1.600e-04 -1.241e-03 ... 6.409e-03 -2.870e-02 6.276e-03 3.529e-02 -1.277e-02 -0.016 0.091 -0.024 3.187e-02 -1.809e-03
4 t1 -6.169e-03 7.956e-06 -2.155e-04 -6.310e-02 -1.906e-04 -4.617e-02 -9.580e-05 -1.466e-03 1.704e-03 2.690e-01 ... 2.726e-02 -6.325e-02 -6.636e-03 2.366e-01 -3.568e-02 -0.065 0.135 -0.079 5.359e-02 2.070e-02
t2 1.295e-04 6.253e-03 2.619e-02 4.726e-04 3.533e-04 1.577e-04 7.179e-05 -3.925e-02 -3.419e-02 1.183e-02 ... -1.877e-01 -3.177e-01 -1.326e-01 -1.642e-01 -3.435e-02 0.035 0.187 0.006 -6.914e-04 -1.884e-01
t3 -3.469e-04 1.510e-03 7.059e-03 -3.040e-03 1.396e-03 -2.688e-03 -9.276e-05 -9.173e-03 -7.968e-03 1.746e-02 ... -2.215e-02 1.256e-01 2.349e-01 1.179e-01 7.068e-03 -0.020 -0.089 0.243 -1.992e-01 1.457e-01
r1 -7.731e-06 -2.241e-04 -1.037e-03 -3.841e-05 -6.177e-05 -1.181e-05 -2.531e-06 1.322e-03 1.169e-03 -5.122e-04 ... -3.086e-02 -3.467e-03 3.029e-02 3.335e-02 6.161e-04 -0.007 -0.058 -0.003 -2.650e-02 3.497e-02
r2 -2.507e-04 1.229e-06 -8.734e-06 -2.571e-03 -6.171e-06 -1.767e-03 -3.812e-06 -5.682e-05 5.614e-05 1.008e-02 ... -1.174e-02 1.238e-03 1.026e-02 3.112e-02 -4.135e-03 -0.011 0.026 0.010 -7.314e-03 9.083e-04
r3 -4.712e-05 2.923e-07 5.696e-05 -2.570e-05 -3.632e-06 1.221e-05 1.684e-07 -1.412e-04 1.769e-04 -1.299e-03 ... 1.457e-02 -1.664e-02 4.624e-03 3.608e-02 -1.077e-02 -0.016 0.083 -0.026 3.404e-02 -3.449e-04
5 t1 -6.801e-03 1.081e-05 -2.253e-04 -6.955e-02 -2.029e-04 -5.058e-02 -1.054e-04 -1.626e-03 1.863e-03 2.943e-01 ... -1.462e-03 -4.749e-02 1.290e-02 2.882e-01 -4.040e-02 -0.084 0.165 -0.056 3.263e-02 2.358e-02
t2 2.553e-04 6.819e-03 2.910e-02 8.057e-04 4.970e-04 2.453e-04 7.785e-05 -4.223e-02 -3.750e-02 1.563e-02 ... -1.560e-01 -3.697e-01 -2.080e-01 -1.525e-01 -5.946e-02 0.022 0.442 0.012 6.531e-02 -2.889e-01
t3 -8.469e-04 1.512e-03 7.038e-03 -8.160e-03 1.385e-03 -6.210e-03 -1.004e-04 -9.286e-03 -7.856e-03 3.756e-02 ... -4.534e-02 1.271e-01 2.550e-01 1.792e-01 -1.136e-03 -0.042 -0.037 0.263 -2.141e-01 1.472e-01
r1 -8.399e-06 -2.241e-04 -1.035e-03 -4.509e-05 -6.317e-05 -9.635e-06 -2.518e-06 1.322e-03 1.172e-03 -5.433e-04 ... -3.061e-02 -9.825e-04 2.993e-02 3.527e-02 1.148e-04 -0.007 -0.053 -0.004 -2.357e-02 3.403e-02
r2 -2.507e-04 1.228e-06 -8.730e-06 -2.571e-03 -6.174e-06 -1.767e-03 -3.812e-06 -5.683e-05 5.614e-05 1.008e-02 ... -1.174e-02 1.241e-03 1.025e-02 3.112e-02 -4.135e-03 -0.011 0.026 0.009 -7.311e-03 9.082e-04
r3 -5.261e-05 -1.187e-06 -1.986e-04 -1.310e-04 2.861e-05 -4.677e-05 1.092e-07 -1.774e-04 1.806e-04 -1.008e-03 ... 4.063e-05 2.184e-02 2.495e-03 -8.831e-02 1.660e-02 0.030 -0.100 0.022 -2.547e-02 5.581e-03
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5629 t1 7.413e-05 -8.245e-05 -3.908e-04 3.482e-03 -3.748e-05 2.988e-04 2.694e-06 2.440e-05 1.075e-03 -2.721e-03 ... 4.755e-04 5.261e-03 -4.662e-02 -5.886e-02 -6.227e-03 0.017 0.162 -0.557 -6.614e-01 1.042e-01
t2 4.452e-05 -2.089e-04 -5.166e-03 2.748e-04 1.754e-04 4.173e-04 3.617e-06 -1.361e-04 1.100e-04 -9.064e-04 ... 2.047e-01 6.117e-02 -5.444e-02 1.529e-02 -1.469e-02 -0.023 0.183 0.290 3.938e-01 -3.587e-01
t3 1.283e-04 1.048e-03 8.983e-03 5.709e-04 1.808e-04 1.258e-03 -5.577e-06 -5.649e-03 -5.097e-03 -7.903e-03 ... -1.857e-01 -2.785e-02 6.353e-02 -5.410e-02 2.473e-02 0.030 -0.234 0.069 -6.092e-02 3.214e-01
r1 3.005e-07 5.476e-05 6.343e-04 6.334e-06 -2.493e-06 2.715e-06 -5.464e-07 -2.376e-04 -2.019e-04 6.017e-05 ... -4.279e-04 -3.524e-03 9.711e-04 6.896e-03 9.867e-04 -0.001 -0.014 -0.008 -2.789e-02 2.645e-02
r2 -1.195e-05 -1.468e-05 -9.874e-05 2.889e-07 -7.292e-06 -1.234e-04 -1.826e-07 7.492e-05 1.152e-04 9.511e-04 ... 2.369e-02 1.095e-03 -8.118e-03 1.289e-02 -1.785e-03 -0.005 0.015 -0.021 -3.344e-02 -3.849e-03
r3 2.865e-06 1.522e-05 6.913e-05 -4.280e-06 4.744e-06 2.949e-05 -1.857e-07 -1.044e-04 -6.757e-05 1.044e-04 ... 2.703e-02 1.362e-03 -5.113e-03 1.492e-02 -6.335e-04 -0.005 0.001 0.027 1.418e-02 -1.118e-02
5630 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
r1 1.815e-05 -9.454e-05 -3.224e-04 -3.568e-05 -1.340e-05 -3.384e-05 -1.329e-06 7.127e-04 4.621e-04 6.393e-04 ... -3.555e-02 -8.501e-03 1.420e-02 1.374e-02 1.390e-04 -0.004 -0.017 0.004 2.479e-04 2.458e-03
r2 1.174e-04 8.335e-07 -1.801e-05 1.328e-03 -2.449e-05 7.252e-04 3.178e-07 -1.708e-05 -1.350e-05 -3.866e-03 ... 6.104e-03 -6.432e-03 1.082e-02 3.451e-02 -4.203e-03 -0.011 0.018 -0.003 -7.885e-03 -2.321e-02
r3 -1.512e-05 3.817e-05 2.898e-04 -7.733e-06 1.063e-06 -1.915e-06 6.212e-07 -2.275e-04 -1.247e-04 -5.015e-04 ... 1.508e-02 -1.308e-03 3.008e-03 9.727e-03 3.836e-04 -0.001 -0.003 -0.030 3.103e-02 2.712e-02
5631 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
r1 9.862e-07 5.862e-05 5.580e-04 1.046e-05 -6.905e-05 5.601e-06 1.679e-06 -2.394e-04 -2.043e-04 3.883e-05 ... 1.138e-03 -1.261e-02 1.119e-02 1.439e-02 1.245e-03 -0.004 -0.024 -0.012 -4.048e-03 -1.465e-02
r2 -8.388e-06 -1.919e-06 -7.634e-06 -2.048e-04 1.955e-07 -2.855e-04 -5.311e-07 6.254e-05 -5.671e-05 2.168e-03 ... -2.994e-02 -4.564e-03 1.167e-02 1.208e-02 -2.319e-03 -0.004 0.012 -0.005 5.452e-03 5.399e-03
r3 4.235e-05 3.105e-06 1.133e-06 3.700e-04 -3.676e-07 2.318e-04 3.299e-07 -1.454e-05 -9.195e-06 -8.160e-04 ... 7.604e-03 -3.327e-03 1.359e-02 -8.851e-04 -7.085e-04 -0.002 0.011 -0.018 1.781e-02 1.326e-02
5632 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
r1 -1.756e-05 -9.628e-05 -3.117e-04 4.014e-05 -1.268e-05 3.502e-05 -1.054e-06 5.821e-04 6.400e-04 -9.421e-04 ... 3.064e-02 -2.242e-03 5.440e-04 1.809e-02 1.961e-04 -0.005 -0.016 0.004 -1.559e-04 4.253e-03
r2 1.170e-04 -2.698e-07 2.597e-05 1.325e-03 3.278e-05 7.228e-04 2.756e-06 1.174e-05 1.113e-05 -3.858e-03 ... 1.025e-02 4.245e-03 2.363e-03 2.781e-02 -4.249e-03 -0.009 0.026 0.024 -1.089e-02 1.333e-02
r3 -1.548e-05 -4.294e-05 -2.770e-04 -1.258e-05 3.928e-06 -5.063e-06 -3.048e-07 1.836e-04 2.254e-04 -5.880e-04 ... 2.334e-02 -1.135e-03 5.283e-03 1.865e-03 -3.915e-03 -0.002 0.024 -0.032 2.892e-02 1.447e-02
5633 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000 0.000 0.000 0.000e+00 0.000e+00
r1 3.006e-07 5.476e-05 6.343e-04 6.336e-06 -2.493e-06 2.716e-06 -5.464e-07 -2.376e-04 -2.019e-04 6.017e-05 ... -4.280e-04 -3.524e-03 9.711e-04 6.896e-03 9.867e-04 -0.001 -0.014 -0.008 -2.789e-02 2.645e-02
r2 1.723e-06 1.278e-06 -1.805e-06 1.940e-04 -3.377e-07 -8.446e-06 -3.548e-08 -4.728e-05 4.650e-05 2.129e-04 ... 2.084e-02 1.171e-03 -6.235e-03 1.349e-02 -1.096e-03 -0.005 0.006 0.005 -4.639e-03 -6.872e-03
r3 -7.271e-06 3.394e-06 -2.717e-06 -1.478e-04 -4.097e-07 -5.573e-05 -2.948e-07 -1.383e-05 -1.663e-05 6.515e-04 ... 2.914e-02 1.305e-03 -6.509e-03 1.448e-02 -1.144e-03 -0.005 0.008 0.008 -7.160e-03 -8.942e-03

32274 rows × 167 columns

Accessing the plate stress/strain

Results are stored on a per element type basis.

The OP2 is the same as an F06, so CQUAD4 elements have centroidal-based results or centroidal-based as well as the results at the 4 corner nodes.

Be careful about what you’re accessing.

# element forces/stresses/strains are by element type consistent with the F06, so...
plate_stress = op2.cquad4_stress[1]
print("plate_stress_obj = %s" % type(plate_stress))

# the set of variables in the RealPlateStressArray
print("plate_stress = %s\n" % plate_stress.__dict__.keys())

# list of parameters that define the object (e.g. what is the nonlinear variable name
print("data_code_keys = %s\n" % plate_stress.data_code.keys())

# nonlinear variable name
name = plate_stress.data_code['name']
print("name = %r" % plate_stress.data_code['name'])

print("list-type variables = %s" % plate_stress.data_code['data_names'])

# the special loop parameter
# for modal analysis, it's "modes"
# for transient, it's "times"
# or be lazy and use "_times"
print("modes = %s" % plate_stress.modes) # name + 's'


# extra list-type parameter for modal analysis; see data_names
#print("mode_cycles =", plate_stress.mode_cycles)
plate_stress_obj = <class 'pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateStressArray'>
plate_stress = dict_keys(['element_type', 'element_name', 'nonlinear_factor', '_times', 'result_name', 'approach_code', 'analysis_code', 'data', 'isubcase', 'ogs', 'pval_step', 'name', 'superelement_adaptivity_index', '_count', 'is_built', 'format_code', 'sort_code', 'table_code', 'title', 'subtitle', 'label', 'num_wide', 'device_code', 'table_name', 'data_frame', 'dt', 'ntimes', 'ntotal', '_ntotals', 'load_as_h5', 'h5_file', 'data_code', 'ielement', 'nelements', 'nnodes', '_encoding', '_times_dtype', 'cycle', 'data_names', 'eign', 'is_msc', 'is_strain_flag', 'is_stress_flag', 'load_set', 'mode', 'mode2', 's_code', 'sort_bits', 'sort_method', 'stress_bits', 'subtitle_original', 'tCode', 'thermal', 'thermal_bits', 'modes', 'eigns', 'mode2s', 'cycles', 'itotal', 'itime', 'element_node', 'words'])

data_code_keys = dict_keys(['_encoding', 'load_as_h5', 'is_msc', 'table_name', 'approach_code', 'isubcase', 'table_code', 'tCode', 'sort_code', 'sort_method', 'device_code', 'analysis_code', 'sort_bits', 'element_type', 'load_set', 'format_code', 'num_wide', 's_code', 'thermal', 'nonlinear_factor', 'name', 'mode', 'eign', 'mode2', 'cycle', 'data_names', '_times_dtype', 'thermal_bits', 'element_name', 'subtitle', 'subtitle_original', 'pval_step', 'superelement_adaptivity_index', 'label', 'title', 'stress_bits', 'is_stress_flag', 'is_strain_flag', 'result_name', '_count'])

name = 'mode'
list-type variables = ['mode', 'eign', 'mode2', 'cycle']
modes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167]
Similar to the BDF, we can use object_attributes/methods
#print "attributes =", object_attributes(plate_stress)
print("methods = %s\n" % object_methods(plate_stress))
print('methods2= %s\n' % plate_stress.object_methods())
print("headers = %s\n" % plate_stress.get_headers())
methods = ['add_new_eid_sort1', 'add_new_node_sort1', 'add_sort1', 'apply_data_code', 'approach_code_str', 'build', 'build_dataframe', 'cast_grid_type', 'code_information', 'eid_to_element_node_index', 'export_to_hdf5', 'finalize', 'get_data_code', 'get_element_index', 'get_element_type', 'get_headers', 'get_nnodes_bilinear', 'get_stats', 'get_unsteady_value', 'is_bilinear', 'is_magnitude_phase', 'is_sort1_new', 'is_thermal', 'object_attributes', 'object_methods', 'print_data_members', 'print_table_code', 'recast_gridtype_as_string', 'set_as_sort1', 'set_table_type', 'update_data_code', 'update_dt', 'update_t_code', 'write_f06', 'write_op2']

methods2= ['add_new_eid_sort1', 'add_new_node_sort1', 'add_sort1', 'apply_data_code', 'approach_code_str', 'build', 'build_dataframe', 'cast_grid_type', 'code_information', 'eid_to_element_node_index', 'export_to_hdf5', 'finalize', 'get_data_code', 'get_element_index', 'get_element_type', 'get_headers', 'get_nnodes_bilinear', 'get_stats', 'get_unsteady_value', 'is_bilinear', 'is_magnitude_phase', 'is_sort1_new', 'is_thermal', 'print_data_members', 'print_table_code', 'recast_gridtype_as_string', 'set_as_sort1', 'set_table_type', 'update_data_code', 'update_dt', 'update_t_code', 'write_f06', 'write_op2']

headers = ['fiber_distance', 'oxx', 'oyy', 'txy', 'angle', 'omax', 'omin', 'von_mises']
Number of Nodes on a CQUAD4
  • For CENT, there is 1 centroidal stress at two locations

  • For BILIN, there are 5 stresses at two locations (4 nodes + centroidal)

  • node_id=0 indicates a centroidal quantity

  • CTRIA3s are always centroidal

What sets this?
STRESS(real, sort1, BILIN) = ALL   # centroid + 4 corner nodes
STRESS(real, sort1, CENT) = ALL    # centroid

STRAIN(real, sort1, BILIN) = ALL   # centroid + 4 corner nodes
STRAIN(real, sort1, CENT) = ALL    # centroid
How do we know if we’re bilinear?
print("is_bilinear = %s\n" % plate_stress.is_bilinear())
What locations are chosen?

That depends on fiber distance/fiber curvature… - fiber_curvature - mean stress (\(\sigma_{alt}\)) & slope (\(\sigma_{mean}\))

$$ \sigma_{top} = \sigma_{alt} + \frac{t}{2} \sigma_{mean}$$

$$ \sigma_{btm} = \sigma_{alt} + \frac{t}{2} \sigma_{mean}$$
  • fiber_distance - upper and lower surface stress (o_top; o_btm)

  • If you have stress, fiber_distance is always returned regardless of your option.

What sets this?
STRAIN(real, sort1, FIBER) = ALL   # fiber distance/default
STRAIN(real, sort1, STRCUR) = ALL  # strain curvature
How do we know if we’re using fiber_distance?
print("is_fiber_distance = %s" % plate_stress.is_fiber_distance())
Accessing results
# element forces/stresses/strains are by element type consistent
# with the F06, so...

def abs_max_min(vals):
    absvals = list(abs(vals))
    maxval = max(absvals)
    i = absvals.index(maxval)
    return vals[i]

#-----------------------------
# again, we have linear quads, so two locations per element
print("element_node[:10, :] =\n%s..." % plate_stress.element_node[:10, :])

# lets get the stress for the first 3 CQUAD4 elements
eids = plate_stress.element_node[:, 0]
ueids = np.unique(eids)
print('ueids = %s' % ueids[:3])

# get the first index of the first 5 elements
ieids = np.searchsorted(eids, ueids[:3])
print('ieids = %s' % ieids)

# the easy way to slice data for linear plates
ieids5 = np.vstack([ieids, ieids + 1]).ravel()
ieids5.sort()

print('verify5:\n%s' % ieids5)

#-----------------------------
itime = 0 # static analysis / mode 1
if plate_stress.is_von_mises:  # True
    ovm = plate_stress.data[itime, :, 7]
    print('we have von mises data; ovm=%s\n' % ovm)
else:
    omax_shear = plate_stress.data[itime, :, 7]
    print('we have max shear data; omax_shear=%s\n' % omax_shear)


print("[layer1, layer2, ...] = %s" % ovm[ieids5])

ieid1000 = np.where(eids == 1000)[0]
print('ieid1000 = %s' % ieid1000)
ovm_mode6_eid1000 = ovm[ieid1000]
print("ovm_mode6_eid1000 = %s -> %s" % (ovm_mode6_eid1000, abs_max_min(ovm_mode6_eid1000)))
element_node[:10, :] =
[[1 0]
 [1 0]
 [2 0]
 [2 0]
 [3 0]
 [3 0]
 [4 0]
 [4 0]
 [5 0]
 [5 0]]...
ueids = [1 2 3]
ieids = [0 2 4]
verify5:
[0 1 2 3 4 5]
we have von mises data; ovm=[54.222  5.041 13.143 ...  2.34   6.146  7.368]

[layer1, layer2, ...] = [54.222  5.041 13.143 21.222 78.545 17.91 ]
ieid1000 = [1998 1999]
ovm_mode6_eid1000 = [90.618 94.091] -> 94.09056
# see the difference between "transient"/"modal"/"frequency"-style results
# and "nodal"/"elemental"-style results
# just change imode

imode = 5  # mode 6; could just as easily be dt
iele = 10  # element 10
ilayer = 1

ieid10 = np.where(eids == iele)[0][ilayer]
print('ieid10 = %s' % ieid10)
print(plate_stress.element_node[ieid10, :])


# headers = [u'fiber_distance', u'oxx', u'oyy', u'txy', u'angle', u'omax', u'omin', u'von_mises']
print("ps.modes = %s" % plate_stress.modes[imode])
print("ps.cycles = %s" % plate_stress.cycles[imode])
print("oxx = %s" % plate_stress.data[imode, ieid10, 1])
print("oyy = %s" % plate_stress.data[imode, ieid10, 2])
print("txy = %s" % plate_stress.data[imode, ieid10, 3])
print("omax = %s" % plate_stress.data[imode, ieid10, 5])
print("omin = %s" % plate_stress.data[imode, ieid10, 6])
print("ovm/max_shear = %s" % plate_stress.data[imode, ieid10, 7])

if plate_stress.is_fiber_distance:
    print("fiber_distance = %s" % plate_stress.data[imode, ieid10, 0])
else:
    print("curvature = %s" % plate_stress.data[imode, ieid10, 0])
ieid10 = 19
[10  0]
ps.modes = 6
ps.cycles = 20.548073657198046
oxx = -18.872536
oyy = -20.16303
txy = -8.309847
omax = -11.182922
omin = -27.852644
ovm/max_shear = 24.276606
fiber_distance = -0.4
from pyNastran.bdf.bdf import read_bdf
bdf_filename = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'iSat', 'ISat_Launch_Sm_4pt.dat'))
model = read_bdf(bdf_filename, debug=False)
mass, cg, I = model.mass_properties()
WARNING: shell.py:2360 PSHELL pid=1 midsurface: z1=0.400000006 z2=-0.400000006 t=0.035999998 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=2 midsurface: z1=0.400000006 z2=-0.400000006 t=0.054000005 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=3 midsurface: z1=0.400000006 z2=-0.400000006 t=0.017999999 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=7 midsurface: z1=0.418000013 z2=-0.418000013 t=0.035999998 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=34 midsurface: z1=0.194000006 z2=-0.194000006 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=38 midsurface: z1=0.284000009 z2=-0.284000009 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=46 midsurface: z1=0.199000001 z2=-0.199000001 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=37 midsurface: z1=0.308999985 z2=-0.308999985 t=0.0186 not in range of -1.5t < zi < 1.5t
Let’s print out the actual mass properties from the OP2 and get the same result as the F06

We need PARAM,POSTEXT,YES in out BDF to get the Grid Point Weight Table

gpw = op2.grid_point_weight
#print(gpw.object_attributes())

print(gpw)
gpw.object_methods()
#gpw.write_f06?
print(gpw.get_stats())
We can also write the full F06
import getpass
name = getpass.getuser()
os.chdir(os.path.join(r'C:\Users', name, 'Desktop'))

# write the F06 with Real/Imaginary or Magnitude/Phase
# only matters for complex results
op2.write_f06('isat.f06', is_mag_phase=False)

!head -n 40 isat.f06
1    ISAT_SM_LAUNCH_4PT MODES TO 400 HZ                                    FEBRUARY  14, 2018  pyNastran v1.2.0       PAGE     1

0                                                                                                            SUBCASE 1
                                         R E A L   E I G E N V E C T O R   N O .          1

      POINT ID.   TYPE          T1             T2             T3             R1             R2             R3
             1      G     -5.547863E-03   2.133077E-04  -8.469186E-04  -8.399206E-06  -2.506956E-04  -5.261146E-05
             2      G     -5.547863E-03   1.080848E-04  -3.455275E-04  -8.399206E-06  -2.506956E-04  -5.261146E-05
             3      G     -6.169366E-03   2.295251E-04  -8.457433E-04  -8.882780E-06  -2.506924E-04  -4.657186E-05
             4      G     -6.169462E-03   1.295465E-04  -3.468718E-04  -7.731095E-06  -2.506902E-04  -4.712092E-05
             5      G     -6.801341E-03   2.553037E-04  -8.469186E-04  -8.399206E-06  -2.506956E-04  -5.261146E-05
             6      G     -6.801341E-03   1.500808E-04  -3.455275E-04  -8.399206E-06  -2.506956E-04  -5.261146E-05
             7      G     -7.420456E-03   2.779656E-04  -8.458295E-04  -9.019739E-06  -2.506924E-04  -6.147318E-05
             8      G     -7.420568E-03   1.595261E-04  -3.468334E-04  -7.642398E-06  -2.506902E-04  -6.249677E-05
             9      G     -8.054819E-03   2.972998E-04  -8.469186E-04  -8.399206E-06  -2.506956E-04  -5.261146E-05
            10      G     -8.054819E-03   1.920769E-04  -3.455275E-04  -8.399206E-06  -2.506956E-04  -5.261146E-05
            11      G     -5.547945E-03  -2.034865E-04   7.615836E-04   9.685779E-06  -2.505747E-04  -5.059179E-05
            12      G     -6.170889E-03  -2.232806E-04   7.602651E-04   1.005450E-05  -2.505695E-04  -4.706052E-05
            13      G     -6.800818E-03  -2.519154E-04   7.615836E-04   9.685779E-06  -2.505747E-04  -5.059179E-05
            14      G     -7.421867E-03  -2.748493E-04   7.598438E-04   1.041645E-05  -2.505710E-04  -6.034294E-05
            15      G     -8.053692E-03  -3.003443E-04   7.615836E-04   9.685779E-06  -2.505747E-04  -5.059179E-05
            16      G     -5.547945E-03  -1.023029E-04   2.604342E-04   9.685779E-06  -2.505747E-04  -5.059179E-05
            17      G     -6.170872E-03  -1.254381E-04   2.618640E-04   9.119666E-06  -2.505694E-04  -4.744373E-05
            18      G     -6.800818E-03  -1.507318E-04   2.604342E-04   9.685779E-06  -2.505747E-04  -5.059179E-05
            19      G     -7.421871E-03  -1.645201E-04   2.621645E-04   8.841090E-06  -2.505694E-04  -6.108151E-05
            20      G     -8.053692E-03  -1.991607E-04   2.604342E-04   9.685779E-06  -2.505747E-04  -5.059179E-05
            21      G     -2.821161E-03  -1.092790E-04   7.579715E-04   7.133808E-06  -2.468418E-04  -3.410970E-05
            22      G     -3.443996E-03  -1.233896E-04   7.561403E-04   7.799596E-06  -2.468382E-04  -3.001459E-05
            23      G     -4.055370E-03  -1.449481E-04   7.579715E-04   7.133808E-06  -2.468418E-04  -3.410970E-05
            24      G     -4.670648E-03  -1.632725E-04   7.558515E-04   7.958040E-06  -2.468395E-04  -4.140726E-05
            25      G     -5.289579E-03  -1.806171E-04   7.579715E-04   7.133808E-06  -2.468418E-04  -3.410970E-05
            26      G     -2.821161E-03  -4.105964E-05   2.642879E-04   7.133808E-06  -2.468418E-04  -3.410970E-05
            27      G     -3.443890E-03  -6.412427E-05   2.660819E-04   6.400805E-06  -2.468367E-04  -2.950787E-05
            28      G     -4.055370E-03  -7.672868E-05   2.642879E-04   7.133808E-06  -2.468418E-04  -3.410970E-05
            29      G     -4.670699E-03  -9.216915E-05   2.663240E-04   6.263966E-06  -2.468367E-04  -4.123877E-05
            30      G     -5.289579E-03  -1.123977E-04   2.642879E-04   7.133808E-06  -2.468418E-04  -3.410970E-05
            31      G     -1.459303E-04   2.173024E-05   2.685585E-04   7.402167E-06  -2.425398E-04  -1.785639E-05
            32      G     -1.459303E-04  -1.398253E-05   7.536381E-04   7.402167E-06  -2.425398E-04  -1.785639E-05
            33      G     -7.555047E-04  -8.368386E-06   2.703055E-04   6.154360E-06  -2.425350E-04  -8.907110E-06
            34      G     -7.555627E-04  -2.869231E-05   7.518338E-04   8.680357E-06  -2.425363E-04  -9.971128E-06
#from IPython.display import display, Math, Latex

The mass results are different as pyNastran’s mass assumes point masses

\[m_{plates} = A (\rho t + nsm)\]
\[m_{solid} = V \rho\]
\[m_{bars} = L (\rho A + nsm)\]
\[I = m r^2\]

The larger your model is and the further from the origin, the more accurate the result. For some applications (e.g. a weight breakdown), this is probably be fine.

print('cg =\n%s' % gpw.cg)
print('cg = %s' % cg)
cg =
None
cg = [ -0.034  -2.531 -18.468]
It’s not like Nastran is perfect either.
Limitations
  1. You cannot do weight statements in Nastran by component/property/material.

  2. Everything is always summmed up (e.g. you can have different geometry in Subcase 2 and MPCs connecting physical geomtry, with other parts flying off into space).

These are things that pyNastran can do.

from pyNastran.bdf.bdf import read_bdf
bdf_filename = os.path.abspath(os.path.join(pkg_path, '..', 'models', 'iSat', 'ISat_Launch_Sm_4pt.dat'))
model = read_bdf(bdf_filename, debug=False)
WARNING: shell.py:2360 PSHELL pid=1 midsurface: z1=0.400000006 z2=-0.400000006 t=0.035999998 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=2 midsurface: z1=0.400000006 z2=-0.400000006 t=0.054000005 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=3 midsurface: z1=0.400000006 z2=-0.400000006 t=0.017999999 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=7 midsurface: z1=0.418000013 z2=-0.418000013 t=0.035999998 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=34 midsurface: z1=0.194000006 z2=-0.194000006 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=38 midsurface: z1=0.284000009 z2=-0.284000009 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=46 midsurface: z1=0.199000001 z2=-0.199000001 t=0.0186 not in range of -1.5t < zi < 1.5t WARNING: shell.py:2360 PSHELL pid=37 midsurface: z1=0.308999985 z2=-0.308999985 t=0.0186 not in range of -1.5t < zi < 1.5t
Weight Statement

Let’s get the breakdown by property ID

#help(model.mass_properties)

pid_to_eids_map = model.get_element_ids_dict_with_pids()
#print(pid_to_eids_map.keys())
print('pid, mass, cg, [ixx, iyy, izz, ixy, ixz, iyz]')
for pid, eids in sorted(pid_to_eids_map.items()):
    mass, cg, inertia = model.mass_properties(element_ids=eids, mass_ids=[], reference_point=[0., 0., 0.])
    print('%-6s %-.6f %-38s %s' % (pid, mass, cg, inertia))

mass_ids = list(model.masses.keys())
mass, cg, inertia = model.mass_properties(element_ids=[], mass_ids=mass_ids, reference_point=[0., 0., 0.])
print('%-6s %-.6f %-38s %s' % ('mass', mass, cg, inertia))
pid, mass, cg, [ixx, iyy, izz, ixy, ixz, iyz]
1      0.027278 [  0.   0. -20.]                       [3.699 6.553 4.384 0.    0.    0.   ]
2      0.047993 [ -0.   0. -20.]                       [18.033 18.033 12.454 -0.    -0.     0.   ]
3      0.020998 [  0.  -0. -20.]                       [5.881 3.907 5.27  0.    0.    0.   ]
4      0.012216 [  0.043   0.438 -19.702]              [2.346 3.23  2.019 0.01  0.005 0.052]
5      0.330158 [  0.    2.2 -20. ]                    [63.317 28.366 41.752  0.     0.     0.   ]
7      0.027813 [  0.  -0. -20.]                       [ 8.141  8.141  9.438 -0.    -0.    -0.   ]
8      0.081584 [  0.   0. -20.]                       [15.087 15.087 30.174 -0.     0.     0.   ]
9      0.077642 [  0.   0. -20.]                       [17.017 17.017 18.911 -0.    -0.     0.   ]
10     0.000236 [  0.  -0. -20.]                       [ 0.035  0.035  0.057 -0.    -0.    -0.   ]
11     0.041700 [ -1.025  23.773 -12.016]              [ 0.666  0.988  0.348 -0.037  0.263 -0.056]
12     0.000457 [ 0.    -5.92  20.506]                 [0.013 0.013 0.    0.    0.    0.001]
13     0.003885 [ 0.    -6.949  9.892]                 [ 0.002  0.     0.002  0.     0.    -0.   ]
14     0.000353 [-0.     0.    14.391]                 [ 0.003  0.012  0.009  0.    -0.     0.   ]
15     0.003626 [0.    0.    7.867]                    [ 0.     0.092  0.091  0.    -0.     0.   ]
16     0.000000 [0. 0. 0.]                             [0. 0. 0. 0. 0. 0.]
19     0.017749 [ -0.23    6.021 -35.642]              [ 1.77   4.395  5.817 -0.053  0.005 -0.145]
20     0.163082 [  0.      0.    -18.545]              [ 9.01 34.77 25.76  0.    0.    0.  ]
21     0.003625 [ -0.  -0. -20.]                       [ 0.728  0.728  1.41  -0.    -0.    -0.   ]
22     0.000000 [0. 0. 0.]                             [0. 0. 0. 0. 0. 0.]
23     0.000000 [0. 0. 0.]                             [0. 0. 0. 0. 0. 0.]
33     0.001346 [-0.    -2.175  0.369]                 [ 0.077  0.085  0.162  0.    -0.    -0.001]
34     0.003561 [-0.    -0.    14.833]                 [ 0.271  0.271  0.067 -0.    -0.    -0.   ]
35     0.000000 [0. 0. 0.]                             [0. 0. 0. 0. 0. 0.]
36     0.007197 [  0.      0.    -14.783]              [ 0.835  3.605  3.02   0.     0.    -0.   ]
37     0.094566 [ -0.      0.    -19.499]              [ 8.975 52.72  46.49   0.    -0.     0.   ]
38     0.007602 [ 0.    -9.329 27.311]                 [0.681 1.214 0.562 0.    0.    0.07 ]
39     0.002433 [ 0.    -8.954  4.04 ]                 [ 0.022  0.045  0.024  0.    -0.    -0.003]
41     0.000735 [-0.    -0.     2.193]                 [ 0.009  0.057  0.062  0.     0.    -0.   ]
42     0.008854 [ -1.554  20.121 -19.007]              [ 1.166  1.459  0.293 -0.001  0.056  0.   ]
43     0.012241 [  0.      0.    -19.499]              [2.228 7.588 6.32  0.    0.    0.   ]
46     0.003671 [ 0.    0.   15.28]                    [ 0.178  0.348  0.335  0.    -0.     0.   ]
60     0.000000 [0. 0. 0.]                             [0. 0. 0. 0. 0. 0.]
61     0.000000 [0. 0. 0.]                             [0. 0. 0. 0. 0. 0.]
mass   0.772000 [  0.     -8.256 -18.238]              [392.813 338.699 118.704  -0.     -0.    138.698]

OP2: Numpy Demo #1 (Displacement, Solid Stress)

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op2_demo_numpy2.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_demo_numpy2.ipynb

It’s recommended that you first go through: - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_intro.ipynb

The previous demo was intentionally clunky to demonstrate how one might think of a single element.

If you code like that, your code will be slow, so let’s show you how to really use the numpy-style with the OP2.

Import the packages
import os
import copy
import numpy as np
np.set_printoptions(precision=2, threshold=20, suppress=True, linewidth=100)

import pyNastran
pkg_path = pyNastran.__path__[0]
model_path = os.path.join(pkg_path, '..', 'models')

from pyNastran.utils import print_bad_path
from pyNastran.op2.op2 import read_op2
from pyNastran.utils import object_methods, object_attributes
np.set_printoptions(precision=3, threshold=20, edgeitems=10)
Load the model
op2_filename = os.path.join(model_path, 'solid_bending', 'solid_bending.op2')
model = read_op2(op2_filename, build_dataframe=False, debug=False)
INFO: op2_scalar.py:1469 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran_1.2\\pyNastran\\..\\models\\solid_bending\\solid_bending.op2'
Find the min/max Displacement magnitude

In this example, we access the 3D “data” numpy array object. Then we take the L2-norm of the translations to determine the magnitude. We broadcast the L2-norm across the column (x, y, z) to end up with nnodes results. It’s good practice to verify the shapes of your arrays just to make sure you get the axis=1 parameter correct.

subcase_id = 1
disp = model.displacements[subcase_id]
disp_headers = disp.get_headers()
print('disp_headers = %s' % disp_headers)
nnodes = disp.node_gridtype.shape[0]

txyz = disp.data[0, :, :3]
txyz_mag = np.linalg.norm(txyz, axis=1)
assert len(txyz_mag) == nnodes
txyz_mag_max = txyz_mag.max()
txyz_mag_min = txyz_mag.min()

inid_max = np.where(txyz_mag == txyz_mag_max)[0]
inid_min = np.where(txyz_mag == txyz_mag_min)[0]
all_nodes = disp.node_gridtype[:, 0]
max_nodes = all_nodes[inid_max]
min_nodes = all_nodes[inid_min]
print('max displacement=%s max_nodes=%s' % (txyz_mag_max, max_nodes))
print('min displacement=%s max_nodes=%s' % (txyz_mag_min, min_nodes))
disp_headers = ['t1', 't2', 't3', 'r1', 'r2', 'r3']
max displacement=0.012376265 max_nodes=[23]
min displacement=0.0 max_nodes=[31 35 39 43 47 48 53 63 64 69 70 71 72]
Find the max centroidal stress on the CTETRA elements
subcase_id = 1
stress = model.ctetra_stress[subcase_id]
stress_headers = stress.get_headers()
print('stress_headers = %s' % stress_headers)

element_node = stress.element_node
elements = element_node[:, 0]
nodes = element_node[:, 1]
#print(element_node)
stress_headers = ['oxx', 'oyy', 'ozz', 'txy', 'tyz', 'txz', 'omax', 'omid', 'omin', 'von_mises']
The 0 location is the centroid

You can either query the 0 location or calculate it with a numpy arange. CTETRA elements have 4 nodes (even 10 noded CTETRA elements) in the OP2.

izero = np.where(nodes == 0)[0]
izero2 = np.arange(0, len(nodes), step=5, dtype='int32')
#print(izero)
#print(izero2)
eids_centroid = elements[izero2]
print('eids_centroid = %s' % eids_centroid)

ivm = stress_headers.index('von_mises')
vm_stress = stress.data[0, izero2, ivm]
print(vm_stress)

vm_stress_max = vm_stress.max()
vm_stress_min = vm_stress.min()
icentroid_max = np.where(vm_stress == vm_stress_max)[0]
icentroid_min = np.where(vm_stress == vm_stress_min)[0]
eids_max = eids_centroid[icentroid_max]
eids_min = eids_centroid[icentroid_min]

print('max_stress=%s eids=%s' % (vm_stress_max, eids_max))
print('min_stress=%s eids=%s' % (vm_stress_min, eids_min))
eids_centroid = [  1   2   3   4   5   6   7   8   9  10 ... 177 178 179 180 181 182 183 184 185 186]
[15900.173 16272.253 12798.722 10728.189 26309.43  30346.639 45438.992 51427.406 40912.426
 41191.414 ...  7342.325 10163.439 28830.463 46618.023  6998.956  7861.917  8589.076  6053.971
 44450.695 22886.705]
max_stress=52446.37 eids=[142]
min_stress=3288.5732 eids=[165]
Finding the VM stress associated with a single node ID

One node in a tet mesh may be shared by many elements. In this case, 26 elements share 1 node!

subcase_id = 1
stress = model.ctetra_stress[subcase_id]
stress_headers = stress.get_headers()
print('stress_headers = %s' % stress_headers)

element_node = stress.element_node
elements = element_node[:, 0]
nelements = len(elements) // 5
nodes = element_node[:, 1]#.reshape(nelements, 5)

#------------------------------
ivm = -1
print('nodes =', nodes)
ifour = np.where(nodes == 4)[0]
eids_four = elements[ifour].tolist()
print('eids4 =', eids_four)
print('ifour =', ifour)
vm_stress = stress.data[0, ifour, ivm]
print('vm_stress =', vm_stress, len(vm_stress))
stress_headers = ['oxx', 'oyy', 'ozz', 'txy', 'tyz', 'txz', 'omax', 'omid', 'omin', 'von_mises']
nodes = [ 0  8 13 67 33  0  8  7 62 59 ...  0 54 39 64 71  0  8 62  4 58]
eids4 = [15, 17, 35, 36, 37, 38, 39, 40, 52, 69, 75, 80, 81, 83, 84, 93, 94, 109, 110, 112, 119, 140, 147, 158, 174, 186]
ifour = [ 72  82 171 176 181 186 191 196 256 341 ... 468 542 546 557 594 698 733 786 866 928]
vm_stress = [14743.482 15626.162  8966.338 30538.127 30699.877 22275.338 10997.474 14971.115  8662.346
  7466.423 ... 21431.023 10285.905 14731.244  9881.857 15744.815  9625.97  11964.446 12875.621
  8207.951 22886.705] 26
Finding the centroidal VM stress for a set of elements

Some fancy numpy code will be used for this case. Your code will be much faster if you are familiar with numpy.

subcase_id = 1
stress = model.ctetra_stress[subcase_id]
stress_headers = stress.get_headers()
print('stress_headers = %s' % stress_headers)

element_node = stress.element_node
elements = element_node[:, 0]
nodes = element_node[:, 1]

# the slow way to get the unique elements
izero = np.where(nodes == 0)[0]
ueids_slow = elements[izero]

# the fast way
ueids = np.unique(elements)
assert np.array_equal(ueids, ueids_slow)

eids_to_lookup = [5, 7, 10]
ilookup = np.searchsorted(ueids, eids_to_lookup)

ivm = stress_headers.index('von_mises')
vm_stress = stress.data[0, ilookup, ivm]

print('eids_to_lookup =', eids_to_lookup)
print('vm_stress =', vm_stress)
stress_headers = ['oxx', 'oyy', 'ozz', 'txy', 'tyz', 'txz', 'omax', 'omid', 'omin', 'von_mises']
eids_to_lookup = [5, 7, 10]
vm_stress = [15900.173 16272.253 16272.253]
Finding the centroidal VM stress for a set of elements when you have multiple element types

In this case, we’ll assume the set of element_ids to lookup contain CHEXAs as well as CTETRAs. Thus, we need to filter the data.

subcase_id = 1
stress = model.ctetra_stress[subcase_id]
stress_headers = stress.get_headers()
print('stress_headers = %s' % stress_headers)

element_node = stress.element_node
elements = element_node[:, 0]
nodes = element_node[:, 1]

ueids = np.unique(elements)
print('ueids', ueids)
eids_to_lookup = [5, 7, 10, 186, 1000000]
ilookup = np.searchsorted(ueids, eids_to_lookup)

ivm = stress_headers.index('von_mises')
vm_stress = stress.data[0, ilookup, ivm]

print('eids_to_lookup =', eids_to_lookup)
print('vm_stress =', vm_stress)
stress_headers = ['oxx', 'oyy', 'ozz', 'txy', 'tyz', 'txz', 'omax', 'omid', 'omin', 'von_mises']
ueids [  1   2   3   4   5   6   7   8   9  10 ... 177 178 179 180 181 182 183 184 185 186]
eids_to_lookup = [5, 7, 10, 186, 1000000]
vm_stress = [15900.173 16272.253 16272.253 22275.338 22275.338]
We have a problem where our element_id (1000000) is out of range

Searchsorted is fast, but you need to make sure your data actually exists. Otherwise, you’ll end up finding the data for the next element in the sorted list.

Let’s filter the data using sets and then use searchsorted.

eids_to_lookup = [5, 7, 10, 186, 1000000]
filtered_eids = np.intersect1d(elements, eids_to_lookup)
ilookup = np.searchsorted(ueids, filtered_eids)
vm_stress = stress.data[0, ilookup, ivm]

print('filtered_eids =', filtered_eids)
print('vm_stress =', vm_stress)
filtered_eids = [  5   7  10 186]
vm_stress = [15900.173 16272.253 16272.253 22275.338]
Other Elements that are Similar
  • Rod Stress/strain

  • Beam Stress/strain

  • Bar Stress/strain

  • Isotropic CQUAD4 stress/strain

OP2: Numpy Demo #2 (Composite Plate Stress)

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op2_demo_numpy1.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_demo_numpy1.ipynb

It’s recommended that you first go through: - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_intro.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_demo.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_demo_numpy1.ipynb

In this tutorial, composite plate stresses will be covered.

Load the model

If the BWB example OP2 doesn’t exist, we’ll run Nastran to create it.

import os
import copy
import numpy as np
np.set_printoptions(precision=2, threshold=20, linewidth=100, suppress=True)

import pyNastran
from pyNastran.op2.op2 import read_op2
from pyNastran.utils.nastran_utils import run_nastran
pkg_path = pyNastran.__path__[0]
model_path = os.path.join(pkg_path, '..', 'models')

bdf_filename = os.path.join(model_path, 'bwb', 'bwb_saero.bdf')
op2_filename = os.path.join(model_path, 'bwb', 'bwb_saero.op2')
if not os.path.exists(op2_filename):
    keywords = ['scr=yes', 'bat=no', 'old=no']
    run_nastran(bdf_filename, nastran_cmd='nastran', keywords=keywords, run=True)
    import shutil
    op2_filename2 = os.path.join('bwb_saero.op2')
    shutil.move(op2_filename2, op2_filename)

assert os.path.exists(op2_filename), print_bad_path(op2_filename)
model = read_op2(op2_filename, build_dataframe=False, debug=False)

print(model.get_op2_stats(short=True))
INFO: op2_scalar.py:1469 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran_1.2\\pyNastran\\..\\models\\bwb\\bwb_saero.op2'
displacements[1]
spc_forces[1]
grid_point_forces[1]
cbar_stress[1]
cbar_strain[1]
cquad4_composite_stress[1]
ctria3_composite_stress[1]
cquad4_composite_strain[1]
ctria3_composite_strain[1]
Accessing the Composite Stress
isubcase = 1
stress = model.cquad4_composite_stress[isubcase]
print(stress)
headers = stress.get_headers()
imax = headers.index('major')
type=RealCompositePlateStressArray nelements=9236 ntotal=92360
data: [1, ntotal, 9] where 9=[o11, o22, t12, t1z, t2z, angle, major, minor, max_shear]
element_layer.shape = (92360, 2)
data.shape = (1, 92360, 9)
element type: QUAD4LC-composite
sort1
lsdvmns = [1]
Composite Stress/Strain data is tricky to access as there is not a good way to index the data

Let’s cheat a bit using the element ids and layers to make a pivot table. - table is (ntimes, nelements, nlayers, ndata) - max_principal_stress_table is (nelements, nlayers)

from pyNastran.femutils.utils import pivot_table

eids = stress.element_layer[:, 0]
layers = stress.element_layer[:, 1]

## now pivot the stress
table, rows_new = pivot_table(stress.data, eids, layers)

# now access the max principal stress for the static result
# table is (itime, nelements, nlayers, data)
itime = 0
max_principal_stress_table = table[itime,:,:,imax]
ueids = np.unique(eids)
print('max_principal_stress_table:\n%s' % max_principal_stress_table)
max_principal_stress_table:
[[ 239.3   163.91   98.41 ...  -35.77  -34.6   -19.86]
 [  18.61   78.52   25.52 ...  -63.92  -62.48  -12.99]
 [   2.99  105.48   49.37 ... -137.74 -127.07  -41.14]
 ...
 [ 157.    170.3   112.79 ...   44.56   47.13   38.9 ]
 [ 123.96  143.01   97.41 ...   40.99   44.06   42.47]
 [  90.04  109.97   79.86 ...   33.18   36.12   24.04]]
More realistic pivot table

All the elements have 10 layers. Let’s remove the last 5 layers.

By having empty layers, the pivot table now has nan data in it.

# drop out 5 layers
eids2 = stress.element_layer[:-5, 0]
layers2 = stress.element_layer[:-5, 1]
data2 = stress.data[:, :-5, :]

# now pivot the stress
table, rows_new = pivot_table(data2, eids2, layers2)

# access the table data
# table is (itime, nelements, nlayers, data)
itime = 0
max_principal_stress_table2 = table[itime,:,:,imax]
print('max_principal_stress_table2:\n%s' % max_principal_stress_table2)
max_principal_stress_table2:
[[ 239.3   163.91   98.41 ...  -35.77  -34.6   -19.86]
 [  18.61   78.52   25.52 ...  -63.92  -62.48  -12.99]
 [   2.99  105.48   49.37 ... -137.74 -127.07  -41.14]
 ...
 [ 157.    170.3   112.79 ...   44.56   47.13   38.9 ]
 [ 123.96  143.01   97.41 ...   40.99   44.06   42.47]
 [  90.04  109.97   79.86 ...     nan     nan     nan]]

test_op2

test_op2 verifies that the OP2 is read properly. It’s mainly a developer debugging script as it runs the OP2 twice (with different routines to make sure the answers are the same), but test_op2 is very useful for understanding what is inside an OP2.

In general, it’s recommended that in general you call test_op2 like:

>>> test_op2 -c fem.op2

If you want an F06 file:

>>> test_op2 -cf fem.op2

You can skip results to minimize memory usage. Skipping stress and rod_strain:

>>> test_op2 -cf fem.op2 -x stress -x rod_strain

You may also skip specific subcases (read subcases 1, 5):

>>> test_op2 -cf fem.op2 -s 1_5

Finally, you can extract the geometry and write a BDF.

>>> test_op2 -c -gn fem.op2

or

>>> test_op2 -c --geometry --write_bdf fem.op2
Example

Here, we’ll determine what all the tables in the OP2 are as well as a summary of the objects

>>> test_op2 -c ISat_Dploy_Sm.op2

OP2_FILENAME = 'isat_dploy_sm.op2'
DEBUG:     fname=op2_scalar.py             lineNo=521    set_subcases - subcases = []
DEBUG:     fname=op2_scalar.py             lineNo=521    set_subcases - subcases = []
DEBUG:     fname=op2.py                    lineNo=385    combine=True
DEBUG:     fname=op2.py                    lineNo=386    -------- reading op2 with read_mode=1 (array sizing) --------
INFO:      fname=op2_scalar.py             lineNo=1398   op2_filename = 'isat_dploy_sm.op2'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='PVT0'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CSTM'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPL'
DEBUG:     fname=op2_scalar.py             lineNo=2241   table_name = 'GPL'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='EPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='MPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM2'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM4'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BGPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='DYNAMICS'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CASECC'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='LAMA'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BOPHIG'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OES1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OEF1'
DEBUG:     fname=op2.py                    lineNo=398    -------- reading op2 with read_mode=2 (array filling) --------
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='PVT0'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CSTM'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPL'
DEBUG:     fname=op2_scalar.py             lineNo=2241   table_name = 'GPL'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='EPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='MPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM2'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM4'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BGPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='DYNAMICS'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CASECC'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='LAMA'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BOPHIG'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OES1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OEF1'
DEBUG:     fname=op2.py                    lineNo=534    combine_results
DEBUG:     fname=op2.py                    lineNo=406    finished reading op2
DEBUG:     fname=op2.py                    lineNo=385    combine=True
DEBUG:     fname=op2.py                    lineNo=386    -------- reading op2 with read_mode=1 (array sizing) --------
INFO:      fname=op2_scalar.py             lineNo=1398   op2_filename = 'isat_dploy_sm.op2'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='PVT0'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CSTM'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPL'
DEBUG:     fname=op2_scalar.py             lineNo=2241   table_name = 'GPL'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='EPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='MPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM2'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM4'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BGPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='DYNAMICS'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CASECC'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='LAMA'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BOPHIG'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OES1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OEF1'
DEBUG:     fname=op2.py                    lineNo=398    -------- reading op2 with read_mode=2 (array filling) --------
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='PVT0'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CSTM'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPL'
DEBUG:     fname=op2_scalar.py             lineNo=2241   table_name = 'GPL'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='EPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='MPT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM2'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM4'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='GEOM1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BGPDT'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='DYNAMICS'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='CASECC'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='LAMA'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='BOPHIG'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OES1'
DEBUG:     fname=op2_scalar.py             lineNo=1589     table_name='OEF1'
DEBUG:     fname=op2.py                    lineNo=534    combine_results
DEBUG:     fname=op2.py                    lineNo=406    finished reading op2


---stats for isat_dploy_sm.op2---
eigenvectors[1]
  isubcase = 1
  type=RealEigenvectorArray ntimes=203 nnodes=5367, table_name=BOPHIG
  data: [t1, t2, t3, r1, r2, r3] shape=[203, 5367, 6] dtype=float32
  gridTypes
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  mode_cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

cbar_force[1]
  type=RealCBarForceArray ntimes=203 nelements=790
  data: [ntimes, nnodes, 8] where 8=[bending_moment_a1, bending_moment_a2, bending_moment_b1, bending_moment_b2, shear1, shear2, axial, torq
ue]
  data.shape = (203, 790, 8)
  element name: CBAR-34
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

ctria3_stress[1]
  type=RealPlateStressArray ntimes=203 nelements=32 nnodes_per_element=1 nlayers=2 ntotal=64
  data: [ntimes, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  data.shape=(203L, 64L, 8L)
  element type: CTRIA3
  s_code: 1
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  mode2s = [0 0 0 ..., 0 0 0]
  cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

cquad4_stress[1]
  type=RealPlateStressArray ntimes=203 nelements=4580 nnodes_per_element=1 nlayers=2 ntotal=9160
  data: [ntimes, ntotal, 8] where 8=[fiber_distance, oxx, oyy, txy, angle, omax, omin, von_mises]
  data.shape=(203L, 9160L, 8L)
  element type: CQUAD4
  s_code: 1
  sort1
  modes = [  1   2   3 ..., 201 202 203]
  eigrs = [        0.         0.         0. ...,  11912279.  12843625.  13110797.]
  mode2s = [0 0 0 ..., 0 0 0]
  cycles = [   0.       0.       0.    ...,  549.31   570.38   576.282]

eigenvalues[ISAT_SM_DEPLOYED MODES TO 400 HZ]
  type=RealEigenvalues neigenvalues=203
  title, extraction_order, eigenvalues, radians, cycles, generalized_mass, generalized_stiffness


INFO:      fname=op2.py                    lineNo=639    ---self.subcase_key---
INFO:      fname=op2.py                    lineNo=642    subcase_id=1 : keys=[1]

Alternatively, we can call it and get a shorter summary:

>>> test_op2 -ct ISat_Dploy_Sm.op2

---stats for isat_dploy_sm.op2---
eigenvectors[1]
cbar_force[1]
ctria3_stress[1]
cquad4_stress[1]
eigenvalues[u'ISAT_SM_DEPLOYED MODES TO 400 HZ']
Calling Signature
test_op2 [-q] [-b] [-c] [-g] [-n] [-m] [-f] [-o] [-p] [-z] [-w] [-t] [-s <sub>] [-x <arg>]... OP2_FILENAME
  test_op2 -h | --help
  test_op2 -v | --version

Tests to see if an OP2 will work with pyNastran

Positional Arguments:
  OP2_FILENAME         Path to OP2 file

Options:
  -b, --binarydebug     Dumps the OP2 as a readable text file
  -c, --disablecompare  Doesn't do a validation of the vectorized result
  -q, --quiet           Suppresses debug messages [default: False]
  -t, --short_stats     Short get_op2_stats printout
  -g, --geometry        Reads the OP2 for geometry, which can be written out
  -n, --write_bdf       Writes the bdf to fem.test_op2.bdf (default=False)
  -f, --write_f06       Writes the f06 to fem.test_op2.f06
  -m, --write_xlsx      Writes an XLSX to fem.test_op2.xlsx
  -o, --write_op2       Writes the op2 to fem.test_op2.op2
  -p, --profile         Profiles the code (default=False)
  -z, --is_mag_phase    F06 Writer writes Magnitude/Phase instead of
                        Real/Imaginary (still stores Real/Imag); [default: False]
  -s <sub>, --subcase   Specify one or more subcases to parse; (e.g. 2_5)
  -w, --is_sort2        Sets the F06 transient to SORT2
  -x <arg>, --exclude   Exclude specific results
  -h, --help            Show this help message and exit
  -v, --version         Show program's version number and exit

Pandas

pyNastran also supports Pandas dataframes for the OP2 objects. This is most useful from within the iPython / Jupyter notebook.

Pandas Introduction

https://github.com/fonnesbeck/statistical-analysis-python-tutorial/blob/main/1.%20Introduction%20to%20Pandas.ipynb

Another Pandas Intro

`Pandas Video<https://www.youtube.com/watch?v=5JnMutdy6Fw>`_

Static & Transient DataFrames in PyNastran

op2_pandas_multi_case

Transient DataFrames in PyNastran

op2_pandas_DataFrames

Manipulating the Pandas DataFrame

op2_pandas_unstack

Transient DataFrames in PyNastran

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op2_pandas_DataFrames.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_pandas_DataFrames.ipynb

We’ll use standard pyNastran methods to load a model. We’ll set build_dataframe=True to make pandas objects
import os
import pandas as pd
pd.set_option('precision', 3)

import pyNastran
pkg_path = pyNastran.__path__[0]
from pyNastran.op2.op2 import read_op2

op2_filename = os.path.join(pkg_path, '..', 'models', 'iSat', 'iSat_launch_100Hz.op2')
isat = read_op2(op2_filename, build_dataframe=True, debug=False, skip_undefined_matrices=True,
                exclude_results='*strain_energy')
INFO: op2_scalar.py:1459 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran\\pyNastran\\..\\models\\iSat\\iSat_launch_100Hz.op2' WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 1 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 2 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 3 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 4 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 5 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 6 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 7 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 8 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 9 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 10 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 11 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQCONS-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 12 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 1 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 2 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 3 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 4 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 5 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 6 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 7 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 8 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 9 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 10 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 11 eign = 0.0 mode2 = 0 NX Nastran WARNING: op2_common.py:1470 --Table3Data-- device_code = 2 Plot analysis_code = 2 Normal modes or buckling (real eigenvalues) table_code = 5 RAQEATC-OES - Element Stress format_code = 2 Real/Imaginary sort_method = 1 sort_code = 0 sort_bits = (0, 0, 0) data_format = 0 Real sort_type = 0 Sort1 is_random = 0 Sorted Responses random_code = 0 s_code = None ??? thermal = 0 isHeatTransfer = False thermal_bits = [0, 0, 0, 0, 0] num_wide = 11 isubcase = 1 mode = 12 eign = 0.0 mode2 = 0 NX Nastran
c:nasam4formatsgitpynastranpyNastranop2op2.py:740: FutureWarning:
Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method
Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/.
Pandas provides a .to_xarray() method to help automate this conversion.

  obj.build_dataframe()

Get a list of all objects:

print(isat.get_op2_stats(short=True))
GridPointWeight: ref_point=0 mass=1.79373; [reference_point, M0, S, mass, cg, IS, IQ, Q]
EQEXIN(nid, ndof, doftype); nnodes=5383
RADEFFM.eigenvectors[1]
RADCONS.eigenvectors[1]
RAFCONS.cbar_force[1]
RAFCONS.cquad4_force[1]
RAFCONS.cbush_force[1]
RASCONS.cquad4_stress[1]
RASCONS.chexa_stress[1]
RAECONS.chexa_strain[1]
RAECONS.ctria3_strain[1]
RAECONS.cquad4_strain[1]
RAGCONS.grid_point_forces[1]
RAPCONS.cquad4_composite_stress[1]
RAPCONS.ctria3_composite_stress[1]
RANCONS.cbar_strain_energy[1]
RANCONS.cbush_strain_energy[1]
RANCONS.chexa_strain_energy[1]
RANCONS.ctria3_strain_energy[1]
RANCONS.cquad4_strain_energy[1]
RADEATC.eigenvectors[1]
RAFEATC.cbar_force[1]
RAFEATC.cquad4_force[1]
RAFEATC.cbush_force[1]
RASEATC.chexa_stress[1]
RASEATC.cquad4_stress[1]
RAEEATC.chexa_strain[1]
RAEEATC.ctria3_strain[1]
RAEEATC.cquad4_strain[1]
RAGEATC.grid_point_forces[1]
RAPEATC.cquad4_composite_stress[1]
RAPEATC.ctria3_composite_stress[1]
RANEATC.cbar_strain_energy[1]
RANEATC.cbush_strain_energy[1]
RANEATC.chexa_strain_energy[1]
RANEATC.ctria3_strain_energy[1]
RANEATC.cquad4_strain_energy[1]
eigenvectors[1]
mpc_forces[1]
grid_point_forces[1]
cbar_force[1]
cquad4_stress[1]
cquad4_strain[1]
chexa_stress[1]
chexa_strain[1]
PARAM[GRDPNT] = [0]
PARAM[POST] = [-1]
PARAM[RSCON] = ['YES']
PARAM[RSOPT] = [1]
eigenvalues['ISAT_SM_LAUNCH_4PT MODES TO 100 HZ']
cbush_force[1]
cquad4_force[1]
cquad4_composite_stress[1]
ctria3_composite_stress[1]
cquad4_composite_strain[1]
ctria3_composite_strain[1]
Matrix['BHH'];      shape=(33, 33);   type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=symmetric
Matrix['EFMASSS'];  shape=(6, 6);     type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=square
Matrix['EFMFACS'];  shape=(6, 33);    type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['EFMFSMS'];  shape=(6, 1);     type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['K4HH'];     shape=(33, 33);   type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=symmetric
Matrix['MEFMASS'];  shape=(6, 33);    type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['MEFWTS'];   shape=(6, 33);    type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['MPFACS'];   shape=(6, 33);    type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['RADAMPG'];  shape=(33, 33);   type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=symmetric
Matrix['RADAMPZ'];  shape=(33, 33);   type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=symmetric
Matrix['RADEFMP'];  shape=(33, 12);   type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['RAFGEN'];   shape=(33, 1);    type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=rectangular
Matrix['RBMASSS'];  shape=(6, 6);     type=scipy.sparse.coo.coo_matrix;      dtype=float64;   desc=square

Access the DataFrames

eigenvalues             = isat.eigenvalues[u'ISAT_SM_LAUNCH_4PT MODES TO 100 HZ'].data_frame
eigenvectors            = isat.eigenvectors[1].data_frame
mpc_forces              = isat.mpc_forces[1].data_frame
grid_point_forces       = isat.grid_point_forces[1].data_frame
cbar_force              = isat.cbar_force[1].data_frame
cbush_force             = isat.cbush_force[1].data_frame
cquad4_force            = isat.cquad4_force[1].data_frame
cquad4_stress           = isat.cquad4_stress[1].data_frame
chexa_stress            = isat.chexa_stress[1].data_frame
cquad4_composite_stress = isat.cquad4_composite_stress[1].data_frame
ctria3_composite_stress = isat.ctria3_composite_stress[1].data_frame
cquad4_strain           = isat.cquad4_strain[1].data_frame
chexa_strain            = isat.chexa_strain[1].data_frame
cquad4_composite_strain = isat.cquad4_composite_strain[1].data_frame
ctria3_composite_strain = isat.ctria3_composite_strain[1].data_frame
#del isat

Now list each of the objects and be amazed!

eigenvalues
Mode ExtractionOrder eigenvalue radians cycle generalized_mass generalized_stiffness
0 1 1 2758.149 52.518 8.359 1.0 2758.149
1 2 2 3568.632 59.738 9.508 1.0 3568.632
2 3 3 9689.306 98.434 15.666 1.0 9689.306
3 4 4 16168.100 127.154 20.237 1.0 16168.100
4 5 5 16278.223 127.586 20.306 1.0 16278.223
5 6 6 16679.709 129.150 20.555 1.0 16679.709
6 7 7 18248.434 135.087 21.500 1.0 18248.434
7 8 8 18600.697 136.384 21.706 1.0 18600.697
8 9 9 18632.551 136.501 21.725 1.0 18632.551
9 10 10 32147.814 179.298 28.536 1.0 32147.814
10 11 11 38660.684 196.623 31.294 1.0 38660.684
11 12 12 48432.578 220.074 35.026 1.0 48432.578
12 13 13 112409.023 335.275 53.361 1.0 112409.023
13 14 14 113042.672 336.218 53.511 1.0 113042.672
14 15 15 113475.180 336.861 53.613 1.0 113475.180
15 16 16 131635.375 362.816 57.744 1.0 131635.375
16 17 17 148774.906 385.714 61.388 1.0 148774.906
17 18 18 161249.031 401.558 63.910 1.0 161249.031
18 19 19 191365.172 437.453 69.623 1.0 191365.172
19 20 20 204148.297 451.828 71.911 1.0 204148.297
20 21 21 248182.016 498.179 79.288 1.0 248182.016
21 22 22 249137.609 499.137 79.440 1.0 249137.609
22 23 23 251654.172 501.651 79.840 1.0 251654.172
23 24 24 253140.875 503.131 80.076 1.0 253140.875
24 25 25 295297.750 543.413 86.487 1.0 295297.750
25 26 26 306885.906 553.973 88.168 1.0 306885.906
26 27 27 309040.656 555.914 88.477 1.0 309040.656
27 28 28 319227.719 565.002 89.923 1.0 319227.719
28 29 29 350984.500 592.439 94.290 1.0 350984.500
29 30 30 351566.188 592.930 94.368 1.0 351566.188
30 31 31 364166.156 603.462 96.044 1.0 364166.156
31 32 32 384601.344 620.162 98.702 1.0 384601.344
32 33 33 386090.438 621.362 98.893 1.0 386090.438
eigenvectors
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
NodeID Item
1 t1 4.783e-03 -4.603e-06 -1.897e-04 4.649e-02 1.610e-04 3.418e-02 -6.925e-05 -1.378e-03 6.644e-04 -1.026e-01 ... 6.956e-02 -1.152e-02 -5.199e-03 7.273e-04 -1.588e-03 -4.755e-02 -3.118e-04 2.620e-01 -5.739e-04 8.475e-02
t2 -1.520e-04 -4.498e-03 1.997e-02 -5.473e-04 8.291e-05 -2.297e-04 4.005e-05 -1.423e-02 -3.019e-02 -8.731e-03 ... 5.743e-02 -2.854e-01 7.239e-03 6.322e-03 -5.218e-03 9.643e-03 1.106e-04 -3.971e-02 -6.828e-04 -5.038e-03
t3 8.177e-04 -1.411e-03 6.603e-03 7.383e-03 -1.335e-03 5.795e-03 -1.029e-04 -4.668e-03 -9.329e-03 -2.086e-02 ... -7.069e-03 1.501e-02 2.409e-02 2.687e-03 1.777e-02 1.803e-02 -7.755e-03 -7.859e-02 7.459e-03 -2.079e-02
r1 7.844e-06 1.974e-04 -9.370e-04 4.649e-05 5.713e-05 1.262e-05 -1.822e-06 5.970e-04 1.275e-03 4.882e-04 ... 1.328e-03 -2.209e-02 5.989e-04 4.577e-04 -7.003e-03 1.504e-03 1.094e-04 -6.754e-03 -1.151e-04 -2.408e-03
r2 2.356e-04 -1.469e-06 -7.085e-06 2.291e-03 5.973e-06 1.604e-03 -3.388e-06 -6.959e-05 2.359e-05 -4.935e-03 ... 4.963e-04 -8.451e-04 6.328e-03 -1.456e-04 1.215e-04 4.780e-03 4.534e-05 -1.864e-02 1.826e-05 -4.895e-03
r3 3.808e-05 1.405e-06 -2.035e-04 1.292e-04 -2.965e-05 5.825e-05 6.086e-08 -1.498e-04 6.374e-05 8.817e-04 ... -8.750e-03 -9.315e-03 -4.098e-03 3.825e-04 -8.811e-04 -1.678e-03 -4.572e-05 7.115e-03 -5.625e-05 8.746e-04
2 t1 4.783e-03 -4.603e-06 -1.897e-04 4.649e-02 1.610e-04 3.418e-02 -6.925e-05 -1.378e-03 6.644e-04 -1.026e-01 ... 6.956e-02 -1.152e-02 -5.199e-03 7.273e-04 -1.588e-03 -4.755e-02 -3.118e-04 2.620e-01 -5.739e-04 8.475e-02
t2 -7.586e-05 -4.495e-03 1.957e-02 -2.889e-04 2.362e-05 -1.132e-04 4.017e-05 -1.453e-02 -3.007e-02 -6.967e-03 ... 3.992e-02 -3.041e-01 -9.565e-04 7.087e-03 -6.980e-03 6.288e-03 1.914e-05 -2.548e-02 -7.953e-04 -3.289e-03
t3 3.465e-04 -1.408e-03 6.617e-03 2.801e-03 -1.347e-03 2.588e-03 -9.610e-05 -4.528e-03 -9.376e-03 -1.099e-02 ... -8.062e-03 1.670e-02 1.143e-02 2.978e-03 1.753e-02 8.466e-03 -7.846e-03 -4.130e-02 7.422e-03 -1.100e-02
r1 7.844e-06 1.974e-04 -9.370e-04 4.649e-05 5.713e-05 1.262e-05 -1.822e-06 5.970e-04 1.275e-03 4.882e-04 ... 1.328e-03 -2.209e-02 5.989e-04 4.577e-04 -7.003e-03 1.504e-03 1.094e-04 -6.754e-03 -1.151e-04 -2.408e-03
r2 2.356e-04 -1.469e-06 -7.085e-06 2.291e-03 5.973e-06 1.604e-03 -3.388e-06 -6.959e-05 2.359e-05 -4.935e-03 ... 4.963e-04 -8.451e-04 6.328e-03 -1.456e-04 1.215e-04 4.780e-03 4.534e-05 -1.864e-02 1.826e-05 -4.895e-03
r3 3.808e-05 1.405e-06 -2.035e-04 1.292e-04 -2.965e-05 5.825e-05 6.086e-08 -1.498e-04 6.374e-05 8.817e-04 ... -8.750e-03 -9.315e-03 -4.098e-03 3.825e-04 -8.811e-04 -1.678e-03 -4.572e-05 7.115e-03 -5.625e-05 8.746e-04
3 t1 5.366e-03 -8.268e-06 -2.216e-04 5.218e-02 1.778e-04 3.818e-02 -7.766e-05 -1.526e-03 7.134e-04 -1.149e-01 ... 7.093e-02 -1.334e-02 1.064e-02 4.827e-04 -1.207e-03 -3.557e-02 -2.138e-04 2.154e-01 -5.517e-04 7.238e-02
t2 -1.665e-04 -4.985e-03 2.219e-02 -5.796e-04 -1.982e-07 -2.302e-04 4.437e-05 -1.573e-02 -3.333e-02 -9.943e-03 ... 5.474e-02 -2.310e-01 6.516e-03 5.141e-03 1.281e-02 5.925e-03 -1.468e-04 -2.186e-02 -4.073e-04 1.324e-03
t3 8.168e-04 -1.411e-03 6.599e-03 7.365e-03 -1.336e-03 5.787e-03 -1.029e-04 -4.668e-03 -9.329e-03 -2.084e-02 ... -7.047e-03 1.503e-02 2.408e-02 2.669e-03 1.778e-02 1.801e-02 -7.748e-03 -7.858e-02 7.459e-03 -2.076e-02
r1 8.172e-06 1.972e-04 -9.380e-04 5.422e-05 6.038e-05 1.025e-05 -1.811e-06 5.961e-04 1.275e-03 5.058e-04 ... 1.260e-03 -2.190e-02 6.328e-04 4.519e-04 -7.011e-03 1.567e-03 1.114e-04 -7.087e-03 -1.132e-04 -2.529e-03
r2 2.356e-04 -1.469e-06 -7.091e-06 2.291e-03 5.975e-06 1.604e-03 -3.388e-06 -6.959e-05 2.359e-05 -4.935e-03 ... 4.963e-04 -8.450e-04 6.328e-03 -1.456e-04 1.215e-04 4.780e-03 4.535e-05 -1.864e-02 1.825e-05 -4.895e-03
r3 3.150e-05 -2.537e-06 -1.159e-05 3.114e-05 7.084e-06 5.241e-06 8.916e-08 -1.278e-04 4.439e-05 6.552e-04 ... -6.064e-03 -4.016e-03 -9.461e-04 1.519e-04 -8.794e-04 6.687e-04 7.993e-07 -4.101e-03 -3.794e-05 -1.265e-03
4 t1 5.366e-03 -8.330e-06 -2.211e-04 5.219e-02 1.787e-04 3.818e-02 -7.766e-05 -1.526e-03 7.133e-04 -1.149e-01 ... 7.093e-02 -1.326e-02 1.065e-02 4.918e-04 -1.193e-03 -3.557e-02 -2.154e-04 2.154e-01 -5.525e-04 7.238e-02
t2 -9.532e-05 -4.985e-03 2.198e-02 -4.398e-04 -7.593e-05 -1.697e-04 4.474e-05 -1.601e-02 -3.322e-02 -7.928e-03 ... 3.569e-02 -2.477e-01 -2.925e-03 5.861e-03 1.027e-02 2.880e-03 -2.270e-04 -1.129e-02 -4.901e-04 1.409e-03
t3 3.475e-04 -1.408e-03 6.621e-03 2.819e-03 -1.346e-03 2.597e-03 -9.612e-05 -4.528e-03 -9.377e-03 -1.100e-02 ... -8.087e-03 1.666e-02 1.143e-02 3.004e-03 1.752e-02 8.480e-03 -7.853e-03 -4.132e-02 7.420e-03 -1.102e-02
r1 7.323e-06 1.976e-04 -9.387e-04 3.944e-05 5.584e-05 1.423e-05 -1.836e-06 5.980e-04 1.273e-03 4.655e-04 ... 1.348e-03 -2.229e-02 4.951e-04 4.631e-04 -6.966e-03 1.396e-03 1.074e-04 -6.239e-03 -1.164e-04 -2.227e-03
r2 2.356e-04 -1.469e-06 -7.088e-06 2.291e-03 5.971e-06 1.604e-03 -3.388e-06 -6.959e-05 2.359e-05 -4.935e-03 ... 4.964e-04 -8.448e-04 6.328e-03 -1.456e-04 1.216e-04 4.780e-03 4.534e-05 -1.864e-02 1.826e-05 -4.895e-03
r3 3.222e-05 -8.046e-07 5.499e-05 3.545e-05 2.334e-06 6.479e-06 1.232e-07 -1.226e-04 6.149e-05 7.328e-04 ... -6.690e-03 -3.144e-03 -1.442e-03 1.254e-04 -1.175e-03 3.937e-04 8.474e-06 -3.010e-03 -3.323e-05 -1.213e-03
5 t1 5.961e-03 -1.195e-05 -2.252e-04 5.794e-02 1.908e-04 4.219e-02 -8.619e-05 -1.726e-03 7.824e-04 -1.273e-01 ... 7.204e-02 -1.574e-02 2.644e-02 -6.614e-07 -9.805e-04 -2.365e-02 -8.509e-05 1.687e-01 -4.826e-04 6.027e-02
t2 -1.912e-04 -5.485e-03 2.466e-02 -7.798e-04 -2.027e-04 -2.928e-04 4.916e-05 -1.722e-02 -3.657e-02 -1.117e-02 ... 5.078e-02 -1.750e-01 4.245e-03 4.033e-03 2.980e-02 2.121e-03 -4.367e-04 -5.935e-03 -1.071e-04 7.004e-03
t3 8.177e-04 -1.411e-03 6.603e-03 7.383e-03 -1.335e-03 5.795e-03 -1.029e-04 -4.668e-03 -9.329e-03 -2.086e-02 ... -7.069e-03 1.501e-02 2.409e-02 2.687e-03 1.777e-02 1.803e-02 -7.755e-03 -7.859e-02 7.459e-03 -2.079e-02
r1 7.844e-06 1.974e-04 -9.370e-04 4.649e-05 5.713e-05 1.262e-05 -1.822e-06 5.970e-04 1.275e-03 4.882e-04 ... 1.328e-03 -2.209e-02 5.989e-04 4.577e-04 -7.003e-03 1.504e-03 1.094e-04 -6.754e-03 -1.151e-04 -2.408e-03
r2 2.356e-04 -1.469e-06 -7.085e-06 2.291e-03 5.973e-06 1.604e-03 -3.388e-06 -6.959e-05 2.359e-05 -4.935e-03 ... 4.963e-04 -8.451e-04 6.328e-03 -1.456e-04 1.215e-04 4.780e-03 4.534e-05 -1.864e-02 1.826e-05 -4.895e-03
r3 3.808e-05 1.405e-06 -2.035e-04 1.292e-04 -2.965e-05 5.825e-05 6.086e-08 -1.498e-04 6.374e-05 8.817e-04 ... -8.750e-03 -9.315e-03 -4.098e-03 3.825e-04 -8.811e-04 -1.678e-03 -4.572e-05 7.115e-03 -5.625e-05 8.746e-04
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5629 r2 -2.652e-05 1.424e-05 -9.370e-05 -2.956e-04 3.750e-06 -1.464e-04 3.768e-07 5.684e-05 9.662e-05 1.169e-04 ... 1.147e-03 1.045e-03 -9.297e-03 8.883e-05 -8.159e-04 -1.083e-02 -7.433e-05 4.795e-02 -5.038e-05 1.669e-02
r3 -1.360e-05 -1.463e-05 6.278e-05 -1.863e-05 -3.205e-06 -4.586e-05 -1.952e-07 -3.109e-05 -1.056e-04 -4.573e-04 ... -4.006e-02 -7.522e-04 -4.113e-02 5.235e-04 -9.704e-04 -2.391e-02 -1.532e-04 9.419e-02 -1.224e-04 2.540e-02
5630 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
r1 -9.236e-06 5.989e-05 -2.115e-04 3.352e-05 7.314e-06 2.656e-05 -6.836e-07 2.610e-04 3.961e-04 -3.628e-04 ... -1.009e-03 2.484e-02 -4.151e-05 -6.733e-04 4.820e-03 2.007e-04 6.944e-09 -2.006e-03 1.454e-04 -1.561e-03
r2 -1.465e-04 -1.370e-06 -5.205e-07 -1.550e-03 1.280e-05 -9.804e-04 7.567e-07 -1.124e-05 -2.168e-05 3.064e-03 ... -4.260e-03 2.232e-03 -1.665e-02 9.862e-04 7.816e-04 -1.174e-02 -1.524e-04 4.781e-02 -7.502e-04 1.181e-02
r3 8.294e-06 -3.527e-05 2.780e-04 1.163e-05 -7.742e-07 1.042e-05 5.294e-07 -1.103e-04 -1.976e-04 3.373e-04 ... 1.393e-02 2.556e-02 1.862e-02 -8.446e-04 7.201e-03 1.050e-02 -1.112e-06 -4.164e-02 1.661e-04 -1.112e-02
5631 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
r1 -1.170e-06 -1.010e-04 6.944e-04 -1.343e-05 5.211e-05 -8.947e-06 2.129e-06 -2.893e-04 -5.853e-04 -8.865e-05 ... -2.248e-03 5.030e-02 2.303e-03 -1.153e-03 1.248e-02 -8.466e-05 -1.497e-04 6.619e-04 2.399e-04 2.644e-05
r2 -7.324e-06 1.965e-06 -5.376e-06 -5.817e-05 6.001e-09 3.957e-05 -2.939e-08 3.560e-05 -4.600e-06 -1.047e-04 ... 6.757e-03 2.301e-03 -1.309e-04 -1.111e-04 4.543e-04 -6.065e-04 2.829e-05 1.562e-03 4.085e-05 -8.502e-04
r3 -4.675e-05 -2.844e-06 -8.917e-07 -3.364e-04 4.249e-08 -2.102e-04 2.663e-07 2.020e-05 -2.852e-05 4.406e-05 ... -2.593e-02 1.120e-03 -3.532e-02 3.738e-04 -9.731e-04 -2.265e-02 -1.344e-04 9.203e-02 -7.585e-05 2.482e-02
5632 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
r1 8.507e-06 6.140e-05 -2.039e-04 -4.113e-05 5.478e-06 -3.081e-05 -4.477e-07 1.620e-04 4.590e-04 5.116e-04 ... -9.596e-04 2.027e-02 2.238e-03 -4.459e-04 3.836e-03 -2.446e-04 -6.799e-05 2.748e-03 5.174e-05 1.719e-03
r2 -1.461e-04 1.415e-06 7.950e-06 -1.547e-03 -2.199e-05 -9.785e-04 3.209e-06 1.002e-05 2.172e-05 3.067e-03 ... -3.921e-03 4.023e-05 -1.671e-02 -6.969e-04 -1.544e-03 -1.169e-02 3.661e-05 4.747e-02 7.280e-04 1.162e-02
r3 8.601e-06 3.978e-05 -2.679e-04 1.585e-05 -4.958e-06 1.330e-05 -2.530e-07 1.031e-04 2.340e-04 4.165e-04 ... 1.633e-02 -2.633e-02 1.632e-02 4.668e-04 -6.273e-03 1.068e-02 1.079e-04 -4.284e-02 -7.702e-05 -1.140e-02
5633 t1 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t2 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
t3 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
r1 -5.391e-07 -9.719e-05 7.383e-04 -9.419e-06 9.568e-06 -5.752e-06 -6.665e-08 -2.912e-04 -5.884e-04 -1.044e-04 ... -2.426e-03 5.882e-02 2.815e-03 -1.555e-03 1.707e-02 -1.970e-04 -6.888e-05 1.696e-03 2.038e-04 6.063e-04
r2 -4.001e-05 -1.215e-06 -3.020e-06 -4.822e-04 -5.950e-07 -2.615e-04 4.786e-07 -1.794e-05 1.429e-06 6.348e-04 ... 1.515e-03 1.627e-03 -1.129e-02 1.319e-04 -2.081e-04 -1.293e-02 -9.682e-05 5.764e-02 -8.163e-05 1.945e-02
r3 -3.599e-06 -3.174e-06 -4.421e-06 1.197e-04 1.557e-08 3.943e-05 -2.706e-07 2.433e-05 -3.509e-05 -8.412e-04 ... -4.033e-02 -1.184e-03 -3.966e-02 4.916e-04 -1.421e-03 -2.236e-02 -1.365e-04 8.701e-02 -9.924e-05 2.335e-02
10001 S -6.046e-03 2.173e-03 -1.196e-02 -6.238e-02 4.140e-04 -4.187e-02 4.991e-06 7.265e-03 1.305e-02 1.276e-01 ... -1.767e-01 -1.924e-01 -5.082e-01 7.830e-02 -4.204e-02 -2.491e-02 2.880e-01 1.334e+00 -1.396e-01 2.122e-01
10002 S -5.565e-03 -2.292e-03 1.160e-02 -6.046e-02 7.144e-04 -4.064e-02 4.942e-05 -8.080e-03 -1.509e-02 1.316e-01 ... -2.144e-01 2.776e-01 -4.068e-01 6.402e-02 1.275e-01 5.951e-02 2.877e-01 9.576e-01 -1.356e-01 7.489e-02
10003 S -6.044e-03 -2.256e-03 1.223e-02 -6.248e-02 -7.933e-04 -4.195e-02 1.607e-04 -6.251e-03 -1.424e-02 1.231e-01 ... -1.840e-01 2.654e-01 -4.871e-01 -6.867e-02 2.093e-02 -2.570e-02 -2.919e-01 1.339e+00 1.410e-01 2.102e-01
10004 S -5.553e-03 2.316e-03 -1.095e-02 -6.020e-02 -1.098e-03 -4.048e-02 1.170e-04 7.149e-03 1.569e-02 1.364e-01 ... -1.782e-01 -3.088e-01 -4.325e-01 -5.553e-02 -1.632e-01 6.361e-02 -2.893e-01 9.270e-01 1.387e-01 6.345e-02

32278 rows × 33 columns

mpc_forces
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
NodeID Item
5297 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5300 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5321 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5324 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5489 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5492 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5513 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5516 t1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
t3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
r3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

48 rows × 33 columns

Well maybe be less amazed by this one. If you know pandas and can fix it, here’s the code :) It’s supposed to have the Eigenvalues, Freq, and Cycles, at the top.

import numpy as np
import pandas as pd

def build_dataframe_gpf(self):
    headers = self.get_headers()
    #name = self.name
    if self.is_unique:
        ntimes = self.data.shape[0]
        nnodes = self.data.shape[1]
        nvalues = ntimes * nnodes
        node_element = self.node_element.reshape((ntimes * nnodes, 2))
        if self.nonlinear_factor is not None:
            column_names, column_values = self._build_dataframe_transient_header()
            #column_names = [column_names[0]]
            #column_values = [column_values[0]]

            column_values2 = []
            for value in column_values:
                values2 = []
                #print(value)
                for valuei in value:
                    values = np.ones(nnodes) * valuei
                    values2.append(values)
                values3 = np.vstack(values2).ravel()
                column_values2.append(values3)
            df1 = pd.DataFrame(column_values2).T
            df1.columns = column_names
            return df1
            #df1.columns.names = column_names
            #self.data_frame.columns.names = column_names

            df2 = pd.DataFrame(node_element)
            df2.columns = ['NodeID', 'ElementID']
            df3 = pd.DataFrame(self.element_names.ravel())
            df3.columns = ['ElementType']

            dfs = [df2, df3]
            for i, header in enumerate(headers):
                df = pd.DataFrame(self.data[:, :, i].ravel())
                df.columns = [header]
                dfs.append(df)
            data_frame = df1.join(dfs)
            #print(data_frame)
        else:
            df1 = pd.DataFrame(node_element)
            df1.columns = ['NodeID', 'ElementID']
            df2 = pd.DataFrame(self.element_names[0, :])
            df2.columns = ['ElementType']
            df3 = pd.DataFrame(self.data[0])
            df3.columns = headers
            data_frame = df1.join([df2, df3])
            #print(data_frame)
    else:
        node_element = [self.node_element[:, 0], self.node_element[:, 1]]
        if self.nonlinear_factor is not None:
            column_names, column_values = self._build_dataframe_transient_header()
            data_frame = pd.Panel(self.data, items=column_values, major_axis=node_element, minor_axis=headers).to_frame()
            data_frame.columns.names = column_names
            data_frame.index.names = ['NodeID', 'ElementID', 'Item']
        else:
            data_frame = pd.Panel(self.data, major_axis=node_element, minor_axis=headers).to_frame()
            data_frame.columns.names = ['Static']
            data_frame.index.names = ['NodeID', 'ElementID', 'Item']
    return data_frame

# print(isat.grid_point_forces[1])
grid_point_forces2 = build_dataframe_gpf(isat.grid_point_forces[1])

# print(grid_point_forces2)
grid_point_forces
Mode Freq Eigenvalue Radians NodeID ElementID ElementType f1 f2 f3 m1 m2 m3
0 1.0 0.0 0.0 0.0 5297 5346 BAR -0.060 -2.243e-02 -2.764e-02 8.066e-02 -2.382e-01 -8.417e-02
1 1.0 0.0 0.0 0.0 5297 5363 BAR -0.359 -3.031e-02 1.490e-02 -1.058e-01 6.810e-02 1.616e-01
2 1.0 0.0 0.0 0.0 5297 5367 BAR 0.613 8.965e-02 -1.151e-01 -7.916e-02 1.702e-01 -1.745e-01
3 1.0 0.0 0.0 0.0 5297 5328 QUAD4 -0.192 -3.259e-02 1.284e-01 1.043e-01 -1.460e-05 9.700e-02
4 1.0 0.0 0.0 0.0 5297 0 *TOTALS* 0.002 4.326e-03 5.683e-04 -1.079e-11 2.391e-11 3.351e-11
5 1.0 0.0 0.0 0.0 5300 5348 BAR 0.050 5.347e-03 1.100e-01 3.602e-02 -2.317e-01 5.467e-02
6 1.0 0.0 0.0 0.0 5300 5349 BAR -0.096 3.899e-03 -7.795e-03 -6.495e-02 -3.274e-02 -1.310e-01
7 1.0 0.0 0.0 0.0 5300 5365 BAR 0.008 -1.007e-02 -1.741e-01 -5.511e-02 2.644e-01 1.638e-01
8 1.0 0.0 0.0 0.0 5300 5330 QUAD4 0.040 5.826e-03 7.251e-02 8.404e-02 -2.549e-05 -8.742e-02
9 1.0 0.0 0.0 0.0 5300 0 *TOTALS* 0.002 4.998e-03 5.686e-04 3.265e-12 6.031e-11 -5.578e-13
10 1.0 0.0 0.0 0.0 5321 5357 BAR -0.058 1.775e-02 -3.708e-02 -1.104e-01 -2.457e-01 -4.541e-02
11 1.0 0.0 0.0 0.0 5321 5358 BAR -0.040 6.789e-03 4.204e-04 4.374e-02 1.662e-03 1.106e-01
12 1.0 0.0 0.0 0.0 5321 5366 BAR 0.182 -4.202e-02 1.145e-01 1.923e-01 2.440e-01 -1.592e-01
13 1.0 0.0 0.0 0.0 5321 5343 QUAD4 -0.083 1.733e-02 -7.775e-02 -1.256e-01 -2.249e-05 9.405e-02
14 1.0 0.0 0.0 0.0 5321 0 *TOTALS* 0.002 -1.534e-04 1.224e-04 -1.230e-11 -3.808e-11 6.874e-11
15 1.0 0.0 0.0 0.0 5324 5354 BAR 0.418 -3.375e-02 -1.030e-02 8.007e-02 4.526e-02 -2.407e-01
16 1.0 0.0 0.0 0.0 5324 5355 BAR 0.064 -1.910e-02 -2.882e-02 -5.490e-02 -2.576e-01 4.488e-02
17 1.0 0.0 0.0 0.0 5324 5364 BAR -0.694 8.436e-02 1.931e-01 9.781e-02 2.123e-01 3.349e-01
18 1.0 0.0 0.0 0.0 5324 5345 QUAD4 0.214 -3.159e-02 -1.538e-01 -1.230e-01 -1.884e-05 -1.391e-01
19 1.0 0.0 0.0 0.0 5324 0 *TOTALS* 0.002 -8.632e-05 1.224e-04 -1.509e-12 -5.693e-12 2.499e-11
20 1.0 0.0 0.0 0.0 5489 5538 BAR -0.050 -5.435e-03 1.105e-01 3.598e-02 -2.340e-01 -5.410e-02
21 1.0 0.0 0.0 0.0 5489 5555 BAR 0.093 -4.224e-03 -7.878e-03 -6.488e-02 -3.309e-02 1.341e-01
22 1.0 0.0 0.0 0.0 5489 5559 BAR -0.002 1.072e-02 -1.755e-01 -5.628e-02 2.671e-01 -1.691e-01
23 1.0 0.0 0.0 0.0 5489 5520 QUAD4 -0.042 -6.054e-03 7.352e-02 8.518e-02 -2.573e-05 8.907e-02
24 1.0 0.0 0.0 0.0 5489 0 *TOTALS* -0.002 -4.999e-03 5.680e-04 -2.242e-12 -9.261e-12 2.911e-11
25 1.0 0.0 0.0 0.0 5492 5540 BAR 0.061 2.256e-02 -2.865e-02 8.120e-02 -2.404e-01 8.401e-02
26 1.0 0.0 0.0 0.0 5492 5541 BAR 0.367 3.053e-02 1.501e-02 -1.059e-01 6.863e-02 -1.633e-01
27 1.0 0.0 0.0 0.0 5492 5557 BAR -0.625 -9.022e-02 -1.156e-01 -8.058e-02 1.717e-01 1.774e-01
28 1.0 0.0 0.0 0.0 5492 5522 QUAD4 0.195 3.280e-02 1.298e-01 1.053e-01 -1.472e-05 -9.806e-02
29 1.0 0.0 0.0 0.0 5492 0 *TOTALS* -0.002 -4.325e-03 5.677e-04 -5.622e-12 -7.751e-12 -2.005e-11
... ... ... ... ... ... ... ... ... ... ... ... ... ...
1290 33.0 0.0 0.0 0.0 5321 5357 BAR -92.830 -3.867e+01 -4.004e+00 -8.363e+02 -3.982e+02 -1.335e+03
1291 33.0 0.0 0.0 0.0 5321 5358 BAR -474.310 -8.700e+02 -6.287e+00 1.539e+02 -2.862e+01 -5.414e+03
1292 33.0 0.0 0.0 0.0 5321 5366 BAR 819.168 1.379e+03 2.195e+02 -6.429e+02 4.268e+02 9.465e+03
1293 33.0 0.0 0.0 0.0 5321 5343 QUAD4 -268.240 -4.579e+02 -1.901e+02 1.325e+03 -4.288e-02 -2.717e+03
1294 33.0 0.0 0.0 0.0 5321 0 *TOTALS* -16.211 1.237e+01 1.915e+01 -2.046e-12 2.005e-11 8.185e-12
1295 33.0 0.0 0.0 0.0 5324 5354 BAR -951.107 -8.312e+02 8.138e+00 -2.805e+02 -8.444e+01 -5.200e+03
1296 33.0 0.0 0.0 0.0 5324 5355 BAR 62.716 -7.837e+01 -2.113e+02 5.309e+02 -3.133e+02 -1.361e+03
1297 33.0 0.0 0.0 0.0 5324 5364 BAR 1058.673 1.383e+03 2.197e+02 1.247e+03 3.978e+02 9.268e+03
1298 33.0 0.0 0.0 0.0 5324 5345 QUAD4 -180.502 -4.726e+02 2.581e+00 -1.497e+03 -4.186e-02 -2.706e+03
1299 33.0 0.0 0.0 0.0 5324 0 *TOTALS* -10.220 1.157e+00 1.911e+01 -4.775e-12 -1.782e-11 -1.000e-11
1300 33.0 0.0 0.0 0.0 5489 5538 BAR 3.247 1.674e+02 -2.370e+02 -4.606e+02 1.108e+02 2.695e+02
1301 33.0 0.0 0.0 0.0 5489 5555 BAR -1058.828 4.548e+02 2.440e+01 5.859e+02 1.248e+02 -7.428e+02
1302 33.0 0.0 0.0 0.0 5489 5559 BAR 1345.702 -1.013e+03 1.349e+02 1.087e+02 -2.357e+02 7.631e+02
1303 33.0 0.0 0.0 0.0 5489 5520 QUAD4 -282.304 3.662e+02 8.156e+01 -2.340e+02 2.748e-02 -2.898e+02
1304 33.0 0.0 0.0 0.0 5489 0 *TOTALS* 7.816 -2.443e+01 3.854e+00 8.441e-12 3.591e-12 -1.182e-11
1305 33.0 0.0 0.0 0.0 5492 5540 BAR -102.959 1.626e+02 9.553e+01 4.068e+02 3.659e+02 3.714e+02
1306 33.0 0.0 0.0 0.0 5492 5541 BAR -711.615 4.815e+02 -3.180e+01 -7.200e+02 -1.152e+02 -8.347e+02
1307 33.0 0.0 0.0 0.0 5492 5557 BAR 1183.858 -1.044e+03 1.629e+02 1.073e+02 -2.506e+02 7.746e+02
1308 33.0 0.0 0.0 0.0 5492 5522 QUAD4 -354.190 3.738e+02 -2.227e+02 2.059e+02 2.097e-02 -3.114e+02
1309 33.0 0.0 0.0 0.0 5492 0 *TOTALS* 15.094 -2.639e+01 3.938e+00 -1.180e-11 1.193e-11 -1.205e-11
1310 33.0 0.0 0.0 0.0 5513 5549 BAR -62.814 7.758e+01 -2.112e+02 5.136e+02 -3.144e+02 1.330e+03
1311 33.0 0.0 0.0 0.0 5513 5550 BAR 944.898 8.126e+02 8.459e+00 -2.753e+02 -8.660e+01 5.083e+03
1312 33.0 0.0 0.0 0.0 5513 5558 BAR -1051.532 -1.354e+03 2.202e+02 1.229e+03 4.010e+02 -9.060e+03
1313 33.0 0.0 0.0 0.0 5513 5535 QUAD4 178.990 4.628e+02 2.070e+00 -1.467e+03 -4.224e-02 2.647e+03
1314 33.0 0.0 0.0 0.0 5513 0 *TOTALS* 9.542 -1.325e+00 1.955e+01 1.592e-12 -1.167e-11 -6.366e-12
1315 33.0 0.0 0.0 0.0 5516 5546 BAR 472.572 8.511e+02 -6.422e+00 1.504e+02 -2.873e+01 5.298e+03
1316 33.0 0.0 0.0 0.0 5516 5547 BAR 93.582 3.738e+01 -4.747e+00 -8.224e+02 -4.008e+02 1.306e+03
1317 33.0 0.0 0.0 0.0 5516 5556 BAR -818.566 -1.349e+03 2.214e+02 -6.220e+02 4.295e+02 -9.262e+03
1318 33.0 0.0 0.0 0.0 5516 5537 QUAD4 268.422 4.476e+02 -1.907e+02 1.294e+03 -4.314e-02 2.657e+03
1319 33.0 0.0 0.0 0.0 5516 0 *TOTALS* 16.010 -1.246e+01 1.959e+01 9.095e-13 -2.988e-11 -4.547e-12

1320 rows × 13 columns

cbar_force
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID Item
3323 bending_moment_a1 -0.159 2.322e-01 -1.325 -2.320 1.883 -0.800 -1.344e-03 1.423 1.467 4.636 ... -43.493 63.353 -43.076 -3.346 11.101 -14.381 0.750 29.359 0.486 -4.565
bending_moment_a2 0.187 -5.024e-02 0.181 0.006 0.107 -0.424 -4.186e-03 -1.106 0.102 -1.573 ... -4.458 5.332 1.627 4.864 2.144 0.089 -1.271 -10.583 -0.670 3.476
bending_moment_b1 0.166 -2.080e-01 2.010 2.657 -1.879 0.729 2.291e-03 -1.376 -1.308 -3.973 ... 34.783 -74.016 35.138 3.543 -15.062 10.974 -0.674 -17.689 -0.626 6.393
bending_moment_b2 -0.187 5.022e-02 -0.181 -0.004 -0.107 0.425 4.183e-03 1.106 -0.102 1.571 ... 4.455 -5.342 -1.624 -4.862 -2.146 -0.083 1.271 10.560 0.669 -3.485
shear1 -0.130 1.760e-01 -1.334 -1.991 1.505 -0.611 -1.454e-03 1.120 1.110 3.443 ... -31.310 54.947 -31.285 -2.756 10.465 -10.142 0.570 18.819 0.445 -4.383
shear2 0.150 -4.018e-02 0.145 0.004 0.086 -0.340 -3.348e-03 -0.885 0.082 -1.258 ... -3.565 4.269 1.301 3.890 1.716 0.069 -1.017 -8.457 -0.536 2.784
axial 0.798 2.069e-01 -4.245 16.966 -0.791 8.127 -7.815e-03 1.476 0.926 -14.693 ... -5.960 -76.450 21.821 -10.654 -10.418 32.557 5.958 -103.311 -1.003 -46.390
torque -0.040 -5.512e-02 -0.784 -0.910 -0.750 -0.463 7.175e-04 -0.115 -0.606 -1.909 ... 29.550 9.498 31.150 0.148 10.121 25.318 -0.334 -121.477 0.198 -23.504
3324 bending_moment_a1 0.142 -2.855e-01 -0.185 1.575 -1.893 0.957 -7.459e-04 -1.527 -1.816 -6.099 ... 62.709 -39.827 60.589 2.909 -2.364 21.896 -0.919 -55.106 -0.177 0.531
bending_moment_a2 -0.188 5.027e-02 -0.179 -0.010 -0.107 0.422 4.192e-03 1.106 -0.102 1.577 ... 4.464 -5.310 -1.633 -4.867 -2.140 -0.101 1.270 10.635 0.673 -3.457
bending_moment_b1 -0.149 2.613e-01 -0.499 -1.913 1.889 -0.886 -2.012e-04 1.480 1.658 5.436 ... -53.999 50.490 -52.651 -3.107 6.324 -18.490 0.842 43.436 0.317 -2.359
bending_moment_b2 0.187 -5.026e-02 0.180 0.008 0.107 -0.423 -4.189e-03 -1.106 0.102 -1.575 ... -4.461 5.320 1.631 4.866 2.142 0.096 -1.270 -10.611 -0.672 3.466
shear1 0.116 -2.187e-01 0.126 1.395 -1.513 0.737 -2.179e-04 -1.203 -1.389 -4.614 ... 46.683 -36.127 45.296 2.406 -3.475 16.154 -0.704 -39.417 -0.198 1.156
shear2 -0.150 4.021e-02 -0.144 -0.007 -0.086 0.338 3.352e-03 0.885 -0.082 1.261 ... 3.570 -4.252 -1.306 -3.893 -1.712 -0.079 1.016 8.499 0.538 -2.769
axial -0.798 -2.069e-01 4.245 -16.966 0.791 -8.127 7.815e-03 -1.476 -0.926 14.693 ... 5.960 76.450 -21.821 10.654 10.418 -32.557 -5.958 103.311 1.003 46.390
torque 0.040 5.512e-02 0.784 0.910 0.750 0.463 -7.175e-04 0.115 0.606 1.909 ... -29.550 -9.498 -31.150 -0.148 -10.121 -25.318 0.334 121.477 -0.198 23.504
3325 bending_moment_a1 -0.106 3.317e-01 -5.500 -2.887 4.495 -0.720 -4.811e-03 2.206 2.610 7.261 ... 3.946 13.702 16.914 -5.397 19.343 27.801 2.392 -144.077 0.007 -54.887
bending_moment_a2 0.280 -1.117e-03 -0.172 1.093 0.556 0.258 2.500e-03 -1.270 0.418 -3.938 ... -29.645 -6.992 -27.543 10.568 3.315 -22.856 -2.201 92.207 -2.224 31.617
bending_moment_b1 0.132 -3.120e-01 6.719 3.662 -4.772 0.642 8.442e-03 -2.156 -2.377 -5.712 ... -7.081 -17.435 -15.147 5.427 -26.582 -24.443 -2.223 128.023 -0.137 47.225
bending_moment_b2 -0.280 1.078e-03 0.171 -1.092 -0.557 -0.257 -2.505e-03 1.270 -0.418 3.937 ... 29.642 6.985 27.544 -10.566 -3.317 22.859 2.201 -92.222 2.224 -31.622
shear1 -0.095 2.575e-01 -4.888 -2.620 3.707 -0.545 -5.301e-03 1.745 1.995 5.189 ... 4.411 12.455 12.824 -4.329 18.370 20.897 1.846 -108.840 0.058 -40.845
shear2 0.224 -8.781e-04 -0.137 0.874 0.445 0.206 2.002e-03 -1.016 0.335 -3.150 ... -23.714 -5.591 -22.035 8.454 2.653 -18.286 -1.761 73.772 -1.779 25.295
axial 1.169 3.563e-02 -9.525 25.825 -2.350 8.444 -4.220e-02 0.614 0.391 -16.175 ... -25.936 -79.791 28.274 12.846 -8.970 52.065 1.137 -206.909 -6.252 -74.468
torque 0.073 -1.759e-03 3.763 0.174 -0.440 -0.402 3.038e-03 -0.318 0.170 2.675 ... 17.865 6.429 37.804 -0.508 -14.531 35.882 0.357 -170.333 0.078 -46.281
3326 bending_moment_a1 0.048 -3.754e-01 2.810 1.177 -3.883 0.892 -3.199e-03 -2.315 -3.125 -10.679 ... 2.972 -5.465 -20.811 5.330 -3.372 -35.209 -2.765 179.496 0.281 71.791
bending_moment_a2 -0.280 1.205e-03 0.173 -1.097 -0.556 -0.259 -2.488e-03 1.270 -0.418 3.940 ... 29.651 7.005 27.541 -10.571 -3.311 22.849 2.201 -92.176 2.226 -31.606
bending_moment_b1 -0.074 3.556e-01 -4.029 -1.952 4.161 -0.814 -4.320e-04 2.265 2.891 9.130 ... 0.164 9.199 19.045 -5.360 10.611 31.851 2.596 -163.442 -0.150 -64.129
bending_moment_b2 0.280 -1.165e-03 -0.172 1.095 0.556 0.259 2.493e-03 -1.270 0.418 -3.939 ... -29.648 -6.999 -27.542 10.570 3.313 -22.852 -2.201 92.190 -2.225 31.611
shear1 0.049 -2.924e-01 2.735 1.252 -3.218 0.682 -1.107e-03 -1.832 -2.406 -7.924 ... 1.123 -5.866 -15.942 4.276 -5.593 -26.824 -2.144 137.175 0.172 54.368
shear2 -0.224 9.482e-04 0.138 -0.877 -0.445 -0.207 -1.993e-03 1.016 -0.334 3.152 ... 23.720 5.602 22.033 -8.456 -2.650 18.280 1.761 -73.746 1.781 -25.286
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5670 bending_moment_b1 -3.339 5.380e-01 -15.324 -26.822 -0.834 -21.393 2.495e-02 1.866 2.052 47.998 ... 105.627 -502.927 -14.761 -4.548 -35.620 -29.337 3.047 160.708 0.560 57.898
bending_moment_b2 -3.621 -2.502e+00 20.944 -49.275 0.927 -34.695 9.727e-02 -12.715 -14.466 130.109 ... -64.354 -953.659 137.681 16.176 -234.157 206.144 -2.940 -994.719 12.171 -367.928
shear1 2.622 -5.500e-01 10.844 27.844 0.718 19.658 -3.016e-02 -0.525 -3.371 -60.352 ... -60.392 420.128 29.043 5.720 56.698 24.313 -5.620 -121.411 4.401 -41.888
shear2 3.266 2.809e+00 -21.138 47.373 -2.217 32.624 -1.229e-01 12.595 15.021 -125.358 ... -90.177 993.535 -154.049 -18.174 288.808 -152.619 -3.696 649.406 8.894 177.785
axial 3.641 5.476e-01 0.831 56.792 -0.057 36.453 -9.411e-02 6.094 -0.775 -156.813 ... -368.710 548.856 -319.507 2.729 121.381 -217.780 -6.697 887.148 6.721 274.097
torque -0.258 -1.324e-01 -1.876 2.434 0.254 0.520 7.498e-03 0.743 -1.394 -14.401 ... 47.318 99.730 24.445 -1.667 43.624 -3.545 0.408 34.847 0.689 18.950
5671 bending_moment_a1 -5.659 -1.121e-01 0.462 -60.422 -0.300 -43.413 8.199e-02 -2.289 -1.846 130.339 ... 87.918 -1274.001 257.847 37.582 -202.402 315.975 3.916 -1440.540 -10.429 -445.418
bending_moment_a2 13.068 -3.904e+00 22.973 150.782 2.061 102.018 -1.118e-01 -9.722 -28.964 -352.315 ... -543.115 1400.578 88.711 -54.877 388.654 71.517 -15.218 -347.654 57.939 -145.095
bending_moment_b1 5.620 -3.280e-01 -4.895 76.419 -1.168 49.203 -1.073e-01 6.311 -2.011 -187.096 ... 395.862 3012.305 -144.729 -79.467 823.969 -373.349 -16.024 1676.430 42.875 463.680
bending_moment_b2 -10.646 4.252e+00 -29.301 -116.967 -3.268 -80.632 6.113e-02 13.298 30.756 269.784 ... 1044.519 -1975.002 131.106 94.070 -527.551 -38.476 13.150 471.400 -82.329 284.392
shear1 -4.433 8.488e-02 2.105 -53.783 0.341 -36.401 7.441e-02 -3.380 0.065 124.761 ... -121.031 -1684.646 158.224 46.004 -403.394 270.925 7.837 -1225.062 -20.950 -357.303
shear2 9.320 -3.205e+00 20.546 105.233 2.095 71.787 -6.798e-02 -9.048 -23.472 -244.504 ... -623.988 1326.704 -16.662 -58.540 360.096 43.230 -11.149 -321.912 55.130 -168.801
axial -1.774 -5.488e-01 4.150 -30.823 0.380 -20.689 5.315e-02 -3.814 -1.196 97.810 ... 539.625 786.469 643.566 -36.202 392.031 474.122 -3.562 -2104.999 37.386 -812.896
torque 0.581 2.120e-01 -0.724 6.864 0.068 4.787 -1.673e-02 1.138 1.523 -16.465 ... 88.429 -158.572 16.796 5.639 -55.123 -13.846 0.928 129.659 -6.680 62.655
5672 bending_moment_a1 1.179 -5.181e-01 3.781 24.786 0.310 14.652 -7.648e-03 -5.836 -19.213 -85.594 ... -568.087 -4959.613 -75.481 110.251 -788.183 331.030 17.773 -1643.599 -48.609 -194.918
bending_moment_a2 -16.173 6.802e-01 0.867 -206.958 0.557 -142.710 2.963e-01 -10.285 2.622 524.047 ... -3962.894 10312.055 -1357.529 -336.873 3180.764 28.351 -52.440 -3065.015 316.144 -2117.626
bending_moment_b1 -0.983 2.502e-01 -2.850 -13.705 -0.846 -8.170 5.725e-03 3.120 10.754 34.945 ... -177.240 1636.400 -379.023 -13.094 -87.906 -458.433 -5.134 2158.938 -11.777 632.254
bending_moment_b2 10.580 -3.701e-01 -3.505 136.870 -0.825 92.853 -2.029e-01 8.873 0.200 -342.117 ... 2735.206 -5677.467 883.585 191.532 -1785.922 -86.016 30.428 2283.334 -195.530 1454.442
shear1 0.674 -2.396e-01 2.068 12.001 0.360 7.116 -4.170e-03 -2.792 -9.344 -37.584 ... -121.866 -2056.625 94.644 38.459 -218.345 246.153 7.143 -1185.625 -11.484 -257.911
shear2 -8.341 3.275e-01 1.363 -107.205 0.431 -73.448 1.557e-01 -5.973 0.755 270.068 ... -2088.456 4985.505 -698.776 -164.756 1548.604 35.659 -25.838 -1667.606 159.539 -1113.765
axial -1.195 -4.812e-01 8.502 -1.983 0.866 0.808 2.142e-02 -7.725 -14.430 -50.811 ... 1490.182 -7709.150 48.365 220.657 -1772.561 -214.154 26.928 1953.687 -131.674 930.862
torque -0.248 -1.712e-02 -0.338 -1.718 -0.108 -1.640 1.188e-03 0.342 -0.009 3.011 ... 10.192 486.360 14.983 -14.350 151.037 6.579 -2.652 -76.869 12.281 -66.087
5673 bending_moment_a1 3.874 -1.704e-01 -2.119 20.828 -0.324 13.227 -2.564e-02 3.424 6.203 29.127 ... -1080.442 1796.585 -1178.649 -15.311 121.344 -797.271 2.236 3093.695 -74.858 1463.576
bending_moment_a2 7.571 -1.505e-01 4.920 98.786 0.107 68.431 -1.098e-01 -1.673 -14.352 -259.623 ... -1314.865 4576.052 448.433 -171.223 1841.507 824.729 -38.126 -4667.893 244.248 -2400.134
bending_moment_b1 -3.751 1.467e-01 -3.097 -19.496 -0.143 -11.909 3.264e-02 -4.427 -8.789 -33.298 ... 579.107 -3532.167 825.902 71.978 -609.247 650.375 4.871 -2487.016 29.208 -1066.517
bending_moment_b2 -4.887 7.709e-01 -5.511 -64.277 -0.708 -45.138 4.117e-02 4.519 15.583 177.852 ... 1220.512 -2166.852 -139.431 90.474 -996.507 -521.445 20.893 3043.982 -150.282 1542.757
shear1 1.530 -6.362e-02 0.196 8.092 -0.036 5.044 -1.169e-02 1.575 3.008 12.527 ... -333.013 1069.293 -402.243 -17.516 146.604 -290.492 -0.529 1119.853 -20.882 507.701
shear2 2.500 -1.849e-01 2.093 32.721 0.164 22.789 -3.028e-02 -1.243 -6.007 -87.786 ... -508.761 1353.064 117.964 -52.513 569.490 270.130 -11.843 -1547.502 79.168 -791.200
axial 1.087 -5.310e-01 6.834 -0.771 0.603 -0.734 3.275e-02 -8.155 -14.764 40.010 ... -1066.870 919.347 -107.465 -59.717 778.357 357.510 -1.987 -2290.304 58.945 -969.822
torque 0.051 -3.749e-02 -0.309 2.623 -0.036 1.727 7.360e-04 -0.236 -1.174 -12.071 ... -40.913 -357.196 -5.310 9.919 -82.996 11.710 1.341 -37.390 -3.730 -0.301

6616 rows × 33 columns

cbush_force
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID Item
3736 fx -2.840 -0.740 1.768 -46.229 1.189 -26.766 -0.046 -8.746 -4.972 81.300 ... 393.928 -1072.844 286.057 -514.816 -193.791 -42.189 88.025 490.182 93.169 262.898
fy 3.374 0.809 0.580 46.109 -0.300 28.257 0.032 7.206 5.679 -82.508 ... -315.874 1119.018 -206.185 438.919 199.036 68.433 -66.234 -527.738 -91.114 -277.767
fz -0.617 -8.572 43.047 -10.336 -7.485 -17.494 0.185 -31.983 -51.687 67.785 ... -285.425 -751.421 11.519 67.315 -188.785 78.174 -54.882 -631.519 -35.506 -183.888
mx -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 0.000 ... 0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 0.000 -0.000 0.000
my 0.000 -0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 -0.000 -0.000 ... -0.000 0.000 -0.000 0.000 0.000 0.000 0.000 -0.000 0.000 -0.000
mz -0.000 -0.000 0.000 0.000 -0.000 0.000 0.000 0.000 0.000 -0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 -0.000 -0.000 0.000 -0.000
4575 fx -4.615 3.233 -40.728 -51.247 1.933 -29.247 -0.015 10.464 17.410 90.049 ... -65.030 -1095.469 -88.056 146.891 -58.260 -16.733 -58.451 -140.014 -15.888 -15.923
fy 4.700 -4.325 45.481 50.621 0.536 31.404 0.064 -12.966 -24.141 -91.806 ... 129.430 1193.951 125.585 -108.001 93.591 31.062 41.832 56.625 20.402 -19.499
fz -2.075 -8.342 38.919 -29.978 -4.384 -27.389 0.167 -32.009 -51.189 100.340 ... -206.343 -1215.355 9.171 -5.366 -254.791 19.716 -75.929 -479.696 -38.375 -139.608
mx -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 -0.000 ... 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 0.000
my 0.000 0.000 0.000 0.000 -0.000 0.000 0.000 0.000 0.000 -0.000 ... 0.000 0.000 0.000 -0.000 0.000 0.000 0.000 -0.000 0.000 -0.000
mz -0.000 0.000 -0.000 0.000 -0.000 0.000 0.000 0.000 0.000 -0.000 ... -0.000 0.000 -0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 0.000
4576 fx -2.247 1.848 -26.540 -17.940 0.093 -13.830 -0.006 6.068 9.472 35.136 ... -49.047 -533.915 -79.183 169.223 34.724 -23.188 -45.043 5.981 -27.096 -5.814
fy 2.057 -1.814 26.044 24.129 -2.022 16.564 0.030 -4.605 -10.738 -49.552 ... 165.480 381.053 47.227 -113.319 -24.250 -53.492 35.471 423.088 14.753 106.628
fz -2.549 -9.968 45.415 -36.374 -4.519 -34.071 0.204 -38.398 -61.179 125.581 ... -373.693 -1540.113 -16.216 73.278 -325.309 79.769 -81.809 -779.614 -34.205 -212.688
mx -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 0.000 ... 0.000 -0.000 -0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 0.000
my -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 0.000
mz -0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 0.000 -0.000 ... 0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000 0.000 -0.000 0.000
4577 fx -1.240 1.269 -13.710 -7.363 0.241 -7.121 -0.026 3.880 6.272 14.665 ... -18.743 -239.325 -39.057 70.519 38.673 -30.699 -19.362 124.481 -11.337 42.888
fy 1.229 -1.329 14.292 10.720 -0.881 8.623 0.020 -4.856 -8.030 -26.645 ... 82.012 -64.282 -42.989 -70.577 -65.170 -77.781 23.042 436.958 11.037 114.356
fz -2.808 -10.629 45.602 -39.093 -6.064 -38.777 0.214 -41.904 -65.485 142.667 ... -491.891 -1834.910 -1.304 74.157 -369.530 145.997 -57.207 -989.443 -9.558 -243.333
mx -0.000 0.000 -0.000 0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 ... 0.000 0.000 -0.000 0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000
my 0.000 0.000 -0.000 0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 ... 0.000 0.000 -0.000 0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000
mz -0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 ... 0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000 0.000 0.000 0.000
4578 fx -0.755 0.248 -3.209 -7.681 2.184 -5.202 -0.019 0.035 -0.236 12.252 ... 31.103 -456.721 -47.699 34.076 -26.907 -71.597 -5.929 396.100 1.227 137.669
fy 0.763 -0.516 4.834 9.350 -1.765 6.775 0.017 -2.286 -3.628 -24.866 ... -7.259 -265.697 -254.456 -22.488 -69.220 -221.294 6.878 969.605 -4.282 243.613
fz -3.211 -10.575 43.289 -43.712 -7.176 -43.507 0.209 -42.639 -65.640 161.256 ... -609.264 -2189.442 9.400 59.749 -430.964 206.684 -32.809 -1185.212 15.707 -272.111
mx -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.000 0.000 -0.000 ... 0.000 -0.000 -0.000 0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000
my -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 -0.000 ... 0.000 0.000 0.000 0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000
mz -0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 ... -0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000 0.000 0.000 0.000
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5637 fx 49.162 51.177 -248.014 425.160 -12.913 268.884 -1.781 133.765 343.959 -572.803 ... -410.472 -463.618 5454.213 128.519 -143.925 3830.929 8.627 -15633.250 -114.476 -3649.778
fy 54.530 111.966 -539.890 447.818 -36.786 280.238 -3.555 317.564 741.795 -461.717 ... -752.865 3026.821 7008.661 81.345 547.870 4861.486 16.281 -19884.789 -157.159 -4674.805
fz -73.578 -151.078 728.482 -604.248 49.636 -378.129 4.797 -428.494 -1000.915 623.002 ... 1015.853 -4084.136 -9456.893 -109.759 -739.250 -6559.677 -21.969 26830.850 212.057 6307.785
mx -0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 ... -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 0.000
my -0.000 0.000 -0.000 -0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 ... -0.000 -0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.000
mz -0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 0.000 -0.000 ... -0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.000
5638 fx -83.782 -49.658 344.856 -934.568 -9.082 -672.234 3.848 -157.479 -255.458 2072.417 ... -4721.764 25538.203 334.886 -730.157 5476.981 -224.659 -62.828 1499.378 556.397 594.434
fy -36.551 -41.543 280.189 -428.042 0.283 -306.261 1.748 -137.416 -222.547 915.213 ... -4287.155 21782.676 -1443.226 -1572.463 5194.899 -1291.968 247.753 4579.679 64.200 1903.822
fz -113.049 -67.004 465.320 -1261.026 -12.255 -907.055 5.192 -212.489 -344.693 2796.343 ... -6371.148 34459.086 451.867 -985.212 7390.175 -303.135 -84.775 2023.133 750.755 802.079
mx 0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 0.000 -0.000 ... -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.000 -0.000
my -0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 ... -0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000
mz -0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.000 0.000 -0.000 0.000 ... 0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 -0.000 0.000 -0.000
5639 fx -81.377 51.930 -326.802 -793.303 -23.290 -578.855 2.817 186.245 311.800 1920.247 ... -2.596 -27421.629 1257.755 530.293 -8325.014 4120.024 77.170 -19116.590 368.111 -7227.045
fy 34.523 -44.128 286.236 308.910 11.699 227.512 -0.878 -152.454 -255.834 -786.886 ... 307.377 22879.516 664.951 509.497 6444.627 -2371.999 -365.816 12806.220 94.586 4692.204
fz -109.803 70.070 -440.959 -1070.416 -31.425 -781.058 3.800 251.304 420.717 2591.019 ... -3.503 -37000.422 1697.108 715.532 -11233.067 5559.211 104.126 -25794.305 496.698 -9751.562
mx -0.000 0.000 -0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 0.000 ... -0.000 -0.000 0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 -0.000
my -0.000 0.000 -0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 0.000 ... -0.000 -0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000
mz 0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 -0.000 ... 0.000 -0.000 0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000
5640 fx 20.780 -39.010 206.631 286.640 2.707 176.553 -0.478 -95.203 -278.874 -875.002 ... -249.303 -7951.638 2744.969 322.568 -1054.838 3240.595 34.088 -14998.981 -126.954 -4217.740
fy -24.990 100.678 -547.581 -343.526 15.780 -211.440 1.334 299.794 708.537 1114.929 ... 1048.101 -4288.459 -3900.156 -0.429 -4419.413 -3765.691 -10.749 17141.201 127.006 4660.953
fz -33.720 135.846 -738.859 -463.525 21.292 -285.299 1.800 404.517 956.040 1504.391 ... 1414.219 -5786.483 -5262.540 -0.578 -5963.182 -5081.104 -14.503 23128.883 171.372 6289.095
mx -0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 -0.000 0.000 ... -0.000 0.000 -0.000 -0.000 0.000 -0.000 0.000 0.000 0.000 0.000
my -0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 ... 0.000 0.000 0.000 -0.000 0.000 0.000 -0.000 0.000 -0.000 0.000
mz -0.000 0.000 -0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 0.000 ... -0.000 -0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 0.000
5641 fx 21.234 37.500 -214.067 293.422 0.372 181.048 -0.318 159.321 234.834 -796.708 ... -1121.195 9857.283 3603.727 -485.792 1773.707 3229.751 21.581 -14775.447 167.911 -4165.658
fy 24.829 98.887 -556.398 344.303 19.430 212.598 0.389 375.824 656.316 -867.362 ... -577.016 -2028.771 3628.043 -193.977 -3566.988 3906.759 55.263 -18164.920 175.573 -5279.969
fz 33.502 133.430 -750.757 464.574 26.218 286.862 0.525 507.105 885.577 -1170.344 ... -778.577 -2737.451 4895.374 -261.737 -4812.991 5271.450 74.567 -24510.203 236.903 -7124.343
mx 0.000 -0.000 0.000 0.000 0.000 0.000 0.000 -0.000 -0.000 -0.000 ... 0.000 0.000 0.000 -0.000 0.000 0.000 0.000 -0.000 0.000 -0.000
my -0.000 0.000 -0.000 -0.000 -0.000 -0.000 0.000 0.000 0.000 0.000 ... 0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 0.000 0.000 0.000
mz -0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 ... -0.000 0.000 -0.000 -0.000 0.000 -0.000 -0.000 0.000 0.000 0.000

624 rows × 33 columns

cquad4_force
Mode Item 1 2 3 4 5 6 7 8 9 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.35851270500045 9.507602892871455 15.666300764341436 20.23716253374651 20.30596456170434 20.55485257248645 21.49972611068191 21.70624716254471 21.724825082335045 ... 80.07579703514831 86.4868740863594 88.16751565117606 88.47650123741167 89.9229257686733 94.28966669274277 94.36776759853447 96.0439300447073 98.70190395729915 98.89279564317114
Eigenvalue 2758.149169921875 3568.63232421875 9689.3056640625 16168.099609375 16278.22265625 16679.708984375 18248.43359375 18600.697265625 18632.55078125 ... 253140.875 295297.75 306885.90625 309040.65625 319227.71875 350984.5 351566.1875 364166.15625 384601.34375 386090.4375
Radians 52.518084217932724 59.73803080298806 98.43427078036643 127.15384229104127 127.58613818221008 129.14994767468937 135.08676320702187 136.3843732457095 136.5011017583741 ... 503.1310713919386 543.4130565233044 553.9728389099956 555.9142526055615 565.0024059683286 592.4394483827018 592.9301708464496 603.4618101006889 620.1623527351527 621.3617605710863
ElementID NodeID
4670 CEN mx -16.088 4.299 6.971e-02 -29.002 -4.571e-01 -186.938 -603.215 47.768 -107.817 ... 3.552 -10.621 3.549 -0.028 0.374 1.788 -4.315e-01 -6.105 6.283e-01 -0.340
CEN my -88.183 73.038 1.312e+00 -50.877 -1.207e+00 -324.953 -149.852 87.416 12.643 ... 19.560 72.406 36.207 -1.032 52.990 23.808 -3.855e+00 -98.772 4.841e+00 -36.233
CEN mxy -35.416 -22.025 6.320e-02 -20.037 -2.038e-01 -127.819 3.770 58.400 -24.900 ... -9.564 5.375 -16.705 0.338 -0.174 -11.625 -4.458e-02 45.932 -1.926e-01 13.473
CEN bmx -2.664 -9.183 -1.221e+00 -29.954 -9.126e-01 -189.687 -7.586 53.520 56.479 ... 2.737 -14.828 2.042 0.111 -2.442 2.162 4.964e-02 -9.309 3.261e-02 -4.001
CEN bmy -3.037 -9.879 -1.313e+00 -30.303 -9.188e-01 -192.162 -20.070 80.239 42.297 ... 2.539 -15.439 1.955 0.126 -2.102 2.172 1.985e-02 -9.370 6.778e-02 -4.156
CEN bmxy -0.358 0.050 3.042e-03 -0.291 -1.361e-03 -1.874 -1.445 2.023 -3.839 ... 0.013 -0.050 -0.019 0.002 -0.013 -0.021 3.219e-04 0.096 -1.092e-03 0.028
CEN tx -1.359 -0.059 -5.548e-02 -15.393 -1.850e-01 -97.674 18.589 -2.787 28.395 ... 1.073 -0.216 1.152 0.034 -0.193 0.950 2.707e-02 -4.109 -3.429e-02 -1.962
CEN ty 0.078 -0.845 1.623e-01 -7.119 3.640e-02 -45.621 -7.405 21.384 -23.049 ... 0.015 -2.778 -0.444 0.124 -2.299 -0.534 6.097e-02 2.616 -1.224e-01 1.392
4670 mx -10.939 -8.192 8.685e-01 -45.225 -4.504e-01 -288.633 -1489.487 -16.358 -217.844 ... 6.022 -21.511 7.653 0.925 0.722 5.513 -1.434e+00 -22.443 1.513e+00 -6.056
4670 my -163.049 -89.888 -8.778e-01 -74.092 -2.083e+00 -475.452 -419.386 134.147 129.931 ... 35.554 73.426 56.108 -2.229 56.483 36.101 -3.109e+00 -146.387 4.478e+00 -49.037
4670 mxy -34.993 -20.796 6.713e-02 -19.673 -1.982e-01 -125.508 17.081 58.929 -24.235 ... -9.701 5.510 -16.889 0.334 -0.202 -11.754 -3.641e-02 46.457 -2.017e-01 13.631
4670 bmx -0.892 -9.041 -1.218e+00 -42.937 -1.004e+00 -273.216 -2.317 66.210 13.105 ... 4.885 -14.733 5.228 0.072 -1.925 4.002 6.460e-02 -16.026 3.136e-02 -5.867
4670 bmy -3.528 -6.936 -9.190e-01 -31.125 -9.018e-01 -197.643 -110.551 50.233 -87.744 ... 2.563 -18.962 1.795 0.139 -4.649 2.136 1.424e-01 -9.097 -5.217e-02 -4.058
4670 bmxy -0.378 0.029 4.135e-04 -0.117 -2.825e-04 -0.750 -0.921 2.054 -2.423 ... -0.015 -0.028 -0.059 0.003 -0.003 -0.044 -6.753e-04 0.182 -2.908e-04 0.051
4670 tx -1.359 -0.059 -5.548e-02 -15.393 -1.850e-01 -97.674 18.589 -2.787 28.395 ... 1.073 -0.216 1.152 0.034 -0.193 0.950 2.707e-02 -4.109 -3.429e-02 -1.962
4670 ty 0.078 -0.845 1.623e-01 -7.119 3.640e-02 -45.621 -7.405 21.384 -23.049 ... 0.015 -2.778 -0.444 0.124 -2.299 -0.534 6.097e-02 2.616 -1.224e-01 1.392
4671 mx -10.933 -8.178 8.687e-01 -45.223 -4.504e-01 -288.620 -1489.464 -16.362 -217.854 ... 6.021 -21.511 7.651 0.925 0.722 5.512 -1.434e+00 -22.439 1.513e+00 -6.055
4671 my -13.316 235.961 3.502e+00 -27.667 -3.309e-01 -174.488 119.380 40.663 -104.682 ... 3.566 71.383 16.307 0.166 49.498 11.517 -4.601e+00 -51.162 5.204e+00 -23.432
4671 mxy -35.974 -22.930 3.845e-02 -19.977 -2.097e-01 -127.479 13.553 59.542 -22.698 ... -9.491 5.523 -16.628 0.318 -0.156 -11.593 -2.663e-02 45.833 -2.065e-01 13.464
4671 bmx -0.892 -9.041 -1.218e+00 -42.937 -1.004e+00 -273.216 -2.310 66.212 13.116 ... 4.885 -14.732 5.228 0.072 -1.925 4.002 6.459e-02 -16.026 3.137e-02 -5.867
4671 bmy -2.546 -12.823 -1.706e+00 -29.485 -9.357e-01 -186.709 70.412 110.250 172.324 ... 2.516 -11.916 2.117 0.113 0.446 2.209 -1.027e-01 -9.645 1.877e-01 -4.255
4671 bmxy -0.384 0.068 5.569e-03 -0.128 -6.048e-05 -0.822 -2.106 1.661 -4.126 ... -0.015 -0.074 -0.061 0.003 -0.037 -0.045 9.297e-04 0.186 -1.862e-03 0.052
4671 tx -1.359 -0.059 -5.548e-02 -15.393 -1.850e-01 -97.674 18.589 -2.787 28.395 ... 1.073 -0.216 1.152 0.034 -0.193 0.950 2.707e-02 -4.109 -3.429e-02 -1.962
4671 ty 0.078 -0.845 1.623e-01 -7.119 3.640e-02 -45.621 -7.405 21.384 -23.049 ... 0.015 -2.778 -0.444 0.124 -2.299 -0.534 6.097e-02 2.616 -1.224e-01 1.392
4674 mx -21.143 16.562 -7.145e-01 -13.074 -4.636e-01 -87.099 266.893 110.724 0.203 ... 1.127 0.070 -0.481 -0.963 0.032 -1.869 5.523e-01 9.934 -2.407e-01 5.271
4674 my -17.340 227.210 3.384e+00 -28.909 -3.780e-01 -182.539 105.203 43.197 -98.342 ... 4.425 71.441 17.375 0.101 49.686 12.176 -4.560e+00 -53.715 5.184e+00 -24.118
4674 mxy -35.814 -23.195 5.985e-02 -20.388 -2.092e-01 -130.052 -9.236 57.870 -25.580 ... -9.433 5.242 -16.529 0.343 -0.148 -11.501 -5.277e-02 45.428 -1.835e-01 13.321
4674 bmx -4.403 -9.323 -1.225e+00 -17.207 -8.230e-01 -107.682 -12.759 41.062 99.062 ... 0.629 -14.921 -1.087 0.149 -2.950 0.356 3.497e-02 -2.714 3.382e-02 -2.170
4674 bmy -2.573 -12.665 -1.685e+00 -29.524 -9.348e-01 -186.974 65.548 108.633 165.351 ... 2.517 -12.106 2.107 0.114 0.309 2.206 -9.611e-02 -9.628 1.813e-01 -4.249
4674 bmxy -0.338 0.070 5.532e-03 -0.462 -2.425e-03 -2.977 -1.938 1.999 -5.200 ... 0.041 -0.071 0.021 0.002 -0.022 0.003 1.272e-03 0.012 -1.852e-03 0.004
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4757 4783 mxy -31.271 -19.668 -8.401e-02 5.348 1.492e-01 32.073 34.216 14.677 -12.580 ... 2.446 10.287 4.439 -0.554 6.576 2.705 -1.956e-01 -10.752 4.575e-01 -3.907
4783 bmx 0.500 -11.062 -1.872e-02 3.006 2.538e-02 19.305 5.262 1.870 -18.221 ... -1.223 2.035 -1.199 -0.053 1.379 -0.663 -7.218e-02 2.315 1.015e-01 0.436
4783 bmy -28.893 -38.137 -2.123e-01 3.596 2.565e-02 21.675 8.080 -4.258 1.639 ... -0.154 -1.273 1.059 -0.029 1.373 1.077 -2.056e-01 -4.743 2.934e-01 -1.741
4783 bmxy -0.247 0.824 4.673e-03 -0.003 -5.033e-04 -0.013 -0.230 0.269 -0.273 ... -0.080 0.030 -0.167 0.003 0.015 -0.110 -2.732e-03 0.425 1.975e-03 0.109
4783 tx -18.875 -20.105 -8.804e-02 1.690 -1.164e-03 10.319 -2.478 5.951 -7.828 ... -1.793 -1.240 -3.321 0.085 -0.974 -2.108 3.881e-02 8.108 -8.111e-02 2.232
4783 ty 11.037 28.188 9.798e-02 0.929 -8.697e-03 6.668 -3.198 -7.155 9.551 ... -2.192 1.785 -3.206 -0.004 1.057 -1.967 -5.582e-02 7.324 5.490e-02 1.845
4771 mx -41.074 172.091 1.064e+00 -4.664 -2.443e-01 -30.595 -10.668 155.950 -183.653 ... -0.829 6.260 -1.958 0.195 8.391 -1.345 -9.970e-01 4.431 1.107e+00 0.114
4771 my -76.876 -91.002 -4.028e-01 -4.428 2.270e-03 -32.129 4.183 36.880 -28.601 ... 5.933 1.610 8.367 -0.258 -0.306 4.306 2.155e-01 -14.746 -1.668e-01 -2.940
4771 mxy -27.436 -15.481 -6.264e-02 5.521 1.512e-01 33.342 34.735 16.124 -14.054 ... 2.310 10.489 4.220 -0.555 6.681 2.572 -2.012e-01 -10.271 4.636e-01 -3.794
4771 bmx 0.511 -11.049 -1.865e-02 3.005 2.536e-02 19.297 5.258 1.868 -18.219 ... -1.223 2.036 -1.200 -0.053 1.379 -0.664 -7.214e-02 2.318 1.015e-01 0.437
4771 bmy 19.867 21.334 8.537e-02 -2.585 -4.747e-02 -15.309 -11.650 -10.143 15.039 ... -2.231 4.127 -3.384 -0.043 1.919 -2.193 -6.266e-02 8.235 6.106e-02 2.047
4771 bmxy -0.967 -0.054 2.786e-04 0.088 5.759e-04 0.533 0.062 0.355 -0.471 ... -0.049 -0.050 -0.101 0.003 0.007 -0.062 -4.841e-03 0.234 5.404e-03 0.053
4771 tx -18.875 -20.105 -8.804e-02 1.690 -1.164e-03 10.319 -2.478 5.951 -7.828 ... -1.793 -1.240 -3.321 0.085 -0.974 -2.108 3.881e-02 8.108 -8.111e-02 2.232
4771 ty 11.037 28.188 9.798e-02 0.929 -8.697e-03 6.668 -3.198 -7.155 9.551 ... -2.192 1.785 -3.206 -0.004 1.057 -1.967 -5.582e-02 7.324 5.490e-02 1.845
4774 mx 135.392 -619.010 -2.796e+00 -1.564 1.704e-02 -5.020 6.183 87.942 -37.601 ... 4.385 -43.228 -2.125 1.280 -44.739 -2.924 3.587e+00 16.870 -4.872e+00 12.102
4774 my -79.810 -94.228 -4.193e-01 -4.561 7.967e-04 -33.100 3.785 35.769 -27.467 ... 6.038 1.454 8.535 -0.256 -0.388 4.407 2.199e-01 -15.114 -1.716e-01 -3.026
4774 mxy -28.242 -11.623 -4.381e-02 5.508 1.499e-01 33.233 34.660 16.468 -14.775 ... 2.283 10.730 4.218 -0.560 6.938 2.578 -2.233e-01 -10.325 4.924e-01 -3.851
4774 bmx -0.709 -19.203 -1.495e-01 1.474 -3.252e-03 9.604 -0.451 -11.302 15.894 ... -2.390 -1.962 -3.464 0.091 -1.102 -2.076 3.690e-02 7.910 -7.946e-02 2.301
4774 bmy 20.418 22.006 8.873e-02 -2.655 -4.829e-02 -15.727 -11.874 -10.210 15.191 ... -2.255 4.188 -3.435 -0.043 1.925 -2.230 -6.105e-02 8.382 5.843e-02 2.090
4774 bmxy -0.969 -0.025 8.591e-04 0.097 7.260e-04 0.585 0.092 0.420 -0.637 ... -0.043 -0.031 -0.089 0.002 0.018 -0.055 -5.391e-03 0.205 6.314e-03 0.043
4774 tx -18.875 -20.105 -8.804e-02 1.690 -1.164e-03 10.319 -2.478 5.951 -7.828 ... -1.793 -1.240 -3.321 0.085 -0.974 -2.108 3.881e-02 8.108 -8.111e-02 2.232
4774 ty 11.037 28.188 9.798e-02 0.929 -8.697e-03 6.668 -3.198 -7.155 9.551 ... -2.192 1.785 -3.206 -0.004 1.057 -1.967 -5.582e-02 7.324 5.490e-02 1.845
4779 mx 135.450 -618.946 -2.795e+00 -1.561 1.707e-02 -5.001 6.190 87.964 -37.623 ... 4.383 -43.225 -2.129 1.280 -44.737 -2.926 3.586e+00 16.877 -4.872e+00 12.104
4779 my 185.883 195.841 1.061e+00 7.450 1.345e-01 54.794 39.783 136.039 -129.622 ... -3.415 15.444 -6.673 -0.360 6.878 -4.774 -1.636e-01 18.232 2.517e-01 4.744
4779 mxy -32.164 -15.905 -6.566e-02 5.331 1.480e-01 31.936 34.129 14.988 -13.267 ... 2.423 10.523 4.443 -0.559 6.831 2.714 -2.177e-01 -10.818 4.862e-01 -3.966
4779 bmx -0.720 -19.216 -1.495e-01 1.475 -3.236e-03 9.613 -0.447 -11.301 15.891 ... -2.390 -1.963 -3.463 0.091 -1.102 -2.075 3.687e-02 7.907 -7.941e-02 2.300
4779 bmy -29.445 -38.809 -2.157e-01 3.666 2.647e-02 22.093 8.303 -4.192 1.488 ... -0.131 -1.334 1.109 -0.028 1.366 1.114 -2.072e-01 -4.890 2.960e-01 -1.784
4779 bmxy -0.233 0.873 5.352e-03 0.003 -3.776e-04 0.027 -0.205 0.331 -0.435 ... -0.075 0.050 -0.156 0.002 0.027 -0.104 -3.233e-03 0.401 2.808e-03 0.100
4779 tx -18.875 -20.105 -8.804e-02 1.690 -1.164e-03 10.319 -2.478 5.951 -7.828 ... -1.793 -1.240 -3.321 0.085 -0.974 -2.108 3.881e-02 8.108 -8.111e-02 2.232
4779 ty 11.037 28.188 9.798e-02 0.929 -8.697e-03 6.668 -3.198 -7.155 9.551 ... -2.192 1.785 -3.206 -0.004 1.057 -1.967 -5.582e-02 7.324 5.490e-02 1.845

3520 rows × 34 columns

cquad4_stress
Mode Item 1 2 3 4 5 6 7 8 9 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.35851270500045 9.507602892871455 15.666300764341436 20.23716253374651 20.30596456170434 20.55485257248645 21.49972611068191 21.70624716254471 21.724825082335045 ... 80.07579703514831 86.4868740863594 88.16751565117606 88.47650123741167 89.9229257686733 94.28966669274277 94.36776759853447 96.0439300447073 98.70190395729915 98.89279564317114
Eigenvalue 2758.149169921875 3568.63232421875 9689.3056640625 16168.099609375 16278.22265625 16679.708984375 18248.43359375 18600.697265625 18632.55078125 ... 253140.875 295297.75 306885.90625 309040.65625 319227.71875 350984.5 351566.1875 364166.15625 384601.34375 386090.4375
Radians 52.518084217932724 59.73803080298806 98.43427078036643 127.15384229104127 127.58613818221008 129.14994767468937 135.08676320702187 136.3843732457095 136.5011017583741 ... 503.1310713919386 543.4130565233044 553.9728389099956 555.9142526055615 565.0024059683286 592.4394483827018 592.9301708464496 603.4618101006889 620.1623527351527 621.3617605710863
ElementID NodeID Location
1 CEN Top fiber_distance 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 ... 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400
Top oxx 63.246 72.309 2933.215 259.007 -84.326 133.789 1.853 128.294 785.568 ... -25690.250 45002.930 -18276.367 523.087 -12437.629 -9954.811 107.538 39103.918 -75.148 16.039
Top oyy 62.859 71.048 2875.602 253.686 -82.042 133.147 1.833 123.608 772.433 ... -25120.783 44058.816 -17823.686 540.734 -12238.873 -9691.581 103.338 38049.105 -81.509 -72.922
Top txy -1.035 -0.187 10.977 -5.745 2.516 -1.820 0.009 4.870 -1.962 ... 139.871 365.614 166.092 6.939 0.937 132.145 -0.527 -600.035 -2.169 -147.072
Top angle -39.698 -8.263 10.430 -32.575 57.207 -40.000 20.560 32.153 -8.315 ... 76.919 18.879 71.864 70.908 89.730 67.442 -7.038 -24.343 -17.147 -36.586
Top omax 64.105 72.336 2935.236 262.677 -80.421 135.316 1.856 131.356 785.854 ... -25088.283 45127.957 -17769.283 543.136 -12238.869 -9636.689 107.603 39375.387 -74.478 125.210
Top omin 62.000 71.021 2873.582 250.015 -85.946 131.620 1.830 120.547 772.147 ... -25722.750 43933.789 -18330.770 520.686 -12437.634 -10009.702 103.273 37777.641 -82.178 -182.093
Top von_mises 63.079 71.688 2904.899 256.581 83.321 133.506 1.843 126.299 779.091 ... 25411.457 44542.879 18056.574 532.266 12339.452 9828.506 105.505 38601.320 78.612 267.647
Bottom fiber_distance -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 ... -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400
Bottom oxx -11.387 -81.266 -2973.126 -64.880 455.379 -23.042 -1.281 -303.056 -765.731 ... 24883.457 -30238.398 19640.930 2770.839 14873.540 10550.590 -559.928 -42245.016 -439.057 -365.841
Bottom oyy -10.806 -79.652 -2920.277 -61.890 452.198 -22.588 -1.246 -298.652 -751.218 ... 24311.096 -29691.027 19145.287 2742.340 14604.558 10278.191 -551.124 -41174.793 -436.527 -280.720
Bottom txy -0.416 0.171 -13.570 3.687 -1.531 4.150 0.002 2.328 -0.877 ... -112.411 -285.534 -159.191 34.237 19.876 -119.782 -6.275 618.547 -4.636 103.383
Bottom angle -62.460 84.021 -76.409 56.038 -21.954 46.565 86.750 66.701 -86.556 ... -10.722 -66.893 -16.358 33.702 4.203 -20.665 -62.525 65.432 -52.630 56.188
Bottom omax -10.588 -79.634 -2916.996 -59.406 455.996 -18.659 -1.246 -297.649 -751.165 ... 24904.742 -29569.197 19687.654 2793.673 14875.000 10595.769 -547.860 -40892.012 -432.987 -211.480
Bottom omin -11.604 -81.284 -2976.407 -67.364 451.580 -26.972 -1.281 -304.059 -765.784 ... 24289.809 -30360.229 19098.562 2719.506 14603.097 10233.013 -563.191 -42527.793 -442.597 -435.081
Bottom von_mises 11.131 80.472 2947.151 63.759 453.805 23.924 1.264 300.905 758.580 ... 24603.041 29972.543 19399.816 2757.338 14740.930 10419.128 555.684 41733.953 437.871 376.840
1 Top fiber_distance 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 ... 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400 0.400
Top oxx 61.601 69.627 2818.090 248.612 -80.401 130.484 1.796 121.136 756.985 ... -24618.369 43177.641 -17467.213 529.919 -11994.096 -9497.749 101.271 37288.125 -79.879 -71.464
Top oyy 55.320 71.706 2850.860 106.187 -95.016 78.280 1.918 123.303 772.659 ... -24838.457 43704.227 -18023.939 406.594 -12137.408 -10014.802 146.330 39310.965 -79.569 513.430
Top txy -1.035 -0.187 10.977 -5.745 2.516 -1.820 0.009 4.870 -1.962 ... 139.871 365.614 166.092 6.939 0.937 132.145 -0.527 -600.035 -2.169 -147.072
Top angle -9.119 -84.898 73.089 -2.306 9.498 -1.994 85.978 51.271 -82.974 ... 25.903 62.880 15.412 3.210 0.375 13.537 -89.331 -74.661 -47.044 -76.651
Top omax 61.768 71.723 2854.198 248.843 -79.980 130.547 1.919 127.208 772.900 ... -24550.441 43891.484 -17421.426 530.308 -11994.090 -9465.935 146.336 39475.562 -77.549 548.329
Top omin 55.154 69.610 2814.753 105.956 -95.437 78.217 1.796 117.230 756.743 ... -24906.383 42990.383 -18069.725 406.205 -12137.415 -10046.616 101.265 37123.531 -81.898 -106.363
Top von_mises 58.741 70.690 2834.681 216.294 88.724 113.796 1.860 122.524 764.950 ... 24730.334 43447.941 17754.455 480.433 12066.391 9769.228 129.808 38353.672 79.813 608.522
Bottom fiber_distance -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 ... -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400 -0.400
Bottom oxx -10.589 -78.059 -2861.871 -60.652 443.154 -22.136 -1.221 -292.679 -736.194 ... 23824.873 -29097.207 18762.381 2687.493 14312.467 10072.628 -540.101 -40351.297 -427.797 -275.106
Bottom oyy -16.035 -79.929 -2943.220 -169.181 451.588 -88.278 -1.092 -304.247 -747.370 ... 24354.615 -28959.348 19319.707 2577.774 14583.787 10418.475 -497.332 -42217.508 -425.862 -515.166
Bottom txy -0.416 0.171 -13.570 3.687 -1.531 4.150 0.002 2.328 -0.877 ... -112.411 -285.534 -159.191 34.237 19.876 -119.782 -6.275 618.547 -4.636 103.383
Bottom angle -4.346 5.179 -9.225 1.943 -80.022 3.577 89.131 10.963 -4.458 ... -78.502 -51.786 -75.131 15.984 85.832 -72.645 -81.823 16.770 -50.895 20.369
Bottom omax -10.558 -78.044 -2859.667 -60.527 451.857 -21.877 -1.092 -292.228 -736.125 ... 24377.482 -28734.541 19361.973 2697.300 14585.235 10455.908 -496.430 -40164.898 -422.094 -236.721
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5537 5516 Top oyy -7.772 -11.748 93.076 -47.487 10.544 -38.280 0.273 -18.371 -94.962 ... -18286.732 -7043.129 148017.688 150270.906 3727.389 -231121.391 233512.641 -62162.062 -187204.766 178422.000
Top txy 1.250 0.267 -9.693 -0.119 -2.361 0.283 -0.021 -2.087 10.175 ... 6761.086 2958.235 -648.277 20.357 425.973 -1495.034 747.074 3303.126 -916.570 2091.304
Top angle 45.326 2.803 -72.394 -1.983 -47.258 5.475 -72.666 -8.429 19.001 ... 11.230 61.717 -89.597 89.988 83.139 -0.630 89.683 7.299 -0.517 88.804
Top omax -6.536 -6.296 96.152 -44.043 12.726 -35.329 0.279 -4.286 -65.415 ... 15766.913 -5451.424 148022.250 150270.922 3778.643 -95173.180 233516.781 -36372.953 -85590.406 178465.656
Top omin -9.037 -11.761 62.532 -47.491 7.989 -38.307 0.206 -18.680 -98.466 ... -19629.094 -12541.104 55907.703 55013.773 187.114 -231137.844 98526.789 -62585.137 -187213.031 78222.711
Top von_mises 8.082 10.194 84.516 45.864 11.140 36.908 0.251 16.949 86.796 ... 30714.607 10891.760 129463.023 131684.828 3688.647 201207.625 203051.609 54437.898 162329.281 154947.453
Bottom fiber_distance -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 ... -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309
Bottom oxx 9.966 5.768 -87.297 -15.660 -18.265 -7.858 -0.135 -7.992 89.764 ... 75634.469 20782.520 -50846.699 -44737.809 1916.850 79104.234 -88461.680 62360.305 84935.234 -70096.383
Bottom oyy 9.180 8.187 -102.156 -98.385 -23.131 -68.761 0.004 -17.403 82.421 ... 244443.000 7137.102 -126662.555 -121167.359 -1224.295 198574.188 -210291.281 99878.688 184956.062 -166620.906
Bottom txy 0.769 0.509 -7.835 1.422 -1.355 1.176 -0.021 0.967 10.549 ... 2243.163 2866.086 760.509 1484.631 390.547 -1786.010 915.889 3906.458 747.305 523.086
Bottom angle 31.475 78.587 -23.261 0.984 -14.560 1.106 -81.398 5.804 35.405 ... 89.239 11.393 0.575 1.112 6.982 -89.144 0.431 84.118 89.572 0.310
Bottom omax 10.436 8.290 -83.929 -15.636 -17.913 -7.835 0.007 -7.894 97.262 ... 244472.797 21360.066 -50839.074 -44708.980 1964.679 198600.875 -88454.789 100281.117 184961.641 -70093.547
Bottom omin 8.709 5.666 -105.524 -98.409 -23.483 -68.783 -0.138 -17.501 74.923 ... 75604.664 6559.553 -126670.180 -121196.188 -1272.125 79077.547 -210298.172 61957.875 84929.656 -166623.734
Bottom von_mises 9.689 7.338 96.555 91.598 21.253 65.220 0.142 15.181 88.239 ... 216794.219 18951.721 110409.023 106154.844 2824.462 173178.219 182887.094 87646.305 160359.375 144904.547
5515 Top fiber_distance 0.309 0.309 0.309 0.309 0.309 0.309 0.309 0.309 0.309 ... 0.309 0.309 0.309 0.309 0.309 0.309 0.309 0.309 0.309 0.309
Top oxx -7.800 -6.309 65.608 -44.047 10.171 -35.356 0.213 -4.595 -68.919 ... 14424.552 -10949.398 55912.270 55013.781 238.368 -95189.617 98530.922 -36796.023 -85598.680 78266.359
Top oyy -2.961 -2.975 28.937 -15.170 4.925 -12.855 0.077 2.164 -22.122 ... 11840.911 1777.489 20906.279 22169.408 805.968 -52857.914 52999.559 -12889.904 -58870.668 57739.859
Top txy 1.250 0.267 -9.693 -0.119 -2.361 0.283 -0.021 -2.087 10.175 ... 6761.086 2958.235 -648.277 20.357 425.973 -1495.034 747.074 3303.126 -916.570 2091.304
Top angle 76.335 85.451 -13.931 -89.763 -20.998 89.280 -8.414 -74.151 78.249 ... 39.592 77.534 -1.061 0.036 61.837 -87.980 0.940 82.276 -88.038 5.759
Top omax -2.657 -2.954 68.012 -15.170 11.077 -12.851 0.216 2.757 -20.005 ... 20016.123 2431.493 55924.270 55013.793 1034.024 -52805.180 98543.180 -12441.904 -58839.273 78477.266
Top omin -8.104 -6.330 26.532 -44.048 4.019 -35.360 0.074 -5.188 -71.035 ... 6249.339 -11603.402 20894.279 22169.395 10.313 -95242.352 52987.305 -37244.023 -85630.070 57528.961
Top von_mises 7.156 5.486 59.373 38.757 9.713 31.001 0.190 6.987 63.444 ... 17737.303 12990.946 48944.840 47941.391 1028.906 82645.047 85421.750 32841.008 75869.352 70381.438
Bottom fiber_distance -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 ... -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309 -0.309
Bottom oxx 9.966 5.768 -87.297 -15.660 -18.265 -7.858 -0.135 -7.992 89.764 ... 75634.469 20782.520 -50846.699 -44737.809 1916.850 79104.234 -88461.680 62360.305 84935.234 -70096.383
Bottom oyy 4.512 3.799 -45.628 12.561 -7.796 11.127 -0.114 1.593 49.799 ... -1312.446 9070.467 -22057.523 -20766.449 608.554 48012.812 -51202.617 26673.715 58790.070 -53056.406
Bottom txy 0.769 0.509 -7.835 1.422 -1.355 1.176 -0.021 0.967 10.549 ... 2243.163 2866.086 760.509 1484.631 390.547 -1786.010 915.889 3906.458 747.305 523.086
Bottom angle 7.874 13.669 -79.695 87.123 -82.741 86.468 -58.090 84.299 13.915 ... 1.668 13.039 88.488 86.469 15.419 -3.277 88.593 6.175 1.636 88.243
Bottom omax 10.072 5.892 -44.204 12.633 -7.623 11.200 -0.101 1.689 92.377 ... 75699.805 21446.270 -22037.447 -20674.852 2024.566 79206.492 -51180.113 62782.922 84956.578 -53040.363
Bottom omin 4.405 3.675 -88.721 -15.732 -18.437 -7.930 -0.149 -8.089 47.185 ... -1377.783 8406.716 -50866.777 -44829.406 500.838 47910.555 -88484.180 26251.096 58768.730 -70112.422
Bottom von_mises 8.745 5.155 76.835 24.613 16.047 16.648 0.131 9.052 80.007 ... 76398.016 18716.908 44182.621 38862.371 1826.397 69096.039 76942.992 54614.055 75356.445 63326.484

306880 rows × 34 columns

chexa_stress
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID NodeID Item
3684 0 oxx 3.865e-12 6.821e-13 -4.547e-13 -1.137e-12 -1.137e-13 3.183e-12 2.842e-14 -6.821e-13 3.183e-12 -2.638e-11 ... -2.728e-11 5.457e-11 4.411e-11 1.577e-12 1.273e-11 1.054e-10 4.547e-13 -1.933e-10 -1.592e-12 -8.740e-11
oyy 1.478e-12 -4.547e-13 4.547e-13 6.821e-13 0.000e+00 -7.049e-12 3.553e-15 2.274e-13 -9.550e-12 3.456e-11 ... 9.095e-12 -1.055e-10 -1.046e-11 -6.963e-13 9.095e-12 4.536e-11 6.821e-13 -1.896e-10 -2.274e-13 -1.338e-10
ozz -1.478e-12 -2.274e-13 1.819e-12 1.864e-11 0.000e+00 1.228e-11 7.105e-15 2.728e-12 0.000e+00 5.457e-12 ... 3.274e-11 1.455e-11 1.637e-11 -1.677e-12 1.091e-11 -4.297e-11 9.095e-13 2.365e-11 -9.095e-13 7.623e-11
txy -3.268e-13 9.095e-13 1.819e-12 -5.315e-12 -4.263e-14 -1.450e-12 7.105e-15 3.638e-12 3.638e-12 5.912e-12 ... 2.183e-11 -1.164e-10 3.638e-12 0.000e+00 7.276e-12 1.182e-11 4.690e-13 3.274e-11 -3.411e-13 7.276e-12
tyz 5.684e-14 -1.137e-13 1.364e-12 2.274e-13 -8.527e-14 4.547e-13 -1.243e-14 -2.274e-13 -2.274e-12 -4.547e-13 ... -4.093e-12 1.819e-11 -4.547e-13 -7.745e-13 0.000e+00 7.958e-13 -2.274e-13 -4.547e-12 -4.547e-13 -2.274e-13
txz 5.684e-14 2.274e-13 1.819e-12 3.183e-12 -2.274e-13 2.274e-12 7.105e-15 -1.819e-12 -1.819e-12 0.000e+00 ... 3.638e-12 1.455e-11 -5.457e-12 -5.684e-14 7.276e-12 -2.956e-12 -1.819e-12 4.002e-11 -9.095e-13 -6.025e-12
omax 3.910e-12 1.201e-12 4.071e-12 1.917e-11 1.873e-13 1.282e-11 3.108e-14 4.571e-12 5.236e-12 3.514e-11 ... 3.343e-11 1.160e-10 4.539e-11 1.578e-12 2.178e-11 1.077e-10 2.634e-12 3.080e-11 1.304e-14 7.645e-11
omid 1.435e-12 -1.856e-13 -2.412e-13 4.919e-12 1.401e-14 2.878e-12 1.785e-14 1.820e-12 -7.997e-13 5.450e-12 ... 1.899e-11 1.720e-11 1.534e-11 -2.704e-13 1.003e-11 4.314e-11 5.856e-13 -1.616e-10 -3.822e-13 -8.650e-11
omin -1.480e-12 -1.015e-12 -2.011e-12 -5.894e-12 -3.150e-13 -7.280e-12 -9.858e-15 -4.117e-12 -1.080e-11 -2.694e-11 ... -3.787e-11 -1.696e-10 -1.070e-11 -2.104e-12 9.372e-13 -4.304e-11 -1.174e-12 -2.285e-10 -2.359e-12 -1.349e-10
von_mises 4.673e-12 1.939e-12 5.419e-12 2.177e-11 4.419e-13 1.740e-11 3.619e-14 7.690e-12 1.403e-11 5.378e-11 ... 6.529e-11 2.512e-10 4.861e-11 3.189e-12 1.810e-11 1.310e-10 3.301e-12 2.331e-10 2.202e-12 1.918e-10
55 oxx -1.577e-12 -1.535e-12 6.821e-12 3.740e-11 -8.527e-14 -1.114e-11 6.040e-14 -2.387e-12 -1.342e-11 6.366e-12 ... -6.094e-11 -1.692e-10 5.048e-11 7.745e-13 -1.273e-11 -3.246e-11 1.137e-13 -1.978e-11 0.000e+00 -1.227e-10
oyy -9.663e-13 -7.958e-13 3.865e-12 7.049e-12 2.842e-14 3.070e-12 -2.132e-14 -7.958e-12 -1.455e-11 1.273e-11 ... 3.774e-11 -1.528e-10 1.478e-11 4.846e-12 -9.095e-12 -2.501e-11 -7.958e-13 -1.462e-10 3.411e-13 2.414e-11
ozz -8.384e-13 -1.762e-12 8.299e-12 1.063e-11 -2.700e-13 -1.558e-11 2.309e-14 -6.594e-12 -6.594e-12 -6.253e-11 ... -5.002e-12 -7.640e-11 1.032e-10 2.327e-12 6.366e-12 2.987e-11 9.095e-13 -3.993e-10 -1.137e-12 -2.980e-11
txy -4.263e-13 9.095e-13 -3.638e-12 -5.173e-12 1.421e-14 -6.537e-12 2.842e-14 5.457e-12 0.000e+00 2.638e-11 ... -7.276e-12 -1.164e-10 1.273e-11 -9.095e-13 -1.273e-11 1.819e-11 2.274e-13 -3.638e-11 0.000e+00 0.000e+00
tyz 5.904e-14 1.486e-14 3.569e-12 -4.496e-13 -1.514e-13 4.835e-13 -1.622e-14 -1.314e-12 -4.448e-12 2.933e-13 ... -8.148e-12 4.401e-11 -2.143e-12 -1.788e-12 1.086e-11 -3.935e-12 -7.989e-13 5.831e-12 -1.014e-12 3.987e-12
txz -2.083e-14 -6.529e-13 2.244e-12 -6.709e-12 -2.127e-13 -5.544e-12 1.583e-14 -2.999e-12 3.172e-12 1.138e-11 ... -1.371e-12 2.456e-12 -2.013e-11 -8.497e-13 2.769e-12 -1.149e-11 2.382e-12 3.173e-11 1.292e-12 -3.442e-12
omax -7.159e-13 -1.016e-13 1.031e-11 3.974e-11 1.489e-13 5.920e-12 7.167e-14 2.158e-12 -3.727e-12 3.673e-11 ... 3.972e-11 -2.474e-11 1.104e-10 5.810e-12 1.255e-11 3.286e-11 2.985e-12 -7.882e-12 1.275e-12 2.444e-11
omid -8.698e-13 -1.436e-12 9.257e-12 9.786e-12 -3.493e-14 -9.713e-12 2.763e-14 -7.747e-12 -1.374e-11 -1.558e-11 ... -6.375e-12 -9.094e-11 4.755e-11 2.283e-12 -1.538e-12 -1.260e-11 -5.153e-13 -1.552e-10 1.969e-13 -2.997e-11
omin -1.796e-12 -2.555e-12 -5.832e-13 5.560e-12 -4.408e-13 -1.985e-11 -3.713e-14 -1.135e-11 -1.710e-11 -6.458e-11 ... -6.154e-11 -2.827e-10 1.050e-11 -1.454e-13 -2.648e-11 -4.785e-11 -2.242e-12 -4.022e-10 -2.267e-12 -1.228e-10
von_mises 1.012e-12 2.128e-12 1.041e-11 3.227e-11 5.226e-13 2.249e-11 9.479e-14 1.212e-11 1.205e-11 8.776e-11 ... 8.781e-11 2.320e-10 8.750e-11 5.187e-12 3.423e-11 7.008e-11 4.613e-12 3.451e-10 3.145e-12 1.290e-10
51 oxx 3.453e-12 3.979e-13 -1.137e-12 -2.922e-11 5.684e-14 1.251e-11 3.197e-14 2.046e-12 -2.274e-13 -4.138e-11 ... 4.547e-11 -8.004e-11 1.796e-11 1.563e-12 -8.185e-12 -1.168e-10 0.000e+00 1.569e-10 -1.023e-12 -9.032e-11
oyy 7.958e-13 1.705e-13 -4.093e-12 8.754e-12 8.527e-14 -8.868e-12 1.776e-14 2.046e-12 -6.821e-13 -2.456e-11 ... -3.274e-11 1.201e-10 2.797e-11 1.222e-12 -3.183e-11 4.377e-12 -3.411e-13 4.320e-11 -2.274e-13 -6.168e-11
ozz 1.663e-12 8.527e-14 2.274e-13 2.723e-11 -1.847e-13 4.150e-12 2.665e-15 -1.251e-12 -5.684e-12 -2.387e-11 ... 2.956e-11 -6.366e-11 6.048e-11 -7.176e-13 -9.095e-12 8.623e-11 5.684e-13 -7.230e-11 0.000e+00 8.328e-12
txy 6.899e-14 -1.066e-12 6.915e-13 -1.368e-12 3.089e-14 9.440e-13 -5.351e-15 -1.397e-12 -4.697e-12 -7.050e-12 ... -1.234e-11 -6.904e-11 4.515e-12 2.048e-12 1.422e-11 3.017e-11 2.368e-13 8.251e-11 -4.745e-13 -1.218e-12
tyz 9.278e-14 -3.556e-13 2.800e-12 -2.852e-13 -1.618e-13 5.244e-13 -1.679e-14 -9.524e-13 -4.640e-12 -8.046e-13 ... -1.025e-11 6.060e-11 -1.459e-12 -1.129e-12 4.413e-12 -2.182e-12 -8.646e-13 -7.151e-13 -9.491e-13 2.279e-12
txz -3.204e-14 -6.126e-13 2.052e-12 -1.356e-12 -1.925e-13 -1.079e-12 1.715e-14 7.684e-13 -2.019e-13 4.442e-12 ... -1.031e-12 3.874e-12 -1.301e-11 6.473e-14 1.787e-12 -4.262e-12 6.862e-13 1.740e-11 -2.466e-12 -7.064e-12
omax 3.456e-12 1.399e-12 2.783e-12 2.726e-11 2.473e-13 1.268e-11 4.564e-14 3.740e-12 5.208e-12 -2.026e-11 ... 4.739e-11 1.563e-10 6.434e-11 3.573e-12 -1.149e-13 8.642e-11 1.281e-12 2.011e-10 2.096e-12 8.910e-12
omid 1.672e-12 4.131e-13 -2.294e-12 8.800e-12 4.195e-14 4.044e-12 1.837e-14 6.562e-13 -2.486e-12 -2.487e-11 ... 3.115e-11 -6.592e-11 2.884e-11 1.139e-13 -1.014e-11 1.134e-11 1.028e-13 8.739e-13 -1.189e-14 -6.172e-11
omin 7.840e-13 -1.159e-12 -5.491e-12 -2.930e-11 -3.319e-13 -8.934e-12 -1.160e-14 -1.554e-12 -9.316e-12 -4.468e-11 ... -3.625e-11 -1.140e-10 1.323e-11 -1.619e-12 -3.886e-11 -1.240e-10 -1.156e-12 -7.416e-11 -3.335e-12 -9.087e-11
von_mises 2.356e-12 2.235e-12 7.227e-12 4.996e-11 5.086e-13 1.884e-11 4.959e-14 4.606e-12 1.259e-11 2.248e-11 ... 7.682e-11 2.498e-10 4.537e-11 4.579e-12 3.483e-11 1.847e-10 2.111e-12 2.464e-10 4.742e-12 8.886e-11
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5568 5593 oxx 2.684e-12 -4.547e-13 -9.095e-12 -2.592e-11 -9.663e-13 -1.086e-11 -7.105e-15 -9.095e-12 -1.819e-12 -1.592e-11 ... -1.019e-10 4.657e-10 -3.638e-11 -4.093e-11 -1.237e-10 9.095e-11 -2.558e-12 -4.366e-11 8.185e-12 5.093e-11
oyy -1.931e-12 1.251e-11 -3.001e-11 -2.063e-11 -1.450e-12 -1.218e-11 -1.332e-13 1.864e-11 5.002e-11 1.005e-10 ... -5.530e-10 1.382e-09 -2.110e-10 -2.780e-11 1.637e-10 -2.183e-10 -2.451e-12 5.239e-10 9.322e-12 8.731e-11
ozz -2.984e-12 2.274e-12 -8.185e-12 -5.952e-11 1.137e-13 -3.303e-11 8.171e-14 4.547e-12 2.365e-11 1.146e-10 ... -5.675e-10 1.441e-09 -1.019e-10 -5.633e-11 4.475e-10 -4.729e-11 -2.871e-12 -2.328e-10 3.183e-11 -1.091e-10
txy 1.019e-13 3.859e-13 2.657e-13 1.481e-11 -3.401e-13 2.965e-12 -2.543e-14 3.328e-12 6.831e-12 -1.006e-11 ... 2.791e-11 4.518e-10 8.591e-12 -1.679e-12 5.879e-11 -2.738e-11 1.175e-12 -7.018e-11 1.554e-12 6.248e-12
tyz 5.483e-13 3.287e-12 -1.896e-11 1.095e-11 -1.666e-12 7.857e-12 -8.149e-14 9.470e-12 2.980e-11 -2.198e-11 ... 5.658e-10 -2.556e-10 9.995e-11 2.427e-12 -5.129e-11 4.116e-11 5.419e-13 -4.190e-11 -1.739e-12 -2.480e-12
txz -9.097e-13 -1.659e-12 1.292e-11 1.107e-14 8.598e-13 4.500e-15 4.302e-14 -2.407e-12 -1.506e-11 -2.920e-11 ... -4.904e-11 1.143e-10 -1.736e-10 -1.090e-11 1.169e-10 6.750e-13 -1.821e-12 -2.833e-12 1.823e-11 -5.916e-11
omax 2.827e-12 1.347e-11 9.627e-12 -6.848e-12 1.507e-12 -7.303e-12 1.270e-13 2.351e-11 6.951e-11 1.329e-10 ... 7.561e-12 1.718e-09 1.181e-10 -2.693e-11 4.755e-10 9.342e-11 -7.056e-13 5.346e-10 4.176e-11 8.965e-11
omid -1.711e-12 2.342e-12 -1.448e-11 -3.640e-11 -1.278e-12 -1.307e-11 -2.423e-14 1.076e-12 1.780e-11 9.011e-11 ... -1.010e-10 1.326e-09 -1.515e-10 -3.609e-11 1.729e-10 -3.812e-11 -2.081e-12 -5.187e-11 9.724e-12 6.808e-11
omin -3.346e-12 -1.489e-12 -4.244e-11 -6.282e-11 -2.531e-12 -3.569e-11 -1.614e-13 -1.049e-11 -1.546e-11 -2.386e-11 ... -1.129e-09 2.452e-10 -3.158e-10 -6.204e-11 -1.609e-10 -2.299e-10 -5.093e-12 -2.354e-10 -2.144e-12 -1.286e-10
von_mises 5.539e-12 1.346e-11 4.513e-11 4.850e-11 3.580e-12 2.599e-11 2.498e-13 2.995e-11 7.416e-11 1.404e-10 ... 1.086e-09 1.321e-09 3.794e-10 3.154e-11 5.513e-10 2.816e-10 3.887e-12 6.966e-10 3.934e-11 2.083e-10
5594 oxx 6.555e-12 -1.819e-12 1.091e-11 8.390e-11 2.274e-13 4.388e-11 -9.237e-14 0.000e+00 -7.276e-12 -3.311e-10 ... 4.075e-10 -8.731e-10 -2.619e-10 3.956e-11 -3.783e-10 -1.019e-10 3.524e-12 1.164e-09 -2.819e-11 5.384e-10
oyy 4.595e-12 -9.095e-12 3.456e-11 6.924e-11 8.527e-13 5.718e-11 -6.750e-14 -3.911e-11 -8.185e-11 -2.519e-10 ... 7.276e-10 -2.285e-09 1.528e-10 3.365e-11 -3.747e-10 8.004e-11 4.150e-12 8.440e-10 -3.001e-11 2.692e-10
ozz 3.380e-12 -4.547e-12 1.182e-11 4.241e-11 7.958e-13 3.976e-11 7.105e-14 -1.819e-12 -7.276e-12 -1.774e-10 ... -2.037e-10 -1.834e-09 -1.819e-10 3.109e-11 -4.184e-10 -1.601e-10 3.482e-12 6.694e-10 -2.956e-11 4.075e-10
txy -2.199e-12 -1.364e-12 1.091e-11 -1.876e-11 1.137e-13 -1.165e-11 5.684e-14 -5.457e-12 -7.276e-12 9.004e-11 ... 5.821e-11 3.492e-10 7.276e-11 -2.490e-11 1.746e-10 6.548e-11 -1.648e-12 -6.694e-10 6.821e-12 -1.164e-10
tyz 6.181e-13 2.691e-12 -1.703e-11 1.158e-11 -1.780e-12 8.389e-12 -7.313e-14 8.704e-12 2.823e-11 -2.288e-11 ... 4.681e-10 -2.767e-10 1.057e-10 5.093e-12 -7.499e-11 5.553e-11 1.124e-12 2.552e-11 -2.556e-12 2.972e-12
txz 4.545e-13 6.079e-13 -1.598e-12 -7.263e-12 -4.852e-14 5.250e-15 4.510e-16 3.028e-12 -7.836e-12 -2.921e-11 ... 1.259e-10 -1.189e-10 -2.789e-11 -7.263e-12 -2.854e-11 7.875e-13 -9.116e-13 -3.305e-12 5.158e-14 -5.932e-11
omax 7.983e-12 -1.565e-12 4.670e-11 9.949e-11 2.610e-12 6.600e-11 1.052e-13 2.279e-12 8.356e-12 -1.489e-10 ... 9.420e-10 -7.606e-10 1.920e-10 6.404e-11 -1.791e-10 1.116e-10 6.267e-12 1.693e-09 -2.186e-11 5.986e-10
omid 4.047e-12 -3.299e-12 9.731e-12 5.795e-11 2.235e-13 4.149e-11 -4.489e-14 -1.311e-12 -1.319e-11 -2.209e-10 ... 3.986e-10 -1.768e-09 -1.867e-10 2.879e-11 -4.328e-10 -1.181e-10 2.730e-12 6.700e-10 -2.936e-11 3.924e-10
omin 2.501e-12 -1.060e-11 8.646e-13 3.810e-11 -9.573e-13 3.334e-11 -1.491e-13 -4.190e-11 -9.157e-11 -3.905e-10 ... -4.093e-10 -2.463e-09 -2.963e-10 1.148e-11 -5.595e-10 -1.753e-10 2.159e-12 3.149e-10 -3.655e-11 2.240e-10
von_mises 4.896e-12 8.303e-12 4.211e-11 5.426e-11 3.147e-12 2.945e-11 2.214e-13 4.249e-11 9.108e-11 2.149e-10 ... 1.178e-09 1.482e-09 4.438e-10 4.639e-11 3.355e-10 2.630e-10 3.854e-12 1.239e-09 1.272e-11 3.250e-10
5595 oxx 1.021e-11 -1.819e-12 2.910e-11 1.119e-10 9.095e-13 1.017e-10 -7.105e-14 -1.091e-11 -4.366e-11 -3.220e-10 ... -2.619e-10 -2.503e-09 -8.440e-10 9.663e-11 -1.128e-09 -4.075e-10 1.097e-11 3.318e-09 -7.549e-11 1.091e-09
oyy 2.387e-12 0.000e+00 -1.455e-11 1.000e-11 2.274e-12 2.001e-11 0.000e+00 2.910e-11 0.000e+00 -1.310e-10 ... -4.657e-10 -9.313e-10 -1.164e-10 8.185e-12 -1.746e-10 -1.164e-10 1.478e-12 9.313e-10 -1.091e-11 1.164e-10
ozz 8.843e-12 -1.819e-12 -3.638e-12 1.194e-10 -1.819e-12 9.447e-11 -1.776e-13 -7.276e-12 -5.821e-11 -3.820e-10 ... 4.366e-10 -3.143e-09 -6.694e-10 1.041e-10 -6.548e-10 -2.765e-10 6.850e-12 1.746e-09 -6.366e-11 7.858e-10
txy -3.659e-13 -1.819e-12 1.091e-11 -1.944e-11 2.274e-13 -4.604e-12 1.421e-14 -5.457e-12 -3.638e-12 2.274e-11 ... 8.731e-11 3.492e-10 1.455e-11 -3.752e-12 -8.731e-11 2.183e-11 -6.253e-13 -6.112e-10 1.137e-11 -1.164e-10
tyz -7.674e-13 -2.274e-12 1.273e-11 -9.891e-12 3.411e-13 -2.728e-12 4.974e-14 -7.276e-12 -1.455e-11 1.364e-11 ... -5.821e-11 2.037e-10 -1.601e-10 -1.285e-11 1.164e-10 0.000e+00 -1.393e-12 8.731e-11 1.046e-11 0.000e+00
txz -4.547e-13 -1.608e-12 5.418e-12 -1.455e-11 6.238e-13 -7.277e-12 1.413e-14 -4.065e-12 -1.836e-11 -2.908e-11 ... -1.095e-10 4.346e-13 -1.457e-10 -7.278e-12 8.721e-11 -1.401e-13 -1.819e-12 5.881e-13 1.454e-11 -5.801e-11
omax 1.035e-11 1.691e-12 3.361e-11 1.308e-10 2.359e-12 1.063e-10 1.643e-14 3.102e-11 3.446e-12 -1.279e-10 ... 4.588e-10 -8.399e-10 -6.981e-11 1.094e-10 -1.434e-10 -1.148e-10 1.166e-11 3.465e-09 -6.033e-12 1.115e-09
omid 8.815e-12 -2.472e-13 1.018e-12 1.054e-10 9.796e-13 9.029e-11 -7.365e-14 -4.874e-12 -3.191e-11 -3.115e-10 ... -2.516e-10 -2.574e-09 -6.276e-10 9.328e-11 -6.587e-10 -2.765e-10 6.614e-12 1.753e-09 -5.857e-11 7.758e-10
omin 2.276e-12 -5.082e-12 -2.372e-11 5.066e-12 -1.974e-12 1.962e-11 -1.915e-13 -1.523e-11 -7.340e-11 -3.955e-10 ... -4.983e-10 -3.163e-09 -9.324e-10 6.253e-12 -1.155e-09 -4.091e-10 1.025e-12 7.765e-10 -8.547e-11 1.026e-10
von_mises 7.427e-12 6.041e-12 4.980e-11 1.151e-10 3.834e-12 7.990e-11 1.806e-13 4.203e-11 6.662e-11 2.371e-10 ... 8.607e-10 2.092e-09 7.577e-10 9.612e-11 8.762e-10 2.553e-10 9.214e-12 2.358e-09 6.998e-11 8.926e-10

2250 rows × 33 columns

cquad4_composite_stress
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID Layer Item
3463 1 o11 1.653e+00 -1.336e+01 9.831e+01 -3.457e+01 1.091e+01 -1.487e+01 2.531e-01 -5.527e+01 -7.705e+01 1.094e+02 ... 298.963 -478.466 540.027 -5.842e+02 -306.510 159.360 7.806e+01 -548.718 6.558e+01 -1.424e+02
o22 2.683e+01 -8.991e+00 1.208e+02 3.412e+02 9.045e+00 1.995e+02 3.961e-01 -4.688e-01 -4.120e+01 -5.672e+02 ... -3469.760 8798.746 -1987.453 3.775e+03 1088.025 574.552 -6.638e+02 -5165.128 -7.900e+02 -2.460e+03
t12 -1.071e+01 2.799e+01 -1.993e+02 -6.985e+01 -4.540e+00 -3.400e+01 -6.632e-01 9.785e+01 1.596e+02 -4.861e+00 ... 1207.068 -1911.973 72.094 -7.483e+02 129.985 -477.285 2.087e+02 3220.338 2.484e+02 1.257e+03
t1z -3.346e-02 2.238e-02 -2.830e-01 2.261e-03 -8.003e-02 -1.315e-01 -1.118e-03 1.174e-01 1.051e-01 -1.493e-01 ... -4.154 -8.090 -4.946 3.212e+00 -0.981 -2.215 -8.716e-01 6.843 -2.002e-01 2.757e+00
t2z 9.391e-02 -5.794e-02 6.987e-01 5.875e-02 2.222e-01 3.930e-01 2.321e-03 -3.266e-01 -2.814e-01 4.888e-02 ... 12.397 17.850 12.708 -8.759e+00 2.423 4.912 2.386e+00 -12.872 4.679e-01 -5.417e+00
angle -6.981e+01 4.723e+01 -4.661e+01 -7.980e+01 -3.921e+01 -8.120e+01 -4.808e+01 5.282e+01 4.820e+01 -4.116e-01 ... 16.321 -78.800 1.633 -8.053e+01 84.720 -56.753 1.468e+01 27.184 1.507e+01 2.366e+01
major 3.076e+01 1.689e+01 3.092e+02 3.538e+02 1.461e+01 2.048e+02 9.917e-01 7.374e+01 1.015e+02 1.094e+02 ... 652.421 9177.341 542.082 3.900e+03 1100.037 887.434 1.327e+02 1105.195 1.325e+02 4.083e+02
minor -2.284e+00 -3.925e+01 -9.011e+01 -4.714e+01 5.341e+00 -2.014e+01 -3.425e-01 -1.295e+02 -2.197e+02 -5.672e+02 ... -3823.217 -857.061 -1989.508 -7.091e+02 -318.523 -153.522 -7.185e+02 -6819.042 -8.569e+02 -3.010e+03
max_shear 1.652e+01 2.807e+01 1.997e+02 2.004e+02 4.635e+00 1.124e+02 6.671e-01 1.016e+02 1.606e+02 3.383e+02 ... 2237.819 5017.201 1265.795 2.305e+03 709.280 520.478 4.256e+02 3962.119 4.947e+02 1.709e+03
2 o11 -6.819e-05 -7.947e-05 4.139e-04 -1.110e-03 2.354e-05 -6.985e-04 1.405e-07 -4.194e-04 -4.931e-04 2.203e-03 ... 0.008 -0.030 0.006 -1.208e-02 -0.006 -0.001 1.748e-03 0.010 2.220e-03 5.961e-03
o22 2.610e-04 -9.335e-05 9.947e-04 3.668e-03 -6.263e-05 2.094e-03 5.855e-06 7.387e-05 -4.815e-04 -6.056e-03 ... -0.030 0.084 -0.018 3.737e-02 0.013 0.005 -6.589e-03 -0.046 -7.543e-03 -2.268e-02
t12 -2.075e-04 6.765e-04 -4.305e-03 -2.414e-03 3.463e-04 -7.801e-04 -1.621e-05 2.197e-03 3.982e-03 1.179e-03 ... 0.035 -0.029 0.010 -2.648e-02 0.003 -0.008 7.190e-03 0.064 6.901e-03 2.529e-02
t1z -3.346e-02 2.238e-02 -2.830e-01 2.261e-03 -8.003e-02 -1.315e-01 -1.118e-03 1.174e-01 1.051e-01 -1.493e-01 ... -4.154 -8.090 -4.946 3.212e+00 -0.981 -2.215 -8.716e-01 6.843 -2.002e-01 2.757e+00
t2z 9.391e-02 -5.794e-02 6.987e-01 5.875e-02 2.222e-01 3.930e-01 2.321e-03 -3.266e-01 -2.814e-01 4.888e-02 ... 12.397 17.850 12.708 -8.759e+00 2.423 4.912 2.386e+00 -12.872 4.679e-01 -5.417e+00
angle -6.421e+01 4.471e+01 -4.693e+01 -6.735e+01 4.145e+01 -7.540e+01 -5.000e+01 4.820e+01 4.504e+01 7.968e+00 ... 30.969 -76.591 19.141 -6.652e+01 80.821 -56.005 2.995e+01 33.244 2.736e+01 3.024e+01
major 3.612e-04 5.901e-04 5.019e-03 4.675e-03 3.294e-04 2.297e-03 1.946e-05 2.038e-03 3.495e-03 2.368e-03 ... 0.028 0.091 0.010 4.888e-02 0.013 0.010 5.890e-03 0.053 5.791e-03 2.070e-02
minor -1.685e-04 -7.629e-04 -3.610e-03 -2.117e-03 -3.685e-04 -9.017e-04 -1.347e-05 -2.384e-03 -4.469e-03 -6.222e-03 ... -0.050 -0.037 -0.021 -2.358e-02 -0.007 -0.006 -1.073e-02 -0.088 -1.111e-02 -3.742e-02
max_shear 2.649e-04 6.765e-04 4.315e-03 3.396e-03 3.489e-04 1.599e-03 1.646e-05 2.211e-03 3.982e-03 4.295e-03 ... 0.039 0.064 0.015 3.623e-02 0.010 0.008 8.311e-03 0.070 8.453e-03 2.906e-02
3 o11 -3.061e+00 -1.003e+01 5.135e+01 -2.009e+01 -8.917e+00 -3.125e+01 9.960e-02 -3.718e+01 -6.273e+01 6.592e+01 ... -178.340 -1736.328 -74.682 -1.488e+02 -406.984 -134.962 -3.641e+01 447.785 3.250e+01 2.724e+02
o22 2.948e+01 -1.683e+01 1.307e+02 4.420e+02 -2.217e+01 2.440e+02 9.586e-01 -5.487e+00 -9.655e+01 -7.056e+02 ... -2915.432 9012.891 -1795.942 4.162e+03 1455.565 537.531 -7.564e+02 -4742.028 -8.238e+02 -2.433e+03
t12 -5.834e+00 2.593e+01 -1.437e+02 -1.225e+02 3.214e+01 -2.817e+01 -6.290e-01 7.727e+01 1.578e+02 9.884e+01 ... 1566.515 -388.872 690.010 -1.362e+03 115.661 -134.280 3.644e+02 1902.531 3.016e+02 7.588e+02
t1z 0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 ... 0.000 0.000 0.000 -0.000e+00 0.000 0.000 0.000e+00 -0.000 0.000e+00 -0.000e+00
t2z -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 ... -0.000 -0.000 -0.000 0.000e+00 -0.000 -0.000 -0.000e+00 0.000 -0.000e+00 0.000e+00
angle -8.014e+01 4.126e+01 -5.272e+01 -7.603e+01 3.918e+01 -8.422e+01 -6.216e+01 5.080e+01 4.194e+01 7.185e+00 ... 24.429 -87.931 19.360 -7.385e+01 86.460 -79.115 2.267e+01 18.124 1.758e+01 1.465e+01
major 3.049e+01 1.272e+01 2.402e+02 4.724e+02 1.727e+01 2.469e+02 1.291e+00 5.754e+01 7.902e+01 7.838e+01 ... 533.232 9026.940 167.774 4.556e+03 1462.720 563.352 1.158e+02 1070.512 1.281e+02 4.708e+02
minor -4.076e+00 -3.958e+01 -5.809e+01 -5.057e+01 -4.835e+01 -3.410e+01 -2.326e-01 -1.002e+02 -2.383e+02 -7.181e+02 ... -3627.004 -1750.378 -2038.398 -5.433e+02 -414.139 -160.783 -9.086e+02 -5364.755 -9.194e+02 -2.631e+03
max_shear 1.728e+01 2.615e+01 1.491e+02 2.615e+02 3.281e+01 1.405e+02 7.617e-01 7.887e+01 1.587e+02 3.982e+02 ... 2080.118 5388.659 1103.086 2.550e+03 938.430 362.067 5.122e+02 3217.633 5.237e+02 1.551e+03
3604 1 o11 -2.729e+00 9.864e+00 -4.650e+01 -5.289e+01 2.258e+01 -1.050e+01 -3.169e-01 2.859e+01 5.915e+01 2.065e+01 ... 281.294 -293.702 -89.885 -2.844e+02 -8.555 -201.463 7.635e+01 1174.450 9.900e+01 3.894e+02
o22 2.430e+01 -5.286e+01 4.502e+02 2.613e+02 2.821e+01 1.188e+02 6.862e-01 -1.739e+02 -2.993e+02 -3.452e+02 ... -4581.175 5874.922 -2221.164 3.347e+03 -505.853 357.264 -7.946e+02 -5085.291 -7.311e+02 -2.168e+03
t12 -6.763e+00 1.181e+01 -1.478e+02 3.586e+01 -5.716e+01 -2.018e+01 -6.787e-02 5.475e+01 6.191e+01 -3.043e+01 ... -569.531 -1248.015 -601.501 7.869e+02 295.698 -110.241 -1.399e+02 142.815 -1.121e+02 1.002e+02
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4553 3 major 1.556e+01 -1.166e+00 4.272e+01 5.027e+01 9.330e+00 4.025e+01 2.189e-01 -6.226e+00 -8.880e+00 2.065e+02 ... 369.579 227.019 30.605 6.468e+02 -109.168 790.577 9.127e+01 1745.064 -3.686e+00 5.859e+02
minor 1.481e-01 -9.483e+00 -3.262e+01 4.540e+00 7.763e-02 4.110e+00 -3.344e-02 -5.953e+01 -9.733e+01 -3.937e+01 ... -6470.115 -22124.072 -4523.191 -1.092e+01 -3904.854 -360.915 -2.055e+00 -7143.062 -1.388e+02 -3.703e+03
max_shear 7.704e+00 4.158e+00 3.767e+01 2.287e+01 4.626e+00 1.807e+01 1.262e-01 2.665e+01 4.423e+01 1.229e+02 ... 3419.847 11175.545 2276.898 3.289e+02 1897.844 575.746 4.666e+01 4444.063 6.755e+01 2.145e+03
4554 1 o11 -3.799e-01 1.518e+00 -6.887e+00 -2.059e+00 -2.619e+00 -4.991e+00 6.262e-02 6.639e+00 6.563e+00 1.629e+01 ... -398.599 -366.898 -171.235 5.664e+00 71.562 115.893 1.127e+01 -759.561 5.186e+00 -3.339e+02
o22 -7.182e+00 6.814e+00 -3.162e+01 -9.531e+01 -1.798e+00 -7.645e+01 9.292e-02 2.102e+01 2.127e+01 3.569e+02 ... -2936.482 -6111.822 -1000.820 1.957e+02 -594.632 1211.643 -3.038e+01 -7660.046 9.291e+00 -2.967e+03
t12 8.521e-01 -1.602e+00 1.086e+01 2.662e+01 1.064e+00 2.297e+01 -9.517e-02 -3.413e+00 2.599e+00 -1.433e+02 ... 1857.692 4829.781 890.761 -1.278e+02 703.258 -575.852 -1.286e+01 3861.737 4.822e+00 1.601e+03
t1z -2.126e-02 2.102e-02 -1.776e-01 -1.936e-01 -1.741e-02 -1.522e-01 -1.739e-04 9.116e-02 1.383e-01 5.658e-01 ... 1.227 -4.370 3.861 -6.915e-02 -1.600 3.567 -1.099e-01 -17.087 2.559e-01 -4.558e+00
t2z 7.182e-02 -7.457e-02 5.032e-01 6.753e-01 2.741e-02 5.195e-01 3.520e-04 -3.048e-01 -4.732e-01 -1.845e+00 ... 0.981 -11.889 -7.704 2.743e-01 -3.955 -7.944 4.847e-01 40.091 -5.359e-01 1.185e+01
angle 7.033e+00 -7.441e+01 2.065e+01 1.486e+01 5.554e+01 1.637e+01 -4.952e+01 -7.731e+01 8.026e+01 -6.996e+01 ... 27.832 29.629 32.515 -6.332e+01 32.328 -66.787 -1.584e+01 24.111 5.653e+01 2.528e+01
major -2.748e-01 7.261e+00 -2.794e+00 5.006e+00 -1.068e+00 1.755e+00 1.741e-01 2.179e+01 2.171e+01 4.091e+02 ... 582.178 2380.055 396.575 2.599e+02 516.620 1458.610 1.492e+01 968.727 1.248e+01 4.223e+02
minor -7.287e+00 1.071e+00 -3.571e+01 -1.024e+02 -3.349e+00 -8.320e+01 -1.860e-02 5.870e+00 6.117e+00 -3.598e+01 ... -3917.259 -8858.774 -1568.630 -5.854e+01 -1039.690 -131.074 -3.403e+01 -9388.334 1.997e+00 -3.723e+03
max_shear 3.506e+00 3.095e+00 1.646e+01 5.369e+01 1.140e+00 4.248e+01 9.637e-02 7.960e+00 7.798e+00 2.226e+02 ... 2249.718 5619.415 982.603 1.592e+02 778.155 794.842 2.447e+01 5178.531 5.241e+00 2.073e+03
2 o11 -5.422e-07 1.670e-05 -1.582e-04 4.606e-05 -2.581e-05 1.859e-05 2.650e-07 8.222e-05 1.234e-04 -2.097e-04 ... 0.003 0.008 0.003 -3.610e-04 0.002 0.001 6.110e-05 -0.003 1.408e-04 -3.519e-04
o22 -2.586e-06 5.527e-06 -7.895e-05 -3.345e-04 1.352e-05 -2.692e-04 8.079e-07 -5.068e-05 -1.516e-04 2.017e-03 ... -0.026 -0.077 -0.015 2.215e-03 -0.012 0.006 7.663e-05 -0.045 -2.265e-04 -1.966e-02
t12 -1.297e-05 -3.429e-05 5.406e-04 4.940e-04 2.530e-06 4.123e-04 -2.199e-06 -2.483e-05 1.012e-04 -3.553e-03 ... 0.050 0.144 0.024 -3.905e-03 0.023 -0.016 -3.749e-04 0.103 1.928e-04 4.292e-02
t1z -2.126e-02 2.102e-02 -1.776e-01 -1.936e-01 -1.741e-02 -1.522e-01 -1.739e-04 9.116e-02 1.383e-01 5.658e-01 ... 1.227 -4.370 3.861 -6.915e-02 -1.600 3.567 -1.099e-01 -17.087 2.559e-01 -4.558e+00
t2z 7.182e-02 -7.457e-02 5.032e-01 6.753e-01 2.741e-02 5.195e-01 3.520e-04 -3.048e-01 -4.732e-01 -1.845e+00 ... 0.981 -11.889 -7.704 2.743e-01 -3.955 -7.944 4.847e-01 40.091 -5.359e-01 1.185e+01
angle -4.275e+01 -4.037e+01 4.710e+01 3.447e+01 8.633e+01 3.538e+01 -4.852e+01 -1.025e+01 1.818e+01 -5.370e+01 ... 36.834 36.815 35.039 -5.413e+01 36.629 -49.667 -4.559e+01 39.293 2.320e+01 3.866e+01
major 1.144e-05 4.586e-05 4.235e-04 3.852e-04 1.368e-05 3.113e-04 2.752e-06 8.671e-05 1.567e-04 4.628e-03 ... 0.040 0.116 0.020 5.039e-03 0.019 0.019 4.438e-04 0.082 2.234e-04 3.398e-02
minor -1.457e-05 -2.363e-05 -6.606e-04 -6.736e-04 -2.598e-05 -5.619e-04 -1.679e-06 -5.517e-05 -1.848e-04 -2.820e-03 ... -0.064 -0.185 -0.032 -3.185e-03 -0.029 -0.012 -3.061e-04 -0.130 -3.091e-04 -5.399e-02
max_shear 1.301e-05 3.475e-05 5.420e-04 5.294e-04 1.983e-05 4.366e-04 2.215e-06 7.094e-05 1.708e-04 3.724e-03 ... 0.052 0.150 0.026 4.112e-03 0.024 0.016 3.750e-04 0.106 2.663e-04 4.399e-02
3 o11 1.137e-01 2.626e+00 -3.382e+01 -5.651e+00 -2.580e+00 -5.461e+00 4.256e-02 9.504e+00 1.354e+01 4.585e+01 ... -425.599 -1993.954 47.327 3.247e+01 -323.378 448.541 6.979e+00 -2412.292 1.480e+01 -8.227e+02
o22 6.557e+00 -4.629e+00 4.801e+00 2.087e+01 3.496e+00 1.554e+01 1.074e-01 -2.818e+01 -4.939e+01 9.572e+01 ... -3005.632 -11119.231 -2199.244 2.941e+02 -2065.655 247.226 5.135e+01 -2837.432 -5.370e+01 -1.575e+03
t12 -1.886e+00 -1.131e+00 3.222e+01 1.275e+01 -8.624e-01 9.888e+00 -8.006e-02 1.433e+00 5.468e+00 -1.399e+02 ... 2111.848 6675.612 1038.234 -1.835e+02 1116.382 -660.964 -1.702e+01 4384.203 1.054e+01 1.819e+03
t1z 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 ... -0.000 0.000 -0.000 0.000e+00 0.000 -0.000 0.000e+00 0.000 -0.000e+00 0.000e+00
t2z -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... -0.000 0.000 0.000 -0.000e+00 0.000 0.000 -0.000e+00 -0.000 0.000e+00 -0.000e+00
angle -7.483e+01 -8.659e+00 6.047e+01 6.806e+01 -8.208e+01 6.836e+01 -5.603e+01 2.175e+00 4.929e+00 -5.005e+01 ... 29.291 27.824 21.373 -6.274e+01 26.017 -40.671 -7.125e+01 43.612 8.554e+00 3.916e+01
major 7.068e+00 2.798e+00 2.306e+01 2.601e+01 3.616e+00 1.946e+01 1.614e-01 9.558e+00 1.401e+01 2.129e+02 ... 759.065 1529.288 453.650 3.886e+02 221.531 1016.469 5.713e+01 1764.491 1.639e+01 6.591e+02
minor -3.976e-01 -4.801e+00 -5.207e+01 -1.079e+01 -2.700e+00 -9.384e+00 -1.139e-02 -2.824e+01 -4.986e+01 -7.134e+01 ... -4190.296 -14642.474 -2605.566 -6.205e+01 -2610.564 -320.701 1.200e+00 -7014.215 -5.529e+01 -3.056e+03
max_shear 3.733e+00 3.800e+00 3.756e+01 1.840e+01 3.158e+00 1.442e+01 8.639e-02 1.890e+01 3.194e+01 1.421e+02 ... 2474.681 8085.881 1529.608 2.253e+02 1416.047 668.585 2.796e+01 4389.354 3.584e+01 1.858e+03

20088 rows × 33 columns

ctria3_composite_stress
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID Layer Item
3730 1 o11 7.472e+00 -1.610e+01 1.216e+02 5.521e+01 -2.491e+01 1.036e+01 3.006e-01 -4.967e+01 -8.549e+01 9.623e+01 ... -2428.613 3445.647 94.165 -2.467e+02 2.212e+01 1032.241 3.127e+01 -6045.866 1.999e+01 -1780.650
o22 2.065e+00 3.429e+00 1.118e+01 7.541e+01 -1.917e+01 3.913e+01 4.003e-01 3.389e+01 2.287e+01 -2.450e+01 ... -809.614 1612.271 -612.437 4.699e+02 6.439e+01 -225.460 -5.340e+01 955.208 -3.297e+01 -113.679
t12 2.229e+00 -4.995e+00 4.908e+01 2.082e+01 1.760e+01 3.814e+01 2.057e-01 -1.904e+01 -3.857e+01 -1.401e+02 ... 2111.900 -1254.861 174.220 4.577e-02 2.268e+00 -777.952 -7.980e+00 4676.300 -3.000e+01 1139.945
t1z 2.330e-02 8.382e-02 -4.502e-01 2.978e-01 4.295e-02 3.173e-01 -2.942e-03 2.667e-01 5.215e-01 -1.673e+00 ... 13.159 -5.358 4.254 -1.977e+00 -1.060e+00 -1.035 7.896e-01 12.939 1.219e-01 4.886
t2z -6.477e-03 -4.634e-02 1.410e-01 -2.788e-01 9.807e-02 -9.623e-02 -4.129e-04 -2.479e-01 -3.383e-01 -1.465e-01 ... 8.970 -14.149 1.106 -1.944e+00 -2.206e-01 -2.741 3.766e-01 15.930 3.505e-02 5.875
angle 1.975e+01 -7.645e+01 2.082e+01 5.794e+01 4.963e+01 5.533e+01 5.181e+01 -7.775e+01 -7.228e+01 -3.335e+01 ... 55.486 -26.926 13.124 9.000e+01 8.694e+01 -25.525 -5.338e+00 63.409 -2.428e+01 63.086
major 8.272e+00 4.632e+00 1.402e+02 8.845e+01 -4.213e+00 6.550e+01 5.621e-01 3.803e+01 3.520e+01 1.884e+02 ... 642.614 4082.984 134.786 4.699e+02 6.451e+01 1403.721 3.202e+01 3296.036 3.352e+01 464.987
minor 1.265e+00 -1.731e+01 -7.488e+00 4.217e+01 -3.987e+01 -1.602e+01 1.388e-01 -5.381e+01 -9.781e+01 -1.167e+02 ... -3880.840 974.934 -653.058 -2.467e+02 2.200e+01 -596.941 -5.415e+01 -8386.694 -4.651e+01 -2359.316
max_shear 3.504e+00 1.097e+01 7.386e+01 2.314e+01 1.783e+01 4.076e+01 2.117e-01 4.592e+01 6.651e+01 1.526e+02 ... 2261.727 1554.025 393.922 3.583e+02 2.126e+01 1000.331 4.308e+01 5841.365 4.001e+01 1412.151
2 o11 7.033e-05 -1.017e-04 7.746e-04 5.159e-04 -2.031e-04 1.524e-04 1.747e-07 -3.528e-04 -5.120e-04 2.407e-05 ... -0.014 0.022 0.003 -4.381e-03 -9.001e-04 0.008 9.453e-04 -0.044 4.002e-04 -0.011
o22 1.753e-06 -9.580e-06 1.200e-04 3.199e-04 -1.704e-05 2.455e-04 2.747e-06 4.406e-05 -1.355e-04 -6.819e-04 ... 0.008 -0.010 -0.003 3.266e-03 1.971e-04 -0.006 -5.314e-04 0.034 -6.362e-04 0.007
t12 4.477e-05 -4.989e-05 8.313e-04 9.549e-04 1.880e-04 9.923e-04 4.721e-06 -1.229e-04 -4.954e-04 -3.623e-03 ... 0.042 -0.025 -0.001 2.545e-03 -1.918e-04 -0.020 -4.725e-04 0.116 -7.895e-04 0.028
t1z 2.330e-02 8.382e-02 -4.502e-01 2.978e-01 4.295e-02 3.173e-01 -2.942e-03 2.667e-01 5.215e-01 -1.673e+00 ... 13.159 -5.358 4.254 -1.977e+00 -1.060e+00 -1.035 7.896e-01 12.939 1.219e-01 4.886
t2z -6.477e-03 -4.634e-02 1.410e-01 -2.788e-01 9.807e-02 -9.623e-02 -4.129e-04 -2.479e-01 -3.383e-01 -1.465e-01 ... 8.970 -14.149 1.106 -1.944e+00 -2.206e-01 -2.741 3.766e-01 15.930 3.505e-02 5.875
angle 2.628e+01 -6.637e+01 3.425e+01 4.207e+01 5.817e+01 4.634e+01 5.262e+01 -7.411e+01 -5.540e+01 -4.222e+01 ... 52.217 -28.572 -10.209 7.318e+01 -8.037e+01 -35.071 -1.631e+01 54.276 -2.836e+01 54.414
major 9.243e-05 1.225e-05 1.341e-03 1.378e-03 9.965e-05 1.192e-03 6.354e-06 7.903e-05 2.062e-04 3.312e-03 ... 0.040 0.036 0.003 4.035e-03 2.297e-04 0.022 1.084e-03 0.118 8.264e-04 0.027
minor -2.035e-05 -1.236e-04 -4.461e-04 -5.420e-04 -3.198e-04 -7.945e-04 -3.432e-06 -3.878e-04 -8.538e-04 -3.969e-03 ... -0.046 -0.024 -0.004 -5.151e-03 -9.326e-04 -0.020 -6.696e-04 -0.128 -1.062e-03 -0.031
max_shear 5.639e-05 6.791e-05 8.934e-04 9.599e-04 2.097e-04 9.934e-04 4.893e-06 2.334e-04 5.300e-04 3.641e-03 ... 0.043 0.030 0.003 4.593e-03 5.812e-04 0.021 8.766e-04 0.123 9.444e-04 0.029
3 o11 8.802e+00 -7.829e+00 6.322e+01 8.098e+01 -2.276e+01 3.813e+01 -1.101e-01 -2.908e+01 -3.972e+01 -1.280e+02 ... -324.222 1146.779 376.124 -5.825e+02 -2.184e+02 475.126 1.571e+02 -2255.779 3.727e+01 -413.845
o22 2.186e+00 -1.120e+01 5.881e+01 2.642e+01 4.139e+00 2.568e+01 2.413e-01 -4.306e+01 -8.207e+01 -1.311e+02 ... 1823.941 -2741.139 -27.261 4.170e+01 -6.829e+01 -793.626 -1.712e+01 4439.032 -9.149e+01 1209.300
t12 1.340e+00 1.020e+00 1.717e+01 5.529e+01 -2.615e+00 4.095e+01 1.705e-01 9.250e+00 -9.189e-01 -1.487e+02 ... 1214.594 -758.496 -268.132 2.028e+02 -1.755e+01 -811.876 -2.968e+01 4598.884 -3.293e+01 1052.994
t1z -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 ... -0.000 0.000 -0.000 0.000e+00 0.000e+00 0.000 -0.000e+00 -0.000 -0.000e+00 -0.000
t2z 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... -0.000 0.000 -0.000 0.000e+00 0.000e+00 0.000 -0.000e+00 -0.000 -0.000e+00 -0.000
angle 1.102e+01 1.559e+01 4.134e+01 3.187e+01 -8.450e+01 4.068e+01 6.793e+01 2.647e+01 -1.242e+00 -4.471e+01 ... 65.743 -10.657 -26.525 7.349e+01 -8.342e+01 -25.998 -9.406e+00 63.025 -1.354e+01 63.811
major 9.063e+00 -7.545e+00 7.833e+01 1.154e+02 4.391e+00 7.333e+01 3.104e-01 -2.448e+01 -3.970e+01 1.915e+01 ... 2371.244 1289.514 509.952 1.018e+02 -6.627e+01 871.078 1.620e+02 6779.760 4.520e+01 1727.180
minor 1.925e+00 -1.148e+01 4.370e+01 -7.950e+00 -2.301e+01 -9.512e+00 -1.792e-01 -4.766e+01 -8.209e+01 -2.782e+02 ... -871.525 -2883.874 -161.090 -6.426e+02 -2.204e+02 -1189.578 -2.204e+01 -4596.507 -9.942e+01 -931.725
max_shear 3.569e+00 1.970e+00 1.732e+01 6.165e+01 1.370e+01 4.142e+01 2.448e-01 1.159e+01 2.119e+01 1.487e+02 ... 1621.385 2086.694 335.521 3.722e+02 7.708e+01 1030.328 9.204e+01 5688.133 7.231e+01 1329.453
3731 1 o11 6.196e+00 -1.581e+01 5.625e+01 7.677e+01 -2.816e+01 1.863e+01 2.620e-01 -4.003e+01 -6.873e+01 -1.386e+01 ... 51.722 4993.935 1034.907 6.985e+01 1.014e+02 939.095 8.015e+00 -4427.462 1.983e+01 -1108.960
o22 1.258e+00 -7.183e+00 9.891e+01 -7.885e+01 4.024e+01 -1.265e+01 4.995e-01 -3.012e+01 -4.179e+01 2.791e+02 ... -1282.336 1020.841 -525.215 1.765e+01 3.270e+01 39.471 2.495e+01 -714.833 6.607e+01 -729.907
t12 -3.101e+00 4.600e-01 -1.210e+01 -5.428e+01 4.700e+00 -3.678e+01 -2.200e-01 7.542e+00 2.433e+01 1.069e+02 ... -63.243 3751.585 800.291 -2.454e+02 3.349e+01 711.863 1.767e+01 -3598.268 7.265e+01 -709.457
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4538 3 major 3.261e+00 6.140e+00 6.117e+01 5.213e+01 -1.178e+01 3.514e+01 2.577e-01 3.147e+01 4.842e+01 1.076e+02 ... 2775.815 5157.465 1590.138 2.951e+02 5.161e+02 1321.848 4.539e+01 2978.174 5.803e+00 1377.184
minor 1.945e+00 -9.949e+00 -8.764e+01 1.414e+01 -1.885e+01 -4.231e+00 -1.124e-02 -3.851e+01 -7.956e+01 -1.932e+02 ... -975.253 -10130.497 -326.651 -1.455e+02 -1.653e+03 -382.948 -5.196e+01 -7206.313 -1.096e+02 -2564.618
max_shear 6.580e-01 8.044e+00 7.440e+01 1.899e+01 3.535e+00 1.969e+01 1.345e-01 3.499e+01 6.399e+01 1.504e+02 ... 1875.534 7643.981 958.394 2.203e+02 1.085e+03 852.398 4.867e+01 5092.244 5.772e+01 1970.901
4539 1 o11 -1.092e+01 1.670e+01 -8.391e+01 -7.108e+01 -2.118e+01 -7.498e+01 2.821e-01 7.256e+01 8.984e+01 1.836e+02 ... -600.259 610.081 817.767 -5.488e+01 1.055e+03 1230.024 -6.172e+00 -6310.631 8.169e+01 -2023.389
o22 2.478e+00 -1.029e-01 2.695e+00 4.386e+01 -2.424e+00 3.185e+01 1.393e-02 3.562e+00 1.056e+01 -1.691e+02 ... 969.637 5536.964 127.509 -1.611e+02 1.052e+03 -810.844 1.638e+01 4552.521 -6.186e+00 1531.135
t12 -1.778e+00 2.173e+00 -3.287e+00 -3.515e+01 -1.380e+00 -3.123e+01 7.862e-02 1.692e+00 -3.691e+00 1.795e+02 ... -2277.144 -5420.437 -1301.691 1.683e+02 -6.464e+02 393.289 -1.620e+00 -3227.981 -2.230e+01 -1506.269
t1z -1.453e-01 1.053e-01 -1.052e-01 -1.149e+00 -6.031e-02 -9.531e-01 -1.400e-05 4.700e-01 6.529e-01 2.503e+00 ... 1.069 61.705 10.774 -1.041e+00 1.710e+01 7.562 -7.779e-01 -37.517 6.498e-01 -10.591
t2z -5.111e-02 4.426e-02 -2.532e-01 -4.412e-01 -3.177e-02 -3.711e-01 -2.781e-04 1.909e-01 2.893e-01 1.281e+00 ... 0.983 0.126 6.611 -2.028e-02 -6.387e-01 6.399 -2.602e-01 -31.119 5.268e-01 -8.506
angle -8.257e+01 7.253e+00 -8.783e+01 -7.428e+01 -8.582e+01 -7.484e+01 1.519e+01 1.404e+00 -2.660e+00 2.276e+01 ... -54.510 -57.220 -37.575 3.625e+01 -4.495e+01 10.539 -8.591e+01 -74.639 -1.346e+01 -69.859
major 2.710e+00 1.697e+01 2.819e+00 5.376e+01 -2.323e+00 4.031e+01 3.034e-01 7.261e+01 9.001e+01 2.590e+02 ... 2593.325 9027.485 1819.306 6.855e+01 1.700e+03 1303.191 1.650e+01 5439.320 8.702e+01 2083.574
minor -1.115e+01 -3.795e-01 -8.404e+01 -8.098e+01 -2.128e+01 -8.344e+01 -7.420e-03 3.521e+00 1.039e+01 -2.444e+02 ... -2223.947 -2880.441 -874.030 -2.845e+02 4.070e+02 -884.010 -6.288e+00 -7197.432 -1.152e+01 -2575.828
max_shear 6.931e+00 8.676e+00 4.343e+01 6.737e+01 9.478e+00 6.187e+01 1.554e-01 3.454e+01 3.981e+01 2.517e+02 ... 2408.636 5953.963 1346.668 1.765e+02 6.464e+02 1093.601 1.139e+01 6318.376 4.927e+01 2329.701
2 o11 -3.672e-05 9.724e-05 -6.725e-04 -1.638e-04 -1.670e-04 -2.885e-04 2.551e-06 4.220e-04 4.620e-04 7.791e-04 ... -0.007 -0.037 0.002 2.313e-04 -2.027e-03 0.009 3.497e-04 -0.046 5.453e-04 -0.015
o22 3.122e-06 1.117e-05 -1.270e-04 1.004e-04 6.427e-06 1.061e-04 -7.322e-07 5.735e-05 1.915e-04 -6.960e-04 ... 0.011 0.048 0.007 -1.229e-03 8.021e-03 -0.002 -1.323e-04 0.016 1.140e-04 0.007
t12 -4.517e-05 7.143e-05 -4.378e-04 -9.846e-04 -2.529e-05 -8.287e-04 1.682e-06 9.339e-05 1.763e-05 5.004e-03 ... -0.059 -0.150 -0.031 4.357e-03 -1.933e-02 0.013 -8.495e-05 -0.098 -3.530e-04 -0.043
t1z -1.453e-01 1.053e-01 -1.052e-01 -1.149e+00 -6.031e-02 -9.531e-01 -1.400e-05 4.700e-01 6.529e-01 2.503e+00 ... 1.069 61.705 10.774 -1.041e+00 1.710e+01 7.562 -7.779e-01 -37.517 6.498e-01 -10.591
t2z -5.111e-02 4.426e-02 -2.532e-01 -4.412e-01 -3.177e-02 -3.711e-01 -2.781e-04 1.909e-01 2.893e-01 1.281e+00 ... 0.983 0.126 6.611 -2.028e-02 -6.387e-01 6.399 -2.602e-01 -31.119 5.268e-01 -8.506
angle -5.690e+01 2.947e+01 -6.096e+01 -4.882e+01 -8.187e+01 -5.170e+01 2.284e+01 1.356e+01 3.712e+00 4.081e+01 ... -49.366 -52.901 -47.411 4.024e+01 -5.228e+01 33.998 -9.707e+00 -53.690 -2.929e+01 -52.241
major 3.256e-05 1.376e-04 1.160e-04 9.617e-04 1.004e-05 7.607e-04 3.260e-06 4.445e-04 4.631e-04 5.100e-03 ... 0.061 0.161 0.035 3.919e-03 2.297e-02 0.018 3.643e-04 0.088 7.434e-04 0.040
minor -6.616e-05 -2.919e-05 -9.155e-04 -1.025e-03 -1.706e-04 -9.431e-04 -1.441e-06 3.482e-05 1.903e-04 -5.016e-03 ... -0.058 -0.151 -0.027 -4.917e-03 -1.698e-02 -0.011 -1.468e-04 -0.118 -8.403e-05 -0.049
max_shear 4.936e-05 8.339e-05 5.158e-04 9.934e-04 9.033e-05 8.519e-04 2.350e-06 2.049e-04 1.364e-04 5.058e-03 ... 0.059 0.156 0.031 4.418e-03 1.997e-02 0.014 2.556e-04 0.103 4.137e-04 0.044
3 o11 2.643e+00 6.286e+00 -7.775e+01 3.889e+01 -1.689e+01 1.442e+01 2.649e-01 2.766e+01 2.692e+01 -4.249e+01 ... -516.939 -6597.678 -22.685 4.082e+01 -1.082e+03 662.532 7.939e+01 -3366.468 5.001e+01 -1120.458
o22 -3.769e+00 7.993e+00 -6.871e+01 -2.974e+01 -5.237e+00 -2.322e+01 -4.276e-02 3.272e+01 5.877e+01 5.160e+01 ... 1065.680 3361.061 1581.236 -1.091e+02 6.821e+02 834.425 -2.769e+01 -3476.855 6.225e+01 -777.069
t12 -1.822e+00 3.519e+00 -3.160e+01 -4.333e+01 -6.356e-01 -3.482e+01 5.543e-02 5.751e+00 5.096e+00 2.193e+02 ... -2387.820 -6533.914 -1160.150 1.789e+02 -8.944e+02 657.872 -5.150e+00 -4580.141 -5.833e+00 -1923.501
t1z 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 ... -0.000 -0.000 -0.000 0.000e+00 -0.000e+00 -0.000 0.000e+00 0.000 -0.000e+00 0.000
t2z 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 ... -0.000 -0.000 -0.000 0.000e+00 0.000e+00 -0.000 0.000e+00 0.000 -0.000e+00 0.000
angle -1.480e+01 5.182e+01 -4.907e+01 -2.581e+01 -8.689e+01 -3.081e+01 9.908e+00 5.688e+01 8.113e+01 5.105e+01 ... -54.167 -63.655 -62.327 3.364e+01 -6.730e+01 48.722 -2.747e+00 -44.655 -6.819e+01 -47.550
major 3.124e+00 1.076e+01 -4.131e+01 5.984e+01 -5.202e+00 3.518e+01 2.745e-01 3.648e+01 5.956e+01 2.288e+02 ... 2789.894 6596.687 2189.626 1.599e+02 1.056e+03 1411.941 7.964e+01 1158.812 6.459e+01 982.385
minor -4.251e+00 3.518e+00 -1.052e+02 -5.069e+01 -1.693e+01 -4.399e+01 -5.244e-02 2.391e+01 2.613e+01 -2.197e+02 ... -2241.153 -9833.304 -631.075 -2.281e+02 -1.456e+03 85.016 -2.793e+01 -8002.134 4.768e+01 -2879.912
max_shear 3.687e+00 3.621e+00 3.192e+01 5.527e+01 5.863e+00 3.958e+01 1.635e-01 6.284e+00 1.672e+01 2.243e+02 ... 2515.523 8214.995 1410.350 1.940e+02 1.256e+03 663.463 5.378e+01 4580.473 8.456e+00 1931.148

864 rows × 33 columns

cquad4_strain
Mode Item 1 2 3 4 5 6 7 8 9 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.35851270500045 9.507602892871455 15.666300764341436 20.23716253374651 20.30596456170434 20.55485257248645 21.49972611068191 21.70624716254471 21.724825082335045 ... 80.07579703514831 86.4868740863594 88.16751565117606 88.47650123741167 89.9229257686733 94.28966669274277 94.36776759853447 96.0439300447073 98.70190395729915 98.89279564317114
Eigenvalue 2758.149169921875 3568.63232421875 9689.3056640625 16168.099609375 16278.22265625 16679.708984375 18248.43359375 18600.697265625 18632.55078125 ... 253140.875 295297.75 306885.90625 309040.65625 319227.71875 350984.5 351566.1875 364166.15625 384601.34375 386090.4375
Radians 52.518084217932724 59.73803080298806 98.43427078036643 127.15384229104127 127.58613818221008 129.14994767468937 135.08676320702187 136.3843732457095 136.5011017583741 ... 503.1310713919386 543.4130565233044 553.9728389099956 555.9142526055615 565.0024059683286 592.4394483827018 592.9301708464496 603.4618101006889 620.1623527351527 621.3617605710863
ElementID NodeID Location
1 CEN Top fiber_distance 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 ... 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01
Top exx 9.675e-08 1.578e-07 6.772e-06 6.115e-07 -2.309e-07 1.944e-07 3.318e-09 4.211e-07 1.681e-06 ... -6.305e-05 1.074e-04 -4.760e-05 -4.019e-07 -2.609e-05 -2.689e-05 3.686e-07 1.068e-04 2.783e-07 5.147e-06
Top eyy 5.161e-08 1.089e-08 6.183e-08 -8.304e-09 3.513e-08 1.196e-07 1.018e-09 -1.247e-07 1.516e-07 ... 3.274e-06 -2.591e-06 5.127e-06 1.653e-06 -2.941e-06 3.773e-06 -1.205e-07 -1.604e-05 -4.626e-07 -5.214e-06
Top exy -3.044e-06 -5.503e-07 3.229e-05 -1.690e-05 7.399e-06 -5.353e-06 2.535e-08 1.432e-05 -5.769e-06 ... 4.114e-04 1.075e-03 4.885e-04 2.041e-05 2.756e-06 3.887e-04 -1.549e-06 -1.765e-03 -6.380e-06 -4.326e-04
Top angle -4.458e+01 -3.753e+01 3.913e+01 -4.395e+01 4.603e+01 -4.460e+01 4.241e+01 4.391e+01 -3.757e+01 ... 4.958e+01 4.208e+01 4.808e+01 4.788e+01 8.660e+01 4.726e+01 -3.624e+01 -4.301e+01 -4.169e+01 -4.431e+01
Top emax 1.596e-06 3.691e-07 1.991e-05 8.755e-06 3.604e-06 2.834e-06 1.490e-08 7.315e-06 3.901e-06 ... 1.785e-04 5.929e-04 2.244e-04 1.088e-05 -2.859e-06 1.834e-04 9.361e-07 9.299e-04 3.119e-06 2.163e-04
Top emin -1.448e-06 -2.005e-07 -1.307e-05 -8.152e-06 -3.800e-06 -2.520e-06 -1.056e-08 -7.019e-06 -2.068e-06 ... -2.382e-04 -4.881e-04 -2.669e-04 -9.631e-06 -2.617e-05 -2.065e-04 -6.880e-07 -8.392e-04 -3.303e-06 -2.164e-04
Top von_mises 1.758e-06 3.336e-07 1.917e-05 9.764e-06 4.275e-06 3.092e-06 1.477e-08 8.276e-06 3.500e-06 ... 2.414e-04 6.251e-04 2.840e-04 1.185e-05 1.658e-05 2.252e-04 9.413e-07 1.022e-03 3.709e-06 2.498e-04
Bottom fiber_distance -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 ... -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01
Bottom exx -4.690e-08 -1.886e-07 -6.544e-06 -2.487e-07 7.191e-07 -5.327e-08 -3.494e-09 -6.104e-07 -1.738e-06 ... 6.227e-05 -6.713e-05 5.168e-05 4.903e-06 3.300e-05 2.812e-05 -1.166e-06 -1.114e-04 -6.623e-07 -5.337e-06
Bottom eyy 2.079e-08 -6.933e-10 -3.890e-07 9.960e-08 3.486e-07 -4.112e-10 5.211e-10 -9.747e-08 -4.714e-08 ... -4.394e-06 -3.376e-06 -6.049e-06 1.583e-06 1.676e-06 -3.611e-06 -1.408e-07 1.325e-05 -3.678e-07 4.577e-06
Bottom exy -1.224e-06 5.025e-07 -3.991e-05 1.084e-05 -4.504e-06 1.221e-05 5.775e-09 6.848e-06 -2.579e-06 ... -3.306e-04 -8.398e-04 -4.682e-04 1.007e-04 5.846e-05 -3.523e-04 -1.846e-05 1.819e-03 -1.363e-05 3.041e-04
Bottom angle -4.658e+01 5.525e+01 -4.938e+01 4.592e+01 -4.265e+01 4.512e+01 6.240e+01 4.714e+01 -6.162e+01 ... -3.930e+01 -4.717e+01 -4.149e+01 4.406e+01 3.091e+01 -4.243e+01 -4.659e+01 4.696e+01 -4.562e+01 4.593e+01
Bottom emax 6.000e-07 1.736e-07 1.673e-05 5.350e-06 2.793e-06 6.077e-06 2.030e-09 3.080e-06 6.493e-07 ... 1.976e-04 3.859e-04 2.587e-04 5.362e-05 5.050e-05 1.891e-04 8.589e-06 8.627e-04 6.304e-06 1.517e-04
Bottom emin -6.261e-07 -3.629e-07 -2.366e-05 -5.499e-06 -1.726e-06 -6.130e-06 -5.003e-09 -3.788e-06 -2.434e-06 ... -1.397e-04 -4.564e-04 -2.131e-04 -4.713e-05 -1.582e-05 -1.646e-04 -9.896e-06 -9.608e-04 -7.334e-06 -1.525e-04
Bottom von_mises 7.080e-07 3.161e-07 2.343e-05 6.264e-06 2.633e-06 7.048e-06 4.180e-09 3.972e-06 1.877e-06 ... 1.957e-04 4.868e-04 2.728e-04 5.821e-05 4.000e-05 2.044e-04 1.068e-05 1.053e-03 7.881e-06 1.756e-04
1 Top fiber_distance 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 ... 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01 4.000e-01
Top exx 4.346e-07 -3.794e-08 1.426e-06 8.503e-06 7.479e-07 3.163e-06 -4.920e-09 1.761e-08 -1.299e-08 ... -1.628e-05 2.044e-05 1.154e-05 7.733e-06 -5.849e-06 1.863e-05 -2.478e-06 -7.274e-05 -1.118e-07 -3.380e-05
Top eyy -2.970e-07 2.042e-07 5.243e-06 -8.085e-06 -9.543e-07 -2.917e-06 9.290e-09 2.700e-07 1.813e-06 ... -4.191e-05 8.177e-05 -5.330e-05 -6.631e-06 -2.254e-05 -4.159e-05 2.770e-06 1.629e-04 -7.574e-08 3.432e-05
Top exy -3.044e-06 -5.503e-07 3.229e-05 -1.690e-05 7.399e-06 -5.353e-06 2.535e-08 1.432e-05 -5.769e-06 ... 4.114e-04 1.075e-03 4.885e-04 2.041e-05 2.756e-06 3.887e-04 -1.549e-06 -1.765e-03 -6.380e-06 -4.326e-04
Top angle -3.824e+01 -5.688e+01 4.837e+01 -2.276e+01 3.852e+01 -2.068e+01 5.963e+01 4.550e+01 -5.378e+01 ... 4.322e+01 4.663e+01 4.122e+01 2.743e+01 4.688e+00 4.060e+01 -8.178e+01 -4.880e+01 -4.516e+01 -4.947e+01
Top emax 1.634e-06 3.837e-07 1.959e-05 1.205e-05 3.693e-06 4.173e-06 1.672e-08 7.307e-06 3.925e-06 ... 1.770e-04 5.896e-04 2.255e-04 1.303e-05 -5.736e-06 1.852e-04 2.882e-06 9.353e-04 3.096e-06 2.192e-04
Top emin -1.496e-06 -2.175e-07 -1.292e-05 -1.163e-05 -3.899e-06 -3.928e-06 -1.235e-08 -7.019e-06 -2.126e-06 ... -2.352e-04 -4.874e-04 -2.673e-04 -1.193e-05 -2.265e-05 -2.081e-04 -2.590e-06 -8.452e-04 -3.284e-06 -2.187e-04
Top von_mises 1.808e-06 3.515e-07 1.890e-05 1.367e-05 4.384e-06 4.678e-06 1.684e-08 8.271e-06 3.545e-06 ... 2.388e-04 6.228e-04 2.849e-04 1.441e-05 1.360e-05 2.272e-04 3.161e-06 1.028e-03 3.684e-06 2.528e-04
Bottom fiber_distance -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 ... -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01 -4.000e-01
Bottom exx 3.015e-07 1.595e-08 1.323e-06 6.185e-06 3.516e-08 3.787e-06 -8.894e-09 3.226e-07 -2.218e-07 ... -2.509e-06 -4.218e-05 -1.005e-05 9.487e-06 1.197e-06 -8.087e-06 -3.101e-06 6.011e-05 -6.148e-07 1.352e-05
Bottom eyy -3.328e-07 -2.018e-07 -8.152e-06 -6.455e-06 1.017e-06 -3.917e-06 6.172e-09 -1.025e-06 -1.524e-06 ... 5.919e-05 -2.612e-05 5.486e-05 -3.292e-06 3.280e-05 3.219e-05 1.880e-06 -1.572e-04 -3.895e-07 -1.444e-05
Bottom exy -1.224e-06 5.025e-07 -3.991e-05 1.084e-05 -4.504e-06 1.221e-05 5.775e-09 6.848e-06 -2.579e-06 ... -3.306e-04 -8.398e-04 -4.682e-04 1.007e-04 5.846e-05 -3.523e-04 -1.846e-05 1.819e-03 -1.363e-05 3.041e-04
Bottom angle -3.131e+01 3.329e+01 -3.832e+01 2.031e+01 -5.115e+01 2.887e+01 7.951e+01 3.943e+01 -3.161e+01 ... -5.029e+01 -4.555e+01 -4.895e+01 4.138e+01 5.920e+01 -4.826e+01 -5.255e+01 4.159e+01 -4.547e+01 4.237e+01
Bottom emax 6.737e-07 1.809e-07 1.710e-05 8.192e-06 2.831e-06 7.152e-06 6.707e-09 3.139e-06 5.715e-07 ... 1.965e-04 3.858e-04 2.587e-04 5.385e-05 5.022e-05 1.894e-04 8.948e-06 8.675e-04 6.316e-06 1.522e-04
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5537 5516 Top eyy -7.650e-08 -4.020e-07 2.357e-06 -8.119e-07 1.178e-07 -6.523e-07 6.119e-09 -9.158e-07 -2.309e-06 ... -1.559e-03 1.430e-04 6.128e-03 6.322e-03 2.176e-04 -9.235e-03 9.199e-03 -1.858e-03 -7.079e-03 6.933e-03
Top exy 3.678e-06 7.852e-07 -2.851e-05 -3.508e-07 -6.945e-06 8.320e-07 -6.064e-08 -6.139e-06 2.993e-05 ... 1.989e-02 8.701e-03 -1.907e-03 5.987e-05 1.253e-03 -4.397e-03 2.197e-03 9.715e-03 -2.696e-03 6.151e-03
Top angle 4.436e+01 2.372e+01 -4.899e+01 -9.154e+00 -4.560e+01 2.205e+01 -4.959e+01 -3.713e+01 4.129e+01 ... 4.007e+01 4.611e+01 -8.530e+01 8.986e+01 5.421e+01 -7.195e+00 8.633e+01 3.545e+01 -5.879e+00 7.709e+01
Top emax 1.804e-06 4.915e-07 1.475e-05 2.766e-07 3.518e-06 3.749e-07 3.193e-08 3.138e-06 1.473e-05 ... 1.026e-02 4.328e-03 6.207e-03 6.322e-03 6.692e-04 8.179e-03 9.269e-03 4.966e-03 6.012e-03 7.638e-03
Top emin -1.875e-06 -5.745e-07 -1.404e-05 -8.402e-07 -3.429e-06 -8.208e-07 -2.949e-08 -3.240e-06 -1.545e-05 ... -9.922e-03 -4.380e-03 -5.463e-03 -5.561e-03 -6.513e-04 -9.513e-03 -7.924e-03 -5.316e-03 -7.218e-03 -6.482e-03
Top von_mises 2.124e-06 6.161e-07 1.662e-05 6.716e-07 4.011e-06 7.062e-07 3.547e-08 3.683e-06 1.743e-05 ... 1.165e-02 5.027e-03 6.742e-03 6.866e-03 7.624e-04 1.022e-02 9.937e-03 5.937e-03 7.649e-03 8.161e-03
Bottom fiber_distance -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 ... -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01
Bottom exx 3.795e-08 -1.402e-07 9.043e-07 4.864e-06 2.968e-07 3.579e-06 -8.105e-09 5.681e-07 3.885e-07 ... -9.943e-03 7.726e-04 4.427e-03 4.453e-03 1.794e-04 -6.929e-03 7.076e-03 -2.222e-03 -5.781e-03 5.564e-03
Bottom eyy 5.407e-08 2.063e-07 -1.806e-06 -5.233e-06 -4.888e-07 -3.814e-06 7.161e-09 -6.771e-07 4.500e-07 ... 1.105e-02 -6.414e-04 -5.059e-03 -5.036e-03 -1.721e-04 8.031e-03 -8.268e-03 2.901e-03 6.973e-03 -6.616e-03
Bottom exy 2.262e-06 1.497e-06 -2.304e-05 4.182e-06 -3.986e-06 3.460e-06 -6.318e-08 2.843e-06 3.103e-05 ... 6.598e-03 8.430e-03 2.237e-03 4.367e-03 1.149e-03 -5.253e-03 2.694e-03 1.149e-02 2.198e-03 1.538e-03
Bottom angle 4.520e+01 5.152e+01 -4.165e+01 1.125e+01 -3.943e+01 1.254e+01 -5.179e+01 3.317e+01 4.506e+01 ... 8.128e+01 4.024e+01 6.634e+00 1.236e+01 3.649e+01 -8.033e+01 4.979e+00 5.702e+01 8.511e+01 3.600e+00
Bottom emax 1.177e-06 8.013e-07 1.115e-05 5.280e-06 1.936e-06 3.964e-06 3.203e-08 1.497e-06 1.593e-05 ... 1.155e-02 4.339e-03 4.557e-03 4.931e-03 6.043e-04 8.479e-03 7.193e-03 6.629e-03 7.067e-03 5.612e-03
Bottom emin -1.085e-06 -7.353e-07 -1.205e-05 -5.649e-06 -2.128e-06 -4.199e-06 -3.297e-08 -1.606e-06 -1.509e-05 ... -1.045e-02 -4.208e-03 -5.189e-03 -5.514e-03 -5.970e-04 -7.377e-03 -8.385e-03 -5.951e-03 -5.875e-03 -6.664e-03
Bottom von_mises 1.306e-06 8.874e-07 1.340e-05 6.311e-06 2.347e-06 4.713e-06 3.753e-08 1.792e-06 1.792e-05 ... 1.271e-02 4.935e-03 5.631e-03 6.034e-03 6.935e-04 9.162e-03 9.003e-03 7.267e-03 7.483e-03 7.096e-03
5515 Top fiber_distance 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 ... 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01 3.090e-01
Top exx -2.885e-07 -2.184e-07 2.288e-06 -1.731e-06 3.160e-07 -1.351e-06 8.326e-09 -4.430e-07 -2.872e-06 ... 5.417e-05 -7.351e-04 2.401e-03 2.285e-03 -2.070e-05 -3.017e-03 3.203e-03 -1.510e-03 -1.987e-03 1.615e-03
Top eyy 2.242e-07 1.463e-07 -1.652e-06 1.208e-06 -2.333e-07 9.368e-07 -6.129e-09 3.676e-07 2.244e-06 ... 3.236e-04 6.943e-04 -1.816e-03 -1.684e-03 3.499e-05 1.906e-03 -2.083e-03 1.222e-03 9.419e-04 -6.098e-04
Top exy 3.678e-06 7.852e-07 -2.851e-05 -3.508e-07 -6.945e-06 8.320e-07 -6.064e-08 -6.139e-06 2.993e-05 ... 1.989e-02 8.701e-03 -1.907e-03 5.987e-05 1.253e-03 -4.397e-03 2.197e-03 9.715e-03 -2.696e-03 6.151e-03
Top angle 4.897e+01 5.746e+01 -4.107e+01 -8.660e+01 -4.274e+01 8.001e+01 -3.830e+01 -4.876e+01 4.985e+01 ... 4.539e+01 4.966e+01 -1.217e+01 4.321e-01 4.627e+01 -6.911e+01 1.129e+01 5.285e+01 -6.869e+01 3.506e+01
Top emax 1.825e-06 3.968e-07 1.471e-05 1.218e-06 3.525e-06 1.010e-06 3.227e-08 3.058e-06 1.487e-05 ... 1.013e-02 4.388e-03 2.606e-03 2.285e-03 6.342e-04 2.745e-03 3.422e-03 4.902e-03 1.468e-03 3.773e-03
Top emin -1.889e-06 -4.689e-07 -1.407e-05 -1.742e-06 -3.442e-06 -1.424e-06 -3.007e-08 -3.134e-06 -1.549e-05 ... -9.755e-03 -4.429e-03 -2.022e-03 -1.684e-03 -6.199e-04 -3.856e-03 -2.303e-03 -5.190e-03 -2.513e-03 -2.768e-03
Top von_mises 2.144e-06 5.004e-07 1.662e-05 1.718e-06 4.022e-06 1.412e-06 3.600e-08 3.575e-06 1.753e-05 ... 1.148e-02 5.091e-03 2.679e-03 2.301e-03 7.241e-04 3.829e-03 3.326e-03 5.827e-03 2.324e-03 3.791e-03
Bottom fiber_distance -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 ... -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01 -3.090e-01
Bottom exx 3.239e-07 1.285e-07 -2.558e-06 -1.931e-06 -6.425e-07 -1.314e-06 -8.998e-10 -5.954e-07 2.387e-06 ... 5.110e-03 6.542e-04 -1.980e-03 -1.696e-03 6.712e-05 2.293e-03 -2.668e-03 2.261e-03 1.947e-03 -1.392e-03
Bottom eyy -2.377e-07 -6.795e-08 1.727e-06 1.701e-06 4.696e-07 1.179e-06 -1.916e-10 5.101e-07 -1.589e-06 ... -4.314e-03 -5.205e-04 1.479e-03 1.239e-03 -5.755e-05 -1.379e-03 1.675e-03 -1.674e-03 -9.121e-04 4.821e-04
Bottom exy 2.262e-06 1.497e-06 -2.304e-05 4.182e-06 -3.986e-06 3.460e-06 -6.318e-08 2.843e-06 3.103e-05 ... 6.598e-03 8.430e-03 2.237e-03 4.367e-03 1.149e-03 -5.253e-03 2.694e-03 1.149e-02 2.198e-03 1.538e-03
Bottom angle 3.803e+01 4.126e+01 -5.027e+01 6.549e+01 -5.279e+01 6.289e+01 -4.532e+01 5.563e+01 4.135e+01 ... 1.750e+01 4.103e+01 7.356e+01 6.196e+01 4.190e+01 -2.752e+01 7.410e+01 3.555e+01 1.878e+01 7.031e+01
Bottom emax 1.208e-06 7.852e-07 1.130e-05 2.654e-06 1.983e-06 2.065e-06 3.105e-08 1.482e-06 1.604e-05 ... 6.150e-03 4.322e-03 1.809e-03 2.402e-03 5.825e-04 3.662e-03 2.059e-03 6.366e-03 2.321e-03 7.574e-04
Bottom emin -1.122e-06 -7.246e-07 -1.214e-05 -2.885e-06 -2.156e-06 -2.200e-06 -3.214e-08 -1.568e-06 -1.524e-05 ... -5.354e-03 -4.189e-03 -2.310e-03 -2.859e-03 -5.729e-04 -2.747e-03 -3.052e-03 -5.779e-03 -1.286e-03 -1.667e-03
Bottom von_mises 1.346e-06 8.720e-07 1.354e-05 3.199e-06 2.390e-06 2.463e-06 3.648e-08 1.761e-06 1.806e-05 ... 6.647e-03 4.914e-03 2.384e-03 3.042e-03 6.671e-04 3.713e-03 2.969e-03 7.015e-03 2.111e-03 1.432e-03

306880 rows × 34 columns

chexa_stress
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID NodeID Item
3684 0 oxx 3.865e-12 6.821e-13 -4.547e-13 -1.137e-12 -1.137e-13 3.183e-12 2.842e-14 -6.821e-13 3.183e-12 -2.638e-11 ... -2.728e-11 5.457e-11 4.411e-11 1.577e-12 1.273e-11 1.054e-10 4.547e-13 -1.933e-10 -1.592e-12 -8.740e-11
oyy 1.478e-12 -4.547e-13 4.547e-13 6.821e-13 0.000e+00 -7.049e-12 3.553e-15 2.274e-13 -9.550e-12 3.456e-11 ... 9.095e-12 -1.055e-10 -1.046e-11 -6.963e-13 9.095e-12 4.536e-11 6.821e-13 -1.896e-10 -2.274e-13 -1.338e-10
ozz -1.478e-12 -2.274e-13 1.819e-12 1.864e-11 0.000e+00 1.228e-11 7.105e-15 2.728e-12 0.000e+00 5.457e-12 ... 3.274e-11 1.455e-11 1.637e-11 -1.677e-12 1.091e-11 -4.297e-11 9.095e-13 2.365e-11 -9.095e-13 7.623e-11
txy -3.268e-13 9.095e-13 1.819e-12 -5.315e-12 -4.263e-14 -1.450e-12 7.105e-15 3.638e-12 3.638e-12 5.912e-12 ... 2.183e-11 -1.164e-10 3.638e-12 0.000e+00 7.276e-12 1.182e-11 4.690e-13 3.274e-11 -3.411e-13 7.276e-12
tyz 5.684e-14 -1.137e-13 1.364e-12 2.274e-13 -8.527e-14 4.547e-13 -1.243e-14 -2.274e-13 -2.274e-12 -4.547e-13 ... -4.093e-12 1.819e-11 -4.547e-13 -7.745e-13 0.000e+00 7.958e-13 -2.274e-13 -4.547e-12 -4.547e-13 -2.274e-13
txz 5.684e-14 2.274e-13 1.819e-12 3.183e-12 -2.274e-13 2.274e-12 7.105e-15 -1.819e-12 -1.819e-12 0.000e+00 ... 3.638e-12 1.455e-11 -5.457e-12 -5.684e-14 7.276e-12 -2.956e-12 -1.819e-12 4.002e-11 -9.095e-13 -6.025e-12
omax 3.910e-12 1.201e-12 4.071e-12 1.917e-11 1.873e-13 1.282e-11 3.108e-14 4.571e-12 5.236e-12 3.514e-11 ... 3.343e-11 1.160e-10 4.539e-11 1.578e-12 2.178e-11 1.077e-10 2.634e-12 3.080e-11 1.304e-14 7.645e-11
omid 1.435e-12 -1.856e-13 -2.412e-13 4.919e-12 1.401e-14 2.878e-12 1.785e-14 1.820e-12 -7.997e-13 5.450e-12 ... 1.899e-11 1.720e-11 1.534e-11 -2.704e-13 1.003e-11 4.314e-11 5.856e-13 -1.616e-10 -3.822e-13 -8.650e-11
omin -1.480e-12 -1.015e-12 -2.011e-12 -5.894e-12 -3.150e-13 -7.280e-12 -9.858e-15 -4.117e-12 -1.080e-11 -2.694e-11 ... -3.787e-11 -1.696e-10 -1.070e-11 -2.104e-12 9.372e-13 -4.304e-11 -1.174e-12 -2.285e-10 -2.359e-12 -1.349e-10
von_mises 4.673e-12 1.939e-12 5.419e-12 2.177e-11 4.419e-13 1.740e-11 3.619e-14 7.690e-12 1.403e-11 5.378e-11 ... 6.529e-11 2.512e-10 4.861e-11 3.189e-12 1.810e-11 1.310e-10 3.301e-12 2.331e-10 2.202e-12 1.918e-10
55 oxx -1.577e-12 -1.535e-12 6.821e-12 3.740e-11 -8.527e-14 -1.114e-11 6.040e-14 -2.387e-12 -1.342e-11 6.366e-12 ... -6.094e-11 -1.692e-10 5.048e-11 7.745e-13 -1.273e-11 -3.246e-11 1.137e-13 -1.978e-11 0.000e+00 -1.227e-10
oyy -9.663e-13 -7.958e-13 3.865e-12 7.049e-12 2.842e-14 3.070e-12 -2.132e-14 -7.958e-12 -1.455e-11 1.273e-11 ... 3.774e-11 -1.528e-10 1.478e-11 4.846e-12 -9.095e-12 -2.501e-11 -7.958e-13 -1.462e-10 3.411e-13 2.414e-11
ozz -8.384e-13 -1.762e-12 8.299e-12 1.063e-11 -2.700e-13 -1.558e-11 2.309e-14 -6.594e-12 -6.594e-12 -6.253e-11 ... -5.002e-12 -7.640e-11 1.032e-10 2.327e-12 6.366e-12 2.987e-11 9.095e-13 -3.993e-10 -1.137e-12 -2.980e-11
txy -4.263e-13 9.095e-13 -3.638e-12 -5.173e-12 1.421e-14 -6.537e-12 2.842e-14 5.457e-12 0.000e+00 2.638e-11 ... -7.276e-12 -1.164e-10 1.273e-11 -9.095e-13 -1.273e-11 1.819e-11 2.274e-13 -3.638e-11 0.000e+00 0.000e+00
tyz 5.904e-14 1.486e-14 3.569e-12 -4.496e-13 -1.514e-13 4.835e-13 -1.622e-14 -1.314e-12 -4.448e-12 2.933e-13 ... -8.148e-12 4.401e-11 -2.143e-12 -1.788e-12 1.086e-11 -3.935e-12 -7.989e-13 5.831e-12 -1.014e-12 3.987e-12
txz -2.083e-14 -6.529e-13 2.244e-12 -6.709e-12 -2.127e-13 -5.544e-12 1.583e-14 -2.999e-12 3.172e-12 1.138e-11 ... -1.371e-12 2.456e-12 -2.013e-11 -8.497e-13 2.769e-12 -1.149e-11 2.382e-12 3.173e-11 1.292e-12 -3.442e-12
omax -7.159e-13 -1.016e-13 1.031e-11 3.974e-11 1.489e-13 5.920e-12 7.167e-14 2.158e-12 -3.727e-12 3.673e-11 ... 3.972e-11 -2.474e-11 1.104e-10 5.810e-12 1.255e-11 3.286e-11 2.985e-12 -7.882e-12 1.275e-12 2.444e-11
omid -8.698e-13 -1.436e-12 9.257e-12 9.786e-12 -3.493e-14 -9.713e-12 2.763e-14 -7.747e-12 -1.374e-11 -1.558e-11 ... -6.375e-12 -9.094e-11 4.755e-11 2.283e-12 -1.538e-12 -1.260e-11 -5.153e-13 -1.552e-10 1.969e-13 -2.997e-11
omin -1.796e-12 -2.555e-12 -5.832e-13 5.560e-12 -4.408e-13 -1.985e-11 -3.713e-14 -1.135e-11 -1.710e-11 -6.458e-11 ... -6.154e-11 -2.827e-10 1.050e-11 -1.454e-13 -2.648e-11 -4.785e-11 -2.242e-12 -4.022e-10 -2.267e-12 -1.228e-10
von_mises 1.012e-12 2.128e-12 1.041e-11 3.227e-11 5.226e-13 2.249e-11 9.479e-14 1.212e-11 1.205e-11 8.776e-11 ... 8.781e-11 2.320e-10 8.750e-11 5.187e-12 3.423e-11 7.008e-11 4.613e-12 3.451e-10 3.145e-12 1.290e-10
51 oxx 3.453e-12 3.979e-13 -1.137e-12 -2.922e-11 5.684e-14 1.251e-11 3.197e-14 2.046e-12 -2.274e-13 -4.138e-11 ... 4.547e-11 -8.004e-11 1.796e-11 1.563e-12 -8.185e-12 -1.168e-10 0.000e+00 1.569e-10 -1.023e-12 -9.032e-11
oyy 7.958e-13 1.705e-13 -4.093e-12 8.754e-12 8.527e-14 -8.868e-12 1.776e-14 2.046e-12 -6.821e-13 -2.456e-11 ... -3.274e-11 1.201e-10 2.797e-11 1.222e-12 -3.183e-11 4.377e-12 -3.411e-13 4.320e-11 -2.274e-13 -6.168e-11
ozz 1.663e-12 8.527e-14 2.274e-13 2.723e-11 -1.847e-13 4.150e-12 2.665e-15 -1.251e-12 -5.684e-12 -2.387e-11 ... 2.956e-11 -6.366e-11 6.048e-11 -7.176e-13 -9.095e-12 8.623e-11 5.684e-13 -7.230e-11 0.000e+00 8.328e-12
txy 6.899e-14 -1.066e-12 6.915e-13 -1.368e-12 3.089e-14 9.440e-13 -5.351e-15 -1.397e-12 -4.697e-12 -7.050e-12 ... -1.234e-11 -6.904e-11 4.515e-12 2.048e-12 1.422e-11 3.017e-11 2.368e-13 8.251e-11 -4.745e-13 -1.218e-12
tyz 9.278e-14 -3.556e-13 2.800e-12 -2.852e-13 -1.618e-13 5.244e-13 -1.679e-14 -9.524e-13 -4.640e-12 -8.046e-13 ... -1.025e-11 6.060e-11 -1.459e-12 -1.129e-12 4.413e-12 -2.182e-12 -8.646e-13 -7.151e-13 -9.491e-13 2.279e-12
txz -3.204e-14 -6.126e-13 2.052e-12 -1.356e-12 -1.925e-13 -1.079e-12 1.715e-14 7.684e-13 -2.019e-13 4.442e-12 ... -1.031e-12 3.874e-12 -1.301e-11 6.473e-14 1.787e-12 -4.262e-12 6.862e-13 1.740e-11 -2.466e-12 -7.064e-12
omax 3.456e-12 1.399e-12 2.783e-12 2.726e-11 2.473e-13 1.268e-11 4.564e-14 3.740e-12 5.208e-12 -2.026e-11 ... 4.739e-11 1.563e-10 6.434e-11 3.573e-12 -1.149e-13 8.642e-11 1.281e-12 2.011e-10 2.096e-12 8.910e-12
omid 1.672e-12 4.131e-13 -2.294e-12 8.800e-12 4.195e-14 4.044e-12 1.837e-14 6.562e-13 -2.486e-12 -2.487e-11 ... 3.115e-11 -6.592e-11 2.884e-11 1.139e-13 -1.014e-11 1.134e-11 1.028e-13 8.739e-13 -1.189e-14 -6.172e-11
omin 7.840e-13 -1.159e-12 -5.491e-12 -2.930e-11 -3.319e-13 -8.934e-12 -1.160e-14 -1.554e-12 -9.316e-12 -4.468e-11 ... -3.625e-11 -1.140e-10 1.323e-11 -1.619e-12 -3.886e-11 -1.240e-10 -1.156e-12 -7.416e-11 -3.335e-12 -9.087e-11
von_mises 2.356e-12 2.235e-12 7.227e-12 4.996e-11 5.086e-13 1.884e-11 4.959e-14 4.606e-12 1.259e-11 2.248e-11 ... 7.682e-11 2.498e-10 4.537e-11 4.579e-12 3.483e-11 1.847e-10 2.111e-12 2.464e-10 4.742e-12 8.886e-11
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5568 5593 oxx 2.684e-12 -4.547e-13 -9.095e-12 -2.592e-11 -9.663e-13 -1.086e-11 -7.105e-15 -9.095e-12 -1.819e-12 -1.592e-11 ... -1.019e-10 4.657e-10 -3.638e-11 -4.093e-11 -1.237e-10 9.095e-11 -2.558e-12 -4.366e-11 8.185e-12 5.093e-11
oyy -1.931e-12 1.251e-11 -3.001e-11 -2.063e-11 -1.450e-12 -1.218e-11 -1.332e-13 1.864e-11 5.002e-11 1.005e-10 ... -5.530e-10 1.382e-09 -2.110e-10 -2.780e-11 1.637e-10 -2.183e-10 -2.451e-12 5.239e-10 9.322e-12 8.731e-11
ozz -2.984e-12 2.274e-12 -8.185e-12 -5.952e-11 1.137e-13 -3.303e-11 8.171e-14 4.547e-12 2.365e-11 1.146e-10 ... -5.675e-10 1.441e-09 -1.019e-10 -5.633e-11 4.475e-10 -4.729e-11 -2.871e-12 -2.328e-10 3.183e-11 -1.091e-10
txy 1.019e-13 3.859e-13 2.657e-13 1.481e-11 -3.401e-13 2.965e-12 -2.543e-14 3.328e-12 6.831e-12 -1.006e-11 ... 2.791e-11 4.518e-10 8.591e-12 -1.679e-12 5.879e-11 -2.738e-11 1.175e-12 -7.018e-11 1.554e-12 6.248e-12
tyz 5.483e-13 3.287e-12 -1.896e-11 1.095e-11 -1.666e-12 7.857e-12 -8.149e-14 9.470e-12 2.980e-11 -2.198e-11 ... 5.658e-10 -2.556e-10 9.995e-11 2.427e-12 -5.129e-11 4.116e-11 5.419e-13 -4.190e-11 -1.739e-12 -2.480e-12
txz -9.097e-13 -1.659e-12 1.292e-11 1.107e-14 8.598e-13 4.500e-15 4.302e-14 -2.407e-12 -1.506e-11 -2.920e-11 ... -4.904e-11 1.143e-10 -1.736e-10 -1.090e-11 1.169e-10 6.750e-13 -1.821e-12 -2.833e-12 1.823e-11 -5.916e-11
omax 2.827e-12 1.347e-11 9.627e-12 -6.848e-12 1.507e-12 -7.303e-12 1.270e-13 2.351e-11 6.951e-11 1.329e-10 ... 7.561e-12 1.718e-09 1.181e-10 -2.693e-11 4.755e-10 9.342e-11 -7.056e-13 5.346e-10 4.176e-11 8.965e-11
omid -1.711e-12 2.342e-12 -1.448e-11 -3.640e-11 -1.278e-12 -1.307e-11 -2.423e-14 1.076e-12 1.780e-11 9.011e-11 ... -1.010e-10 1.326e-09 -1.515e-10 -3.609e-11 1.729e-10 -3.812e-11 -2.081e-12 -5.187e-11 9.724e-12 6.808e-11
omin -3.346e-12 -1.489e-12 -4.244e-11 -6.282e-11 -2.531e-12 -3.569e-11 -1.614e-13 -1.049e-11 -1.546e-11 -2.386e-11 ... -1.129e-09 2.452e-10 -3.158e-10 -6.204e-11 -1.609e-10 -2.299e-10 -5.093e-12 -2.354e-10 -2.144e-12 -1.286e-10
von_mises 5.539e-12 1.346e-11 4.513e-11 4.850e-11 3.580e-12 2.599e-11 2.498e-13 2.995e-11 7.416e-11 1.404e-10 ... 1.086e-09 1.321e-09 3.794e-10 3.154e-11 5.513e-10 2.816e-10 3.887e-12 6.966e-10 3.934e-11 2.083e-10
5594 oxx 6.555e-12 -1.819e-12 1.091e-11 8.390e-11 2.274e-13 4.388e-11 -9.237e-14 0.000e+00 -7.276e-12 -3.311e-10 ... 4.075e-10 -8.731e-10 -2.619e-10 3.956e-11 -3.783e-10 -1.019e-10 3.524e-12 1.164e-09 -2.819e-11 5.384e-10
oyy 4.595e-12 -9.095e-12 3.456e-11 6.924e-11 8.527e-13 5.718e-11 -6.750e-14 -3.911e-11 -8.185e-11 -2.519e-10 ... 7.276e-10 -2.285e-09 1.528e-10 3.365e-11 -3.747e-10 8.004e-11 4.150e-12 8.440e-10 -3.001e-11 2.692e-10
ozz 3.380e-12 -4.547e-12 1.182e-11 4.241e-11 7.958e-13 3.976e-11 7.105e-14 -1.819e-12 -7.276e-12 -1.774e-10 ... -2.037e-10 -1.834e-09 -1.819e-10 3.109e-11 -4.184e-10 -1.601e-10 3.482e-12 6.694e-10 -2.956e-11 4.075e-10
txy -2.199e-12 -1.364e-12 1.091e-11 -1.876e-11 1.137e-13 -1.165e-11 5.684e-14 -5.457e-12 -7.276e-12 9.004e-11 ... 5.821e-11 3.492e-10 7.276e-11 -2.490e-11 1.746e-10 6.548e-11 -1.648e-12 -6.694e-10 6.821e-12 -1.164e-10
tyz 6.181e-13 2.691e-12 -1.703e-11 1.158e-11 -1.780e-12 8.389e-12 -7.313e-14 8.704e-12 2.823e-11 -2.288e-11 ... 4.681e-10 -2.767e-10 1.057e-10 5.093e-12 -7.499e-11 5.553e-11 1.124e-12 2.552e-11 -2.556e-12 2.972e-12
txz 4.545e-13 6.079e-13 -1.598e-12 -7.263e-12 -4.852e-14 5.250e-15 4.510e-16 3.028e-12 -7.836e-12 -2.921e-11 ... 1.259e-10 -1.189e-10 -2.789e-11 -7.263e-12 -2.854e-11 7.875e-13 -9.116e-13 -3.305e-12 5.158e-14 -5.932e-11
omax 7.983e-12 -1.565e-12 4.670e-11 9.949e-11 2.610e-12 6.600e-11 1.052e-13 2.279e-12 8.356e-12 -1.489e-10 ... 9.420e-10 -7.606e-10 1.920e-10 6.404e-11 -1.791e-10 1.116e-10 6.267e-12 1.693e-09 -2.186e-11 5.986e-10
omid 4.047e-12 -3.299e-12 9.731e-12 5.795e-11 2.235e-13 4.149e-11 -4.489e-14 -1.311e-12 -1.319e-11 -2.209e-10 ... 3.986e-10 -1.768e-09 -1.867e-10 2.879e-11 -4.328e-10 -1.181e-10 2.730e-12 6.700e-10 -2.936e-11 3.924e-10
omin 2.501e-12 -1.060e-11 8.646e-13 3.810e-11 -9.573e-13 3.334e-11 -1.491e-13 -4.190e-11 -9.157e-11 -3.905e-10 ... -4.093e-10 -2.463e-09 -2.963e-10 1.148e-11 -5.595e-10 -1.753e-10 2.159e-12 3.149e-10 -3.655e-11 2.240e-10
von_mises 4.896e-12 8.303e-12 4.211e-11 5.426e-11 3.147e-12 2.945e-11 2.214e-13 4.249e-11 9.108e-11 2.149e-10 ... 1.178e-09 1.482e-09 4.438e-10 4.639e-11 3.355e-10 2.630e-10 3.854e-12 1.239e-09 1.272e-11 3.250e-10
5595 oxx 1.021e-11 -1.819e-12 2.910e-11 1.119e-10 9.095e-13 1.017e-10 -7.105e-14 -1.091e-11 -4.366e-11 -3.220e-10 ... -2.619e-10 -2.503e-09 -8.440e-10 9.663e-11 -1.128e-09 -4.075e-10 1.097e-11 3.318e-09 -7.549e-11 1.091e-09
oyy 2.387e-12 0.000e+00 -1.455e-11 1.000e-11 2.274e-12 2.001e-11 0.000e+00 2.910e-11 0.000e+00 -1.310e-10 ... -4.657e-10 -9.313e-10 -1.164e-10 8.185e-12 -1.746e-10 -1.164e-10 1.478e-12 9.313e-10 -1.091e-11 1.164e-10
ozz 8.843e-12 -1.819e-12 -3.638e-12 1.194e-10 -1.819e-12 9.447e-11 -1.776e-13 -7.276e-12 -5.821e-11 -3.820e-10 ... 4.366e-10 -3.143e-09 -6.694e-10 1.041e-10 -6.548e-10 -2.765e-10 6.850e-12 1.746e-09 -6.366e-11 7.858e-10
txy -3.659e-13 -1.819e-12 1.091e-11 -1.944e-11 2.274e-13 -4.604e-12 1.421e-14 -5.457e-12 -3.638e-12 2.274e-11 ... 8.731e-11 3.492e-10 1.455e-11 -3.752e-12 -8.731e-11 2.183e-11 -6.253e-13 -6.112e-10 1.137e-11 -1.164e-10
tyz -7.674e-13 -2.274e-12 1.273e-11 -9.891e-12 3.411e-13 -2.728e-12 4.974e-14 -7.276e-12 -1.455e-11 1.364e-11 ... -5.821e-11 2.037e-10 -1.601e-10 -1.285e-11 1.164e-10 0.000e+00 -1.393e-12 8.731e-11 1.046e-11 0.000e+00
txz -4.547e-13 -1.608e-12 5.418e-12 -1.455e-11 6.238e-13 -7.277e-12 1.413e-14 -4.065e-12 -1.836e-11 -2.908e-11 ... -1.095e-10 4.346e-13 -1.457e-10 -7.278e-12 8.721e-11 -1.401e-13 -1.819e-12 5.881e-13 1.454e-11 -5.801e-11
omax 1.035e-11 1.691e-12 3.361e-11 1.308e-10 2.359e-12 1.063e-10 1.643e-14 3.102e-11 3.446e-12 -1.279e-10 ... 4.588e-10 -8.399e-10 -6.981e-11 1.094e-10 -1.434e-10 -1.148e-10 1.166e-11 3.465e-09 -6.033e-12 1.115e-09
omid 8.815e-12 -2.472e-13 1.018e-12 1.054e-10 9.796e-13 9.029e-11 -7.365e-14 -4.874e-12 -3.191e-11 -3.115e-10 ... -2.516e-10 -2.574e-09 -6.276e-10 9.328e-11 -6.587e-10 -2.765e-10 6.614e-12 1.753e-09 -5.857e-11 7.758e-10
omin 2.276e-12 -5.082e-12 -2.372e-11 5.066e-12 -1.974e-12 1.962e-11 -1.915e-13 -1.523e-11 -7.340e-11 -3.955e-10 ... -4.983e-10 -3.163e-09 -9.324e-10 6.253e-12 -1.155e-09 -4.091e-10 1.025e-12 7.765e-10 -8.547e-11 1.026e-10
von_mises 7.427e-12 6.041e-12 4.980e-11 1.151e-10 3.834e-12 7.990e-11 1.806e-13 4.203e-11 6.662e-11 2.371e-10 ... 8.607e-10 2.092e-09 7.577e-10 9.612e-11 8.762e-10 2.553e-10 9.214e-12 2.358e-09 6.998e-11 8.926e-10

2250 rows × 33 columns

chexa_strain
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID NodeID Item
3684 0 exx 1.078e-19 -6.378e-21 3.494e-20 -5.056e-21 -4.111e-21 -8.712e-19 -1.602e-21 4.810e-20 -6.750e-20 3.478e-18 ... 5.009e-19 -3.660e-19 -3.466e-18 1.145e-19 -4.873e-19 -3.459e-18 5.628e-21 6.894e-18 -3.309e-20 -1.024e-20
eyy -1.694e-21 -2.711e-20 1.084e-19 -1.355e-20 2.541e-21 -8.470e-21 -4.235e-22 1.084e-19 0.000e+00 0.000e+00 ... 1.301e-18 -1.735e-18 3.795e-19 1.355e-19 -6.505e-19 3.253e-19 3.388e-21 -2.168e-18 -1.694e-20 -7.589e-19
ezz 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -1.084e-19 ... -1.084e-19 0.000e+00 0.000e+00 1.694e-21 0.000e+00 0.000e+00 0.000e+00 -2.711e-19 0.000e+00 3.388e-21
exy 3.049e-20 -1.084e-19 -4.337e-19 -8.877e-19 1.016e-20 -5.929e-19 8.470e-22 -4.337e-19 -3.903e-18 1.084e-18 ... 5.204e-18 -4.857e-17 1.518e-18 1.626e-18 -4.337e-18 4.337e-19 7.454e-20 0.000e+00 -3.253e-19 1.735e-18
eyz 6.776e-21 1.220e-19 -3.253e-19 -1.084e-19 1.355e-20 -5.421e-20 -4.235e-22 3.795e-19 9.758e-19 6.505e-19 ... 4.337e-19 -8.674e-19 5.421e-20 -5.082e-21 -2.602e-18 3.524e-19 0.000e+00 -2.385e-18 -3.253e-19 -5.760e-19
exz -1.084e-19 1.084e-19 -4.337e-19 -1.084e-19 5.421e-20 -1.084e-19 -1.016e-20 -4.337e-19 0.000e+00 -8.674e-19 ... 0.000e+00 3.469e-18 -2.385e-18 3.388e-20 5.204e-18 -1.409e-18 2.168e-19 8.890e-18 1.084e-18 1.084e-19
emax 1.316e-19 5.355e-20 2.935e-19 4.346e-19 2.792e-20 8.476e-20 4.384e-21 4.711e-19 1.980e-18 3.600e-18 ... 3.541e-18 2.335e-17 6.445e-19 9.384e-19 3.733e-18 4.050e-19 1.177e-19 9.045e-18 6.101e-19 5.836e-19
emid 5.434e-22 3.807e-20 2.046e-19 1.262e-20 -2.310e-22 2.516e-21 -4.569e-22 -1.204e-19 -3.970e-21 2.710e-19 ... -1.036e-19 -7.060e-20 2.297e-19 1.863e-21 -1.663e-18 7.385e-20 3.030e-21 -1.215e-18 -1.013e-19 3.288e-20
emin -2.601e-20 -1.251e-19 -3.548e-19 -4.658e-19 -2.926e-20 -9.670e-19 -5.952e-21 -1.942e-19 -2.044e-18 -5.013e-19 ... -1.744e-18 -2.538e-17 -3.961e-18 -6.885e-19 -3.208e-18 -3.612e-18 -1.117e-19 -3.375e-18 -5.589e-19 -1.382e-18
von_mises 9.742e-20 1.143e-19 4.059e-19 5.202e-19 3.302e-20 6.754e-19 5.971e-21 4.211e-19 2.323e-18 2.516e-18 ... 3.124e-18 2.814e-17 2.942e-18 9.428e-19 4.208e-18 2.575e-18 1.324e-19 7.662e-18 6.802e-19 1.171e-18
55 exx 1.381e-19 -3.388e-20 2.304e-19 1.287e-18 -1.186e-20 9.453e-19 5.294e-21 6.776e-20 -9.487e-20 -2.792e-18 ... 3.524e-19 -4.554e-18 5.353e-19 2.329e-21 -6.505e-19 2.944e-18 -2.711e-20 1.983e-17 -1.084e-19 5.612e-18
eyy -9.317e-21 -2.033e-20 -1.152e-19 7.115e-20 2.541e-21 5.760e-20 1.959e-21 -3.862e-19 -3.388e-19 -1.830e-18 ... 1.938e-18 -4.662e-18 5.218e-19 3.278e-19 1.084e-19 -2.153e-18 1.355e-20 7.047e-18 7.454e-20 4.625e-19
ezz -4.713e-20 -3.066e-21 1.024e-19 -2.074e-19 5.670e-21 -5.166e-19 9.982e-22 -1.794e-20 -1.948e-19 1.390e-18 ... -1.207e-18 -2.255e-20 4.324e-19 -5.802e-20 7.836e-19 3.454e-18 5.008e-20 -4.965e-18 2.012e-20 -4.652e-18
exy 1.762e-19 4.337e-19 -8.674e-19 8.538e-19 -3.388e-21 -1.179e-18 -1.694e-21 4.337e-19 -8.674e-19 -2.602e-18 ... -6.939e-18 -2.776e-17 -1.735e-18 4.337e-19 -8.674e-19 -8.674e-19 -1.355e-20 6.939e-18 -1.084e-19 6.505e-18
eyz 3.754e-21 9.391e-20 7.181e-20 -1.366e-19 -1.884e-20 1.216e-20 -1.611e-21 2.822e-19 1.240e-19 4.240e-19 ... -1.107e-18 4.086e-18 -2.184e-19 -1.775e-19 -1.038e-19 -2.446e-19 4.249e-20 -1.955e-18 -2.542e-19 2.853e-19
exz -3.349e-20 -3.850e-20 1.826e-19 -1.769e-20 -1.888e-20 -6.765e-20 -4.791e-21 -7.759e-19 -2.512e-19 -5.416e-19 ... -7.416e-19 -1.390e-18 1.241e-18 -1.143e-19 1.808e-18 -2.410e-18 3.172e-19 2.739e-18 3.307e-19 -1.881e-18
emax 1.801e-19 1.920e-19 5.317e-19 1.423e-18 1.519e-20 1.240e-18 6.410e-21 4.214e-19 2.741e-19 1.437e-18 ... 4.711e-18 9.658e-18 1.632e-18 4.575e-19 1.270e-18 4.436e-18 1.757e-19 2.075e-17 2.432e-19 7.237e-18
emid -4.040e-20 3.456e-21 1.077e-19 -4.044e-20 -1.266e-21 -2.362e-19 2.385e-21 -1.298e-19 -2.337e-19 -9.693e-19 ... -9.401e-19 -3.604e-19 3.593e-19 -7.529e-20 1.641e-19 2.009e-18 1.462e-20 6.311e-18 -3.244e-20 -1.033e-18
emin -5.811e-20 -2.527e-19 -4.218e-19 -2.312e-19 -1.757e-20 -5.176e-19 -5.437e-22 -6.281e-19 -6.689e-19 -3.700e-18 ... -2.687e-18 -1.854e-17 -5.018e-19 -1.101e-19 -1.193e-18 -2.199e-18 -1.538e-19 -5.157e-18 -2.245e-19 -4.783e-18
von_mises 1.533e-19 2.578e-19 5.516e-19 1.045e-18 1.891e-20 1.090e-18 4.031e-21 6.062e-19 5.450e-19 2.968e-18 ... 4.465e-18 1.650e-17 1.239e-18 3.674e-19 1.425e-18 3.876e-18 1.903e-19 1.499e-17 2.714e-19 7.101e-18
51 exx -5.845e-20 -2.372e-20 5.421e-20 -1.823e-18 -2.541e-21 4.405e-19 4.923e-21 4.743e-20 -1.626e-19 8.511e-18 ... -9.216e-19 -1.409e-18 6.383e-18 2.668e-20 1.626e-19 -4.293e-18 7.454e-20 -7.477e-17 2.711e-20 -9.834e-18
eyy -4.405e-20 1.016e-20 3.388e-20 2.372e-19 4.235e-21 -1.118e-19 -9.000e-22 6.099e-20 -1.897e-19 5.285e-19 ... 1.504e-18 -9.758e-18 -8.335e-19 1.976e-19 -5.963e-19 1.857e-18 1.355e-20 -2.074e-18 6.776e-21 1.687e-18
ezz -2.354e-20 3.421e-20 6.292e-20 -2.538e-19 -7.354e-21 2.775e-19 -2.473e-22 -8.297e-20 -3.244e-20 -4.237e-19 ... -1.521e-18 -5.731e-19 1.246e-18 2.547e-20 -4.913e-19 -4.450e-19 -3.431e-20 -1.861e-18 -2.174e-20 3.335e-19
exy -7.499e-21 -4.483e-20 -6.697e-19 -1.101e-19 -6.049e-21 3.924e-19 -3.621e-22 2.937e-19 -3.026e-19 -3.936e-19 ... 6.308e-19 -3.087e-17 6.302e-18 -1.235e-18 1.031e-17 5.484e-18 5.674e-20 5.685e-18 -6.018e-20 1.422e-18
eyz 3.420e-21 9.511e-20 6.609e-20 -1.397e-19 -1.824e-20 9.684e-21 -1.572e-21 2.861e-19 1.319e-19 4.342e-19 ... -1.097e-18 4.019e-18 -2.232e-19 -1.773e-19 -1.330e-19 -2.460e-19 4.615e-20 -1.948e-18 -2.578e-19 2.858e-19
exz -1.708e-20 -3.679e-23 4.332e-19 -1.418e-18 3.565e-22 -5.805e-19 -1.031e-20 -2.191e-19 8.515e-22 1.519e-18 ... -4.169e-19 -3.806e-20 -2.383e-18 -1.095e-19 8.714e-19 -2.455e-18 4.343e-19 2.947e-18 2.165e-19 -1.302e-19
emax -2.128e-20 7.327e-20 4.326e-19 2.487e-19 9.855e-21 6.907e-19 8.112e-21 2.054e-19 1.929e-20 8.579e-18 ... 1.648e-18 1.055e-17 7.770e-18 7.367e-19 4.966e-18 2.994e-18 2.496e-19 -9.779e-19 1.838e-19 1.745e-18
emid -4.369e-20 -8.801e-21 8.450e-20 1.020e-20 -2.974e-21 1.134e-19 -6.941e-22 8.676e-20 -6.794e-20 5.756e-19 ... -9.356e-19 -5.925e-19 1.072e-18 4.201e-20 -4.808e-19 -2.987e-19 7.893e-21 -2.814e-18 -1.103e-20 3.204e-19
emin -6.106e-20 -4.381e-20 -3.661e-19 -2.098e-18 -1.254e-20 -1.979e-19 -3.642e-21 -2.668e-19 -3.362e-19 -5.388e-19 ... -1.650e-18 -2.169e-17 -2.047e-18 -5.289e-19 -5.410e-18 -5.577e-18 -2.037e-19 -7.491e-17 -1.607e-19 -9.878e-18
von_mises 2.303e-20 6.939e-20 4.624e-19 1.492e-18 1.298e-20 5.206e-19 7.061e-21 2.836e-19 2.139e-19 5.743e-18 ... 2.003e-18 1.891e-17 5.792e-18 7.319e-19 5.993e-18 4.993e-18 2.620e-19 4.869e-17 1.995e-19 7.320e-18
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
5568 5593 exx 2.403e-20 -6.776e-20 4.879e-19 -1.863e-19 -6.099e-20 3.608e-19 -4.765e-21 1.626e-19 4.337e-19 2.819e-18 ... 1.691e-17 2.299e-17 1.084e-17 3.009e-18 -5.421e-19 5.855e-18 -1.681e-19 1.561e-17 -1.437e-18 -5.421e-18
eyy -1.973e-19 -2.890e-19 1.419e-18 -1.581e-18 2.508e-20 -1.499e-18 7.517e-21 -1.236e-18 -8.059e-20 2.225e-18 ... 9.085e-18 -9.186e-17 4.272e-18 1.129e-18 7.202e-18 1.405e-17 2.500e-19 -5.847e-17 -3.530e-20 -8.249e-18
ezz -3.731e-19 -7.183e-19 1.735e-18 -4.472e-18 1.423e-19 -3.158e-18 1.038e-20 -1.708e-18 -1.409e-18 7.454e-18 ... -3.773e-17 1.158e-16 -1.518e-17 -3.005e-18 2.765e-17 -6.505e-19 -4.942e-19 -2.342e-17 2.209e-18 -1.735e-17
exy 8.951e-20 -6.157e-19 3.295e-18 2.513e-18 6.968e-20 6.450e-19 4.244e-21 -1.608e-18 -3.259e-18 -4.253e-18 ... 3.128e-17 -9.132e-17 8.991e-18 3.766e-18 -1.350e-17 -4.728e-18 3.613e-19 2.721e-17 -4.604e-19 -2.319e-17
eyz 4.910e-20 1.118e-18 -3.098e-18 2.415e-18 -1.694e-19 2.209e-18 -9.028e-21 1.488e-18 4.710e-18 -4.552e-18 ... 9.645e-17 -1.186e-17 3.868e-17 -3.548e-19 2.104e-17 1.649e-17 1.681e-19 -3.957e-17 1.310e-18 -5.472e-18
exz 2.168e-19 5.545e-20 1.050e-18 -1.732e-18 1.534e-20 1.129e-21 9.702e-23 9.425e-19 -2.240e-18 3.446e-18 ... 3.517e-17 2.723e-17 -6.678e-18 -1.732e-18 1.400e-17 7.108e-18 -2.173e-19 -8.398e-17 8.785e-19 -1.412e-17
emax 6.116e-20 2.752e-19 3.372e-18 5.575e-19 1.871e-19 4.265e-19 1.376e-20 5.365e-19 3.143e-18 9.211e-18 ... 5.341e-17 1.186e-16 1.697e-17 4.268e-18 3.257e-17 1.779e-17 3.194e-19 4.707e-17 2.421e-18 5.424e-18
emid -2.060e-19 -2.099e-19 1.657e-18 -1.568e-18 -3.698e-23 -1.008e-18 4.532e-21 -7.861e-19 -1.004e-18 2.976e-18 ... 3.332e-18 3.617e-17 1.076e-17 -6.438e-21 9.936e-18 7.326e-18 -1.810e-19 -4.548e-17 -1.291e-19 -1.157e-17
emin -4.016e-19 -1.140e-18 -1.387e-18 -5.229e-18 -8.064e-20 -3.715e-18 -5.166e-21 -2.532e-18 -3.195e-18 3.106e-19 ... -6.847e-17 -1.078e-16 -2.780e-17 -3.130e-18 -8.200e-18 -5.862e-18 -5.507e-19 -6.787e-17 -1.555e-18 -2.487e-17
von_mises 2.682e-19 8.306e-19 2.783e-18 3.380e-18 1.586e-19 2.428e-18 1.093e-20 1.777e-18 3.717e-18 5.275e-18 ... 7.074e-17 1.323e-16 2.801e-17 4.288e-18 2.359e-17 1.368e-17 5.042e-19 7.036e-17 2.326e-18 1.754e-17
5594 exx -1.692e-19 1.626e-19 -8.674e-19 -3.131e-18 -5.421e-20 -1.504e-18 -2.118e-21 2.168e-19 1.735e-18 5.638e-18 ... -1.041e-17 1.041e-16 1.214e-17 -2.521e-18 2.429e-17 7.806e-18 -2.778e-19 -7.980e-17 9.216e-19 -4.337e-17
eyy 5.468e-20 -1.330e-18 4.611e-18 2.576e-18 3.187e-19 1.724e-18 1.519e-20 -4.866e-18 -1.204e-17 -1.193e-17 ... 4.759e-17 -1.755e-16 1.144e-17 4.311e-18 -1.502e-17 2.444e-17 2.753e-19 -6.274e-17 -9.711e-19 -4.703e-18
ezz 2.646e-19 -2.846e-19 2.548e-18 3.608e-18 1.338e-19 1.425e-18 -9.529e-22 -4.608e-19 -2.927e-18 -9.216e-18 ... -2.602e-18 -8.890e-17 -1.735e-17 1.708e-18 -2.060e-17 -1.301e-17 2.223e-19 6.418e-17 -1.111e-18 2.038e-17
exy -5.734e-19 -5.421e-19 3.469e-18 -4.499e-18 1.084e-19 -9.392e-18 2.202e-20 -2.168e-18 -3.469e-18 3.057e-17 ... 2.082e-17 1.318e-16 4.163e-17 -3.849e-18 2.776e-17 1.388e-17 -3.930e-19 -2.637e-16 3.469e-18 -3.469e-17
eyz 1.722e-19 8.673e-19 -6.071e-18 2.874e-18 -4.333e-19 2.698e-18 -2.025e-20 1.732e-18 6.942e-18 -6.788e-18 ... 1.317e-16 -1.099e-16 4.880e-17 8.306e-19 -1.440e-17 2.102e-17 1.587e-19 -2.183e-17 -1.345e-19 -4.070e-19
exz 2.168e-19 5.368e-20 1.058e-18 -1.731e-18 1.564e-20 1.317e-21 1.132e-22 5.032e-19 -2.252e-18 3.443e-18 ... 3.525e-17 2.714e-17 -6.634e-18 -1.732e-18 2.790e-17 7.137e-18 -2.174e-19 -8.410e-17 8.803e-19 -1.416e-17
emax 2.957e-19 2.165e-19 6.947e-18 5.136e-18 4.650e-19 5.385e-18 2.394e-20 4.455e-19 2.463e-18 1.449e-17 ... 9.624e-17 1.189e-16 3.731e-17 4.938e-18 3.120e-17 2.983e-17 4.056e-19 8.624e-17 1.990e-18 2.129e-17
emid 2.485e-19 -1.406e-19 1.258e-18 1.846e-18 1.019e-20 1.214e-18 -1.406e-21 -2.994e-19 -2.373e-18 -8.080e-18 ... -1.167e-17 -6.361e-17 4.260e-18 1.697e-18 -1.030e-17 5.294e-18 1.661e-19 4.416e-17 -1.065e-18 1.659e-18
emin -3.940e-19 -1.528e-18 -1.914e-18 -3.928e-18 -7.691e-20 -4.954e-18 -1.042e-20 -5.256e-18 -1.333e-17 -2.191e-17 ... -4.999e-17 -2.156e-16 -3.533e-17 -3.137e-18 -3.223e-17 -1.589e-17 -3.519e-19 -2.087e-16 -2.085e-18 -5.064e-17
von_mises 4.449e-19 1.064e-18 5.184e-18 5.298e-18 3.360e-19 6.006e-18 2.057e-20 3.578e-18 9.340e-18 2.122e-17 ... 8.755e-17 1.933e-16 4.200e-17 4.693e-18 3.719e-17 2.642e-17 4.471e-19 1.842e-16 2.449e-18 4.293e-17
5595 exx -2.647e-19 -4.879e-19 1.518e-18 -3.253e-19 6.776e-20 -2.236e-19 5.929e-21 -8.674e-19 -3.469e-18 -5.746e-18 ... 1.388e-17 -5.204e-17 1.735e-18 4.269e-18 -9.541e-18 6.939e-18 2.778e-19 -3.469e-17 8.132e-19 -1.214e-17
eyy 1.084e-19 1.084e-18 -5.204e-18 7.589e-19 -1.626e-19 4.337e-19 -1.016e-20 3.469e-18 5.204e-18 -8.674e-19 ... -4.163e-17 8.327e-17 -2.082e-17 -1.030e-18 -3.469e-18 -1.388e-17 -2.711e-20 5.551e-17 -8.674e-19 2.082e-17
ezz 2.768e-19 -2.168e-19 1.084e-18 2.751e-18 8.132e-20 1.525e-18 8.470e-22 8.674e-19 -2.168e-18 -9.541e-18 ... 6.939e-17 -1.006e-16 0.000e+00 3.009e-18 -1.475e-17 -6.072e-18 1.626e-19 3.816e-17 -4.012e-18 1.561e-17
exy -6.785e-19 -1.084e-19 8.674e-19 -6.451e-18 0.000e+00 -6.017e-18 8.470e-21 -8.674e-19 8.674e-19 1.149e-17 ... 0.000e+00 2.220e-16 3.469e-18 -3.198e-18 5.204e-18 1.561e-17 -4.676e-19 -2.359e-16 3.469e-18 -3.123e-17
eyz -1.618e-19 -8.674e-19 5.204e-18 -2.223e-18 8.132e-20 -2.711e-19 1.016e-20 -4.337e-19 -1.735e-18 1.518e-18 ... -8.327e-17 1.110e-16 -3.816e-17 -1.572e-18 1.908e-17 0.000e+00 -2.372e-19 2.776e-17 1.301e-18 3.469e-18
exz 2.169e-19 1.767e-19 1.257e-19 -1.735e-18 1.318e-20 -2.344e-22 -2.014e-23 9.827e-19 -2.154e-18 3.474e-18 ... 3.460e-17 2.786e-17 -6.993e-18 -1.735e-18 1.385e-17 6.904e-18 -2.167e-19 -8.312e-17 -8.697e-19 -1.383e-17
emax 4.201e-19 1.219e-18 2.097e-18 3.628e-18 8.983e-20 3.138e-18 7.263e-21 3.539e-18 5.340e-18 3.137e-18 ... 8.696e-17 1.575e-16 1.271e-17 4.935e-18 4.451e-18 1.020e-17 4.118e-19 1.481e-16 1.900e-18 2.847e-17
emid 1.694e-19 -3.205e-19 1.462e-18 2.923e-18 6.585e-20 1.520e-18 2.331e-21 9.571e-19 -1.697e-18 -8.620e-18 ... 1.062e-17 -9.870e-17 3.566e-19 3.000e-18 -1.004e-17 -6.615e-18 2.196e-19 3.127e-17 -1.691e-18 1.515e-17
emin -4.690e-19 -5.191e-19 -6.161e-18 -3.366e-18 -1.692e-19 -2.923e-18 -1.298e-20 -1.027e-18 -4.077e-18 -1.067e-17 ... -5.595e-17 -1.282e-16 -3.215e-17 -1.687e-18 -2.217e-17 -1.660e-17 -2.180e-19 -1.204e-16 -4.275e-18 -1.933e-17
von_mises 5.294e-19 1.099e-18 5.306e-18 4.446e-18 1.653e-19 3.624e-18 1.219e-20 2.644e-18 5.654e-18 8.604e-18 ... 8.258e-17 1.814e-16 2.675e-17 3.931e-18 1.539e-17 1.564e-17 3.727e-19 1.555e-16 3.581e-18 2.848e-17

2250 rows × 33 columns

cquad4_composite_strain
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID Layer Item
3463 1 e11 -6.793e-07 -9.809e-07 5.514e-06 -1.388e-05 7.473e-07 -7.614e-06 1.155e-08 -5.200e-06 -5.986e-06 2.798e-05 ... 1.362e-04 -3.191e-04 1.128e-04 -1.727e-04 -6.279e-05 -2.853e-06 2.803e-05 1.090e-04 3.078e-05 6.314e-05
e22 2.479e-06 -4.321e-07 8.334e-06 3.326e-05 5.138e-07 1.928e-05 2.949e-08 1.676e-06 -1.488e-06 -5.691e-05 ... -3.366e-04 8.450e-04 -2.043e-04 3.744e-04 1.122e-04 4.924e-05 -6.505e-05 -4.702e-04 -7.657e-05 -2.276e-04
e12 -2.687e-06 7.023e-06 -5.002e-05 -1.753e-05 -1.139e-06 -8.533e-06 -1.664e-07 2.455e-05 4.005e-05 -1.220e-06 ... 3.029e-04 -4.798e-04 1.809e-05 -1.878e-04 3.262e-05 -1.198e-04 5.236e-05 8.081e-04 6.233e-05 3.154e-04
e1z -8.396e-09 5.616e-09 -7.103e-08 5.674e-10 -2.008e-08 -3.301e-08 -2.806e-10 2.947e-08 2.636e-08 -3.746e-08 ... -1.042e-06 -2.030e-06 -1.241e-06 8.061e-07 -2.463e-07 -5.559e-07 -2.187e-07 1.717e-06 -5.025e-08 6.918e-07
e2z 2.357e-08 -1.454e-08 1.753e-07 1.474e-08 5.575e-08 9.862e-08 5.825e-10 -8.195e-08 -7.061e-08 1.227e-08 ... 3.111e-06 4.479e-06 3.189e-06 -2.198e-06 6.080e-07 1.233e-06 5.988e-07 -3.230e-06 1.174e-07 -1.359e-06
angle -6.981e+01 4.723e+01 -4.661e+01 -7.980e+01 -3.921e+01 -8.120e+01 -4.808e+01 5.282e+01 4.820e+01 -4.116e-01 ... 1.632e+01 -7.880e+01 1.633e+00 -8.053e+01 8.472e+01 -5.675e+01 1.468e+01 2.718e+01 1.507e+01 2.366e+01
major 2.973e-06 2.816e-06 3.198e-05 3.484e-05 1.212e-06 1.994e-05 1.042e-07 1.099e-05 1.641e-05 2.798e-05 ... 1.806e-04 8.925e-04 1.131e-04 3.900e-04 1.137e-04 8.850e-05 3.489e-05 3.166e-04 3.917e-05 1.322e-04
minor -1.173e-06 -4.229e-06 -1.813e-05 -1.546e-05 4.900e-08 -8.274e-06 -6.318e-08 -1.451e-05 -2.389e-05 -5.692e-05 ... -3.810e-04 -3.666e-04 -2.046e-04 -1.883e-04 -6.430e-05 -4.211e-05 -7.191e-05 -6.777e-04 -8.496e-05 -2.967e-04
max_shear 4.147e-06 7.045e-06 5.010e-05 5.030e-05 1.163e-06 2.822e-05 1.674e-07 2.550e-05 4.030e-05 8.490e-05 ... 5.616e-04 1.259e-03 3.176e-04 5.784e-04 1.780e-04 1.306e-04 1.068e-04 9.943e-04 1.241e-04 4.289e-04
2 e11 -9.429e-07 -7.014e-07 3.144e-06 -1.477e-05 2.981e-07 -9.079e-06 -4.451e-09 -4.268e-06 -4.449e-06 2.808e-05 ... 1.051e-04 -3.817e-04 8.084e-05 -1.581e-04 -7.325e-05 -1.616e-05 2.407e-05 1.495e-04 2.975e-05 8.229e-05
e22 2.678e-06 -8.541e-07 9.534e-06 3.779e-05 -6.499e-07 2.164e-05 5.841e-08 1.158e-06 -4.322e-06 -6.277e-05 ... -3.031e-04 8.746e-04 -1.857e-04 3.858e-04 1.311e-04 5.208e-05 -6.764e-05 -4.657e-04 -7.765e-05 -2.328e-04
e12 -2.075e-06 6.765e-06 -4.305e-05 -2.414e-05 3.463e-06 -7.801e-06 -1.621e-07 2.197e-05 3.982e-05 1.179e-05 ... 3.480e-04 -2.887e-04 9.562e-05 -2.648e-04 3.082e-05 -7.673e-05 7.190e-05 6.428e-04 6.901e-05 2.529e-04
e1z -7.435e-07 4.973e-07 -6.290e-06 5.024e-08 -1.778e-06 -2.923e-06 -2.485e-08 2.610e-06 2.335e-06 -3.317e-06 ... -9.231e-05 -1.798e-04 -1.099e-04 7.138e-05 -2.181e-05 -4.923e-05 -1.937e-05 1.521e-04 -4.450e-06 6.127e-05
e2z 4.269e-06 -2.633e-06 3.176e-05 2.671e-06 1.010e-05 1.786e-05 1.055e-07 -1.484e-05 -1.279e-05 2.222e-06 ... 5.635e-04 8.114e-04 5.776e-04 -3.981e-04 1.101e-04 2.233e-04 1.085e-04 -5.851e-04 2.127e-05 -2.462e-04
angle -7.509e+01 4.435e+01 -4.922e+01 -7.767e+01 3.734e+01 -8.288e+01 -5.560e+01 5.194e+01 4.509e+01 3.698e+00 ... 2.023e+01 -8.353e+01 9.868e+00 -7.702e+01 8.571e+01 -6.582e+01 1.905e+01 2.313e+01 1.636e+01 1.938e+01
major 2.954e-06 2.605e-06 2.810e-05 4.043e-05 1.619e-06 2.213e-05 1.139e-07 9.761e-06 1.552e-05 2.846e-05 ... 1.692e-04 8.910e-04 8.916e-05 4.163e-04 1.322e-04 6.930e-05 3.648e-05 2.867e-04 3.988e-05 1.268e-04
minor -1.219e-06 -4.161e-06 -1.542e-05 -1.741e-05 -1.971e-06 -9.567e-06 -5.997e-08 -1.287e-05 -2.430e-05 -6.315e-05 ... -3.672e-04 -3.981e-04 -1.940e-04 -1.886e-04 -7.440e-05 -3.338e-05 -8.005e-05 -6.030e-04 -8.778e-05 -2.773e-04
max_shear 4.173e-06 6.766e-06 4.352e-05 5.784e-05 3.590e-06 3.169e-05 1.739e-07 2.263e-05 3.982e-05 9.161e-05 ... 5.364e-04 1.289e-03 2.832e-04 6.050e-04 2.066e-04 1.027e-04 1.165e-04 8.897e-04 1.277e-04 4.040e-04
3 e11 -1.206e-06 -4.218e-07 7.749e-07 -1.565e-05 -1.511e-07 -1.054e-05 -2.045e-08 -3.337e-06 -2.912e-06 2.819e-05 ... 7.394e-05 -4.444e-04 4.887e-05 -1.436e-04 -8.371e-05 -2.947e-05 2.011e-05 1.899e-04 2.871e-05 1.014e-04
e22 2.876e-06 -1.276e-06 1.073e-05 4.232e-05 -1.814e-06 2.399e-05 8.733e-08 6.399e-07 -7.155e-06 -6.862e-05 ... -2.695e-04 9.043e-04 -1.671e-04 3.972e-04 1.500e-04 5.491e-05 -7.022e-05 -4.613e-04 -7.873e-05 -2.380e-04
e12 -1.464e-06 6.506e-06 -3.607e-05 -3.075e-05 8.065e-06 -7.069e-06 -1.578e-07 1.939e-05 3.959e-05 2.480e-05 ... 3.931e-04 -9.758e-05 1.732e-04 -3.419e-04 2.902e-05 -3.370e-05 9.143e-05 4.774e-04 7.569e-05 1.904e-04
e1z 0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 ... 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 -0.000e+00
e2z -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 ... -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 0.000e+00
angle -8.014e+01 4.126e+01 -5.272e+01 -7.603e+01 3.918e+01 -8.422e+01 -6.216e+01 5.080e+01 4.194e+01 7.185e+00 ... 2.443e+01 -8.793e+01 1.936e+01 -7.385e+01 8.646e+01 -7.912e+01 2.267e+01 1.812e+01 1.758e+01 1.465e+01
major 3.003e-06 2.432e-06 2.446e-05 4.614e-05 3.135e-06 2.435e-05 1.290e-07 8.548e-06 1.487e-05 2.975e-05 ... 1.632e-04 9.061e-04 7.929e-05 4.467e-04 1.509e-04 5.815e-05 3.921e-05 2.680e-04 4.070e-05 1.263e-04
minor -1.334e-06 -4.130e-06 -1.296e-05 -1.948e-05 -5.099e-06 -1.090e-05 -6.212e-08 -1.125e-05 -2.494e-05 -7.018e-05 ... -3.588e-04 -4.462e-04 -1.975e-04 -1.931e-04 -8.461e-05 -3.271e-05 -8.932e-05 -5.394e-04 -9.072e-05 -2.629e-04
max_shear 4.337e-06 6.562e-06 3.742e-05 6.562e-05 8.234e-06 3.525e-05 1.911e-07 1.979e-05 3.981e-05 9.993e-05 ... 5.220e-04 1.352e-03 2.768e-04 6.398e-04 2.355e-04 9.086e-05 1.285e-04 8.074e-04 1.314e-04 3.892e-04
3604 1 e11 -1.014e-06 2.576e-06 -1.840e-05 -1.312e-05 1.252e-06 -4.688e-06 -5.126e-08 8.111e-06 1.490e-05 1.270e-05 ... 1.692e-04 -2.106e-04 6.067e-05 -1.310e-04 1.494e-05 -3.013e-05 3.194e-05 2.691e-04 3.210e-05 1.042e-04
e22 2.378e-06 -5.294e-06 4.391e-05 2.630e-05 1.958e-06 1.153e-05 7.460e-08 -1.730e-05 -3.008e-05 -3.321e-05 ... -4.409e-04 5.634e-04 -2.067e-04 3.246e-04 -4.746e-05 3.998e-05 -7.734e-05 -5.163e-04 -7.205e-05 -2.167e-04
e12 -1.697e-06 2.965e-06 -3.709e-05 8.999e-06 -1.434e-05 -5.064e-06 -1.703e-08 1.374e-05 1.554e-05 -7.637e-06 ... -1.429e-04 -3.132e-04 -1.509e-04 1.975e-04 7.420e-05 -2.766e-05 -3.510e-05 3.584e-05 -2.814e-05 2.515e-05
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4553 3 major 1.463e-06 1.852e-07 5.046e-06 4.602e-06 8.778e-07 3.670e-06 2.169e-08 1.266e-06 2.192e-06 2.071e-05 ... 2.363e-04 7.102e-04 1.437e-04 6.136e-05 1.113e-04 8.582e-05 8.674e-06 3.870e-04 3.973e-06 1.706e-04
minor -4.703e-07 -8.583e-07 -4.407e-06 -1.137e-06 -2.831e-07 -8.655e-07 -9.969e-09 -5.422e-06 -8.906e-06 -1.014e-05 ... -6.219e-04 -2.094e-03 -4.277e-04 -2.117e-05 -3.650e-04 -5.866e-05 -3.035e-06 -7.282e-04 -1.298e-05 -3.676e-04
max_shear 1.933e-06 1.044e-06 9.453e-06 5.738e-06 1.161e-06 4.535e-06 3.166e-08 6.688e-06 1.110e-05 3.085e-05 ... 8.582e-04 2.804e-03 5.714e-04 8.252e-05 4.763e-04 1.445e-04 1.171e-05 1.115e-03 1.695e-05 5.382e-04
4554 1 e11 1.877e-07 -6.893e-08 3.346e-07 2.773e-06 -1.911e-07 1.909e-06 3.015e-09 -2.814e-08 -4.295e-08 -9.573e-06 ... 5.382e-05 1.557e-04 1.500e-05 -5.557e-06 2.526e-05 -2.679e-05 2.009e-06 1.668e-04 1.999e-07 6.087e-05
e22 -6.657e-07 5.956e-07 -2.769e-06 -8.927e-06 -8.811e-08 -7.057e-06 6.816e-09 1.777e-06 1.802e-06 3.316e-05 ... -2.646e-04 -5.652e-04 -8.909e-05 1.828e-05 -5.833e-05 1.107e-04 -3.217e-06 -6.990e-04 7.151e-07 -2.695e-04
e12 2.138e-07 -4.020e-07 2.726e-06 6.680e-06 2.670e-07 5.764e-06 -2.388e-08 -8.564e-07 6.523e-07 -3.596e-05 ... 4.662e-04 1.212e-03 2.235e-04 -3.206e-05 1.765e-04 -1.445e-04 -3.226e-06 9.691e-04 1.210e-06 4.017e-04
e1z -5.334e-09 5.274e-09 -4.456e-08 -4.859e-08 -4.368e-09 -3.819e-08 -4.365e-11 2.288e-08 3.471e-08 1.420e-07 ... 3.078e-07 -1.097e-06 9.689e-07 -1.735e-08 -4.014e-07 8.952e-07 -2.757e-08 -4.288e-06 6.422e-08 -1.144e-06
e2z 1.802e-08 -1.871e-08 1.263e-07 1.695e-07 6.878e-09 1.304e-07 8.833e-11 -7.649e-08 -1.187e-07 -4.630e-07 ... 2.461e-07 -2.984e-06 -1.933e-06 6.884e-08 -9.924e-07 -1.994e-06 1.216e-07 1.006e-05 -1.345e-07 2.974e-06
angle 7.033e+00 -7.441e+01 2.065e+01 1.486e+01 5.554e+01 1.637e+01 -4.952e+01 -7.731e+01 8.026e+01 -6.996e+01 ... 2.783e+01 2.963e+01 3.252e+01 -6.332e+01 3.233e+01 -6.679e+01 -1.584e+01 2.411e+01 5.653e+01 2.528e+01
major 2.009e-07 6.516e-07 8.483e-07 3.659e-06 3.497e-09 2.756e-06 1.701e-08 1.873e-06 1.858e-06 3.972e-05 ... 1.769e-04 5.003e-04 8.625e-05 2.634e-05 8.111e-05 1.417e-04 2.467e-06 3.837e-04 1.115e-06 1.558e-04
minor -6.789e-07 -1.250e-07 -3.282e-06 -9.814e-06 -2.827e-07 -7.904e-06 -7.176e-09 -1.246e-07 -9.891e-08 -1.613e-05 ... -3.877e-04 -9.098e-04 -1.603e-04 -1.361e-05 -1.142e-04 -5.777e-05 -3.675e-06 -9.159e-04 -2.001e-07 -3.644e-04
max_shear 8.798e-07 7.766e-07 4.130e-06 1.347e-05 2.862e-07 1.066e-05 2.418e-08 1.998e-06 1.957e-06 5.585e-05 ... 5.646e-04 1.410e-03 2.466e-04 3.995e-05 1.953e-04 1.995e-04 6.141e-06 1.300e-03 1.315e-06 5.202e-04
2 e11 -2.837e-09 1.615e-07 -1.503e-06 7.951e-07 -2.717e-07 4.551e-07 1.842e-09 8.729e-07 1.386e-06 -4.114e-06 ... 5.362e-05 1.569e-04 4.397e-05 -5.825e-06 2.953e-05 3.915e-06 5.344e-07 1.379e-05 1.634e-06 1.614e-05
e22 -2.531e-08 3.857e-08 -6.314e-07 -3.391e-06 1.610e-07 -2.711e-06 7.814e-09 -5.891e-07 -1.639e-06 2.038e-05 ... -2.675e-04 -7.760e-04 -1.490e-04 2.251e-05 -1.216e-04 6.003e-05 7.052e-07 -4.458e-04 -2.406e-06 -1.962e-04
e12 -1.297e-07 -3.429e-07 5.406e-06 4.940e-06 2.530e-08 4.123e-06 -2.199e-08 -2.483e-07 1.012e-06 -3.553e-05 ... 4.981e-04 1.444e-03 2.420e-04 -3.905e-05 2.283e-04 -1.552e-04 -3.749e-06 1.035e-03 1.928e-06 4.292e-04
e1z -4.723e-07 4.670e-07 -3.946e-06 -4.303e-06 -3.868e-07 -3.382e-06 -3.865e-09 2.026e-06 3.074e-06 1.257e-05 ... 2.726e-05 -9.710e-05 8.580e-05 -1.537e-06 -3.555e-05 7.927e-05 -2.442e-06 -3.797e-04 5.687e-06 -1.013e-04
e2z 3.264e-06 -3.390e-06 2.287e-05 3.070e-05 1.246e-06 2.361e-05 1.600e-08 -1.385e-05 -2.151e-05 -8.387e-05 ... 4.457e-05 -5.404e-04 -3.502e-04 1.247e-05 -1.798e-04 -3.611e-04 2.203e-05 1.822e-03 -2.436e-05 5.386e-04
angle -4.008e+01 -3.514e+01 4.958e+01 2.486e+01 8.833e+01 2.624e+01 -5.260e+01 -4.820e+00 9.250e+00 -6.229e+01 ... 2.860e+01 2.856e+01 2.572e+01 -6.298e+01 2.825e+01 -5.494e+01 -4.630e+01 3.302e+01 1.276e+01 3.184e+01
major 5.173e-08 2.822e-07 1.671e-06 1.940e-06 1.614e-07 1.471e-06 1.622e-08 8.834e-07 1.468e-06 2.971e-05 ... 1.894e-04 5.498e-04 1.023e-04 3.247e-05 9.088e-05 1.145e-04 2.496e-06 3.501e-04 1.852e-06 1.494e-04
minor -7.988e-08 -8.213e-08 -3.805e-06 -4.536e-06 -2.720e-07 -3.727e-06 -6.564e-09 -5.995e-07 -1.722e-06 -1.345e-05 ... -4.032e-04 -1.169e-03 -2.073e-04 -1.578e-05 -1.829e-04 -5.054e-05 -1.257e-06 -7.821e-04 -2.624e-06 -3.295e-04
max_shear 1.316e-07 3.643e-07 5.476e-06 6.475e-06 4.334e-07 5.198e-06 2.278e-08 1.483e-06 3.190e-06 4.316e-05 ... 5.926e-04 1.719e-03 3.096e-04 4.825e-05 2.738e-04 1.650e-04 3.753e-06 1.132e-03 4.477e-06 4.788e-04
3 e11 -1.934e-07 3.918e-07 -3.340e-06 -1.183e-06 -3.523e-07 -9.991e-07 6.699e-10 1.774e-06 2.815e-06 1.345e-06 ... 5.342e-05 1.581e-04 7.293e-05 -6.093e-06 3.380e-05 3.462e-05 -9.403e-07 -1.392e-04 3.068e-06 -2.859e-05
e22 6.150e-07 -5.184e-07 1.506e-06 2.145e-06 4.101e-07 1.636e-06 8.811e-09 -2.955e-06 -5.081e-06 7.603e-06 ... -2.703e-04 -9.869e-04 -2.089e-04 2.674e-05 -1.848e-04 9.359e-06 4.627e-06 -1.926e-04 -5.527e-06 -1.229e-04
e12 -4.732e-07 -2.838e-07 8.086e-06 3.200e-06 -2.164e-07 2.481e-06 -2.009e-08 3.597e-07 1.372e-06 -3.511e-05 ... 5.300e-04 1.675e-03 2.605e-04 -4.604e-05 2.801e-04 -1.659e-04 -4.272e-06 1.100e-03 2.646e-06 4.566e-04
e1z 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 ... -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00
e2z -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00
angle -7.483e+01 -8.659e+00 6.047e+01 6.806e+01 -8.208e+01 6.836e+01 -5.603e+01 2.175e+00 4.929e+00 -5.005e+01 ... 2.929e+01 2.782e+01 2.137e+01 -6.274e+01 2.602e+01 -4.067e+01 -7.125e+01 4.361e+01 8.554e+00 3.916e+01
major 6.792e-07 4.135e-07 3.796e-06 2.789e-06 4.252e-07 2.128e-06 1.558e-08 1.781e-06 2.874e-06 2.231e-05 ... 2.021e-04 6.001e-04 1.239e-04 3.860e-05 1.022e-04 1.059e-04 5.352e-06 3.848e-04 3.267e-06 1.573e-04
minor -2.576e-07 -5.400e-07 -5.630e-06 -1.827e-06 -3.673e-07 -1.491e-06 -6.099e-09 -2.961e-06 -5.140e-06 -1.336e-05 ... -4.189e-04 -1.429e-03 -2.599e-04 -1.795e-05 -2.532e-04 -6.190e-05 -1.665e-06 -7.167e-04 -5.726e-06 -3.089e-04
max_shear 9.368e-07 9.535e-07 9.426e-06 4.617e-06 7.925e-07 3.620e-06 2.168e-08 4.742e-06 8.014e-06 3.566e-05 ... 6.210e-04 2.029e-03 3.838e-04 5.655e-05 3.553e-04 1.678e-04 7.018e-06 1.101e-03 8.993e-06 4.662e-04

20088 rows × 33 columns

ctria3_composite_strain
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
Freq 8.359 9.508 15.666 20.237 20.306 20.555 21.500 21.706 21.725 28.536 ... 80.076 86.487 88.168 88.477 89.923 94.290 94.368 96.044 98.702 98.893
Eigenvalue 2758.149 3568.632 9689.306 16168.100 16278.223 16679.709 18248.434 18600.697 18632.551 32147.814 ... 253140.875 295297.750 306885.906 309040.656 319227.719 350984.500 351566.188 364166.156 384601.344 386090.438
Radians 52.518 59.738 98.434 127.154 127.586 129.150 135.087 136.384 136.501 179.298 ... 503.131 543.413 553.973 555.914 565.002 592.439 592.930 603.462 620.162 621.362
ElementID Layer Item
3730 1 e11 6.406e-07 -1.626e-06 1.112e-05 2.861e-06 -1.753e-06 -2.409e-07 1.590e-08 -5.741e-06 -8.777e-06 9.841e-06 ... -2.039e-04 2.749e-04 2.795e-05 -3.791e-05 8.208e-08 1.044e-04 4.612e-06 -6.001e-04 2.912e-06 -1.644e-04
e22 -3.780e-08 8.248e-07 -2.730e-06 5.395e-06 -1.033e-06 3.369e-06 2.840e-08 4.743e-06 4.819e-06 -5.307e-06 ... -7.709e-07 4.483e-05 -6.071e-05 5.201e-05 5.386e-06 -5.341e-05 -6.011e-06 2.783e-04 -3.733e-06 4.471e-05
e12 5.593e-07 -1.254e-06 1.232e-05 5.224e-06 4.416e-06 9.570e-06 5.163e-08 -4.779e-06 -9.678e-06 -3.516e-05 ... 5.300e-04 -3.149e-04 4.372e-05 1.149e-08 5.692e-07 -1.952e-04 -2.003e-06 1.173e-03 -7.528e-06 2.861e-04
e1z 5.847e-09 2.103e-08 -1.130e-07 7.474e-08 1.078e-08 7.962e-08 -7.384e-10 6.694e-08 1.309e-07 -4.199e-07 ... 3.302e-06 -1.345e-06 1.067e-06 -4.962e-07 -2.659e-07 -2.598e-07 1.982e-07 3.247e-06 3.058e-08 1.226e-06
e2z -1.625e-09 -1.163e-08 3.538e-08 -6.998e-08 2.461e-08 -2.415e-08 -1.036e-10 -6.220e-08 -8.490e-08 -3.677e-08 ... 2.251e-06 -3.551e-06 2.776e-07 -4.879e-07 -5.536e-08 -6.877e-07 9.451e-08 3.997e-06 8.797e-09 1.474e-06
angle 1.975e+01 -7.645e+01 2.082e+01 5.794e+01 4.963e+01 5.533e+01 5.181e+01 -7.775e+01 -7.228e+01 -3.335e+01 ... 5.549e+01 -2.693e+01 1.312e+01 9.000e+01 8.694e+01 -2.552e+01 -5.338e+00 6.341e+01 -2.428e+01 6.309e+01
major 7.410e-07 9.758e-07 1.346e-05 7.031e-06 8.438e-07 6.678e-06 4.871e-08 5.262e-06 6.366e-06 2.141e-05 ... 1.814e-04 3.548e-04 3.305e-05 5.201e-05 5.401e-06 1.510e-04 4.706e-06 5.720e-04 4.610e-06 1.173e-04
minor -1.382e-07 -1.777e-06 -5.072e-06 1.225e-06 -3.630e-06 -3.550e-06 -4.408e-09 -6.260e-06 -1.032e-05 -1.687e-05 ... -3.861e-04 -3.514e-05 -6.581e-05 -3.791e-05 6.685e-08 -1.000e-04 -6.105e-06 -8.938e-04 -5.431e-06 -2.371e-04
max_shear 8.792e-07 2.753e-06 1.853e-05 5.806e-06 4.474e-06 1.023e-05 5.312e-08 1.152e-05 1.669e-05 3.828e-05 ... 5.676e-04 3.900e-04 9.885e-05 8.992e-05 5.334e-06 2.510e-04 1.081e-05 1.466e-03 1.004e-05 3.544e-04
2 e11 7.015e-07 -1.008e-06 7.626e-06 4.839e-06 -2.014e-06 1.279e-06 -1.000e-09 -3.572e-06 -4.985e-06 9.226e-07 ... -1.456e-04 2.342e-04 3.214e-05 -4.708e-05 -9.198e-06 8.697e-05 9.984e-06 -4.756e-04 4.639e-06 -1.206e-04
e22 -5.279e-08 5.945e-09 4.250e-07 2.683e-06 3.276e-08 2.302e-06 2.730e-08 7.934e-07 -8.433e-07 -6.843e-06 ... 9.070e-05 -1.247e-04 -3.749e-05 3.704e-05 2.871e-06 -7.153e-05 -6.259e-06 3.837e-04 -6.762e-06 8.584e-05
e12 4.477e-07 -4.989e-07 8.313e-06 9.549e-06 1.880e-06 9.923e-06 4.721e-08 -1.229e-06 -4.954e-06 -3.623e-05 ... 4.174e-04 -2.526e-04 -1.178e-05 2.545e-05 -1.918e-06 -1.995e-04 -4.725e-06 1.164e-03 -7.895e-06 2.752e-04
e1z 5.178e-07 1.863e-06 -1.000e-05 6.618e-06 9.545e-07 7.050e-06 -6.539e-08 5.928e-06 1.159e-05 -3.718e-05 ... 2.924e-04 -1.191e-04 9.453e-05 -4.394e-05 -2.355e-05 -2.301e-05 1.755e-05 2.875e-04 2.708e-06 1.086e-04
e2z -2.944e-07 -2.106e-06 6.409e-06 -1.267e-05 4.458e-06 -4.374e-06 -1.877e-08 -1.127e-05 -1.538e-05 -6.661e-06 ... 4.077e-04 -6.431e-04 5.028e-05 -8.837e-05 -1.003e-05 -1.246e-04 1.712e-05 7.241e-04 1.593e-06 2.670e-04
angle 1.535e+01 -7.690e+01 2.455e+01 3.864e+01 6.872e+01 4.794e+01 6.047e+01 -8.214e+01 -6.495e+01 -3.895e+01 ... 5.976e+01 -1.757e+01 -4.802e+00 8.158e+01 -8.549e+01 -2.577e+01 -8.110e+00 6.322e+01 -1.735e+01 6.344e+01
major 7.629e-07 6.399e-08 9.525e-06 8.656e-06 3.988e-07 6.778e-06 4.067e-08 8.782e-07 3.147e-07 1.557e-05 ... 2.124e-04 2.742e-04 3.264e-05 3.892e-05 2.947e-06 1.351e-04 1.032e-05 6.774e-04 5.872e-06 1.546e-04
minor -1.142e-07 -1.066e-06 -1.474e-06 -1.133e-06 -2.380e-06 -3.198e-06 -1.437e-08 -3.657e-06 -6.142e-06 -2.149e-05 ... -2.673e-04 -1.647e-04 -3.799e-05 -4.896e-05 -9.274e-06 -1.197e-04 -6.596e-06 -7.692e-04 -7.996e-06 -1.893e-04
max_shear 8.772e-07 1.130e-06 1.100e-05 9.789e-06 2.779e-06 9.976e-06 5.504e-08 4.535e-06 6.457e-06 3.706e-05 ... 4.796e-04 4.389e-04 7.063e-05 8.789e-05 1.222e-05 2.548e-04 1.692e-05 1.447e-03 1.387e-05 3.440e-04
3 e11 7.624e-07 -3.899e-07 4.133e-06 6.817e-06 -2.276e-06 2.798e-06 -1.790e-08 -1.403e-06 -1.192e-06 -7.996e-06 ... -8.737e-05 1.935e-04 3.633e-05 -5.625e-05 -1.848e-05 6.953e-05 1.536e-05 -3.510e-04 6.365e-06 -7.669e-05
e22 -6.778e-08 -8.129e-07 3.580e-06 -2.839e-08 1.099e-06 1.236e-06 2.619e-08 -3.157e-06 -6.506e-06 -8.379e-06 ... 1.822e-04 -2.943e-04 -1.428e-05 2.207e-05 3.565e-07 -8.966e-05 -6.507e-06 4.890e-04 -9.791e-06 1.270e-04
e12 3.362e-07 2.559e-07 4.310e-06 1.387e-05 -6.563e-07 1.028e-05 4.279e-08 2.321e-06 -2.306e-07 -3.731e-05 ... 3.048e-04 -1.903e-04 -6.729e-05 5.089e-05 -4.405e-06 -2.037e-04 -7.448e-06 1.154e-03 -8.263e-06 2.642e-04
e1z -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 ... -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00
e2z 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 ... -0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00
angle 1.102e+01 1.559e+01 4.134e+01 3.187e+01 -8.450e+01 4.068e+01 6.793e+01 2.647e+01 -1.242e+00 -4.471e+01 ... 6.574e+01 -1.066e+01 -2.652e+01 7.349e+01 -8.342e+01 -2.600e+01 -9.406e+00 6.302e+01 -1.354e+01 6.381e+01
major 7.951e-07 -3.542e-07 6.029e-06 1.113e-05 1.131e-06 7.214e-06 3.487e-08 -8.253e-07 -1.189e-06 1.047e-05 ... 2.508e-04 2.114e-04 5.312e-05 2.961e-05 6.107e-07 1.192e-04 1.597e-05 7.827e-04 7.360e-06 1.919e-04
minor -1.005e-07 -8.486e-07 1.684e-06 -4.341e-06 -2.307e-06 -3.180e-06 -2.657e-08 -3.734e-06 -6.508e-06 -2.684e-05 ... -1.560e-04 -3.122e-04 -3.107e-05 -6.379e-05 -1.873e-05 -1.393e-04 -7.124e-06 -6.447e-04 -1.079e-05 -1.417e-04
max_shear 8.956e-07 4.943e-07 4.345e-06 1.547e-05 3.438e-06 1.039e-05 6.144e-08 2.909e-06 5.319e-06 3.731e-05 ... 4.069e-04 5.236e-04 8.420e-05 9.340e-05 1.934e-05 2.586e-04 2.310e-05 1.427e-03 1.815e-05 3.336e-04
3731 1 e11 5.454e-07 -1.268e-06 2.228e-06 9.697e-06 -3.909e-06 2.151e-06 9.166e-09 -2.838e-06 -5.183e-06 -9.997e-06 ... 4.480e-05 4.393e-04 1.140e-04 6.040e-06 8.548e-06 8.737e-05 -2.054e-08 -3.954e-04 -1.864e-07 -8.190e-05
e22 -7.426e-08 -1.854e-07 7.580e-06 -9.829e-06 4.673e-06 -1.773e-06 3.897e-08 -1.596e-06 -1.803e-06 2.676e-05 ... -1.226e-04 -5.917e-05 -8.177e-05 -5.099e-07 -7.221e-08 -2.551e-05 2.104e-06 7.040e-05 5.615e-06 -3.433e-05
e12 -7.782e-07 1.154e-07 -3.036e-06 -1.362e-05 1.179e-06 -9.231e-06 -5.520e-08 1.893e-06 6.107e-06 2.682e-05 ... -1.587e-05 9.414e-04 2.008e-04 -6.159e-05 8.405e-06 1.786e-04 4.434e-06 -9.030e-04 1.823e-05 -1.780e-04
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4538 3 major 2.471e-07 8.890e-07 8.499e-06 4.477e-06 -5.247e-07 3.447e-06 2.466e-08 4.167e-06 7.045e-06 1.616e-05 ... 2.922e-04 8.019e-04 1.602e-04 3.237e-05 1.002e-04 1.366e-04 5.899e-06 5.053e-04 3.961e-06 2.098e-04
minor 8.196e-08 -1.130e-06 -1.017e-05 -2.891e-07 -1.412e-06 -1.493e-06 -9.082e-09 -4.612e-06 -9.013e-06 -2.158e-05 ... -1.784e-04 -1.116e-03 -8.032e-05 -2.292e-05 -1.720e-04 -7.728e-05 -6.314e-06 -7.726e-04 -1.052e-05 -2.848e-04
max_shear 1.651e-07 2.019e-06 1.867e-05 4.767e-06 8.870e-07 4.940e-06 3.374e-08 8.780e-06 1.606e-05 3.774e-05 ... 4.707e-04 1.918e-03 2.405e-04 5.529e-05 2.722e-04 2.139e-04 1.221e-05 1.278e-03 1.448e-05 4.946e-04
4539 1 e11 -1.107e-06 1.578e-06 -8.000e-06 -8.072e-06 -1.923e-06 -8.065e-06 2.618e-08 6.735e-06 8.147e-06 2.259e-05 ... -8.682e-05 -1.148e-04 7.318e-05 -1.630e-07 6.673e-05 1.413e-04 -1.092e-06 -7.371e-04 7.899e-06 -2.386e-04
e22 5.738e-07 -5.295e-07 2.867e-06 6.351e-06 4.307e-07 5.339e-06 -7.467e-09 -1.923e-06 -1.801e-06 -2.167e-05 ... 1.102e-04 5.034e-04 -1.343e-05 -1.349e-05 6.644e-05 -1.148e-04 1.738e-06 6.259e-04 -3.127e-06 2.074e-04
e12 -4.461e-07 5.454e-07 -8.248e-07 -8.820e-06 -3.462e-07 -7.836e-06 1.973e-08 4.245e-07 -9.262e-07 4.505e-05 ... -5.714e-04 -1.360e-03 -3.267e-04 4.225e-05 -1.622e-04 9.869e-05 -4.066e-07 -8.100e-04 -5.597e-06 -3.780e-04
e1z -3.646e-08 2.642e-08 -2.641e-08 -2.883e-07 -1.513e-08 -2.392e-07 -3.513e-12 1.179e-07 1.638e-07 6.282e-07 ... 2.683e-07 1.548e-05 2.704e-06 -2.613e-07 4.292e-06 1.898e-06 -1.952e-07 -9.415e-06 1.631e-07 -2.658e-06
e2z -1.283e-08 1.111e-08 -6.353e-08 -1.107e-07 -7.972e-09 -9.313e-08 -6.980e-11 4.792e-08 7.260e-08 3.214e-07 ... 2.467e-07 3.156e-08 1.659e-06 -5.088e-09 -1.603e-07 1.606e-06 -6.530e-08 -7.809e-06 1.322e-07 -2.134e-06
angle -8.257e+01 7.253e+00 -8.783e+01 -7.428e+01 -8.582e+01 -7.484e+01 1.519e+01 1.404e+00 -2.660e+00 2.276e+01 ... -5.451e+01 -5.722e+01 -3.758e+01 3.625e+01 -4.495e+01 1.054e+01 -8.591e+01 -7.464e+01 -1.346e+01 -6.986e+01
major 6.028e-07 1.613e-06 2.882e-06 7.592e-06 4.434e-07 6.400e-06 2.886e-08 6.740e-06 8.168e-06 3.204e-05 ... 3.139e-04 9.413e-04 1.988e-04 1.532e-05 1.477e-04 1.505e-04 1.752e-06 7.372e-04 8.569e-06 2.768e-04
minor -1.136e-06 -5.642e-07 -8.016e-06 -9.313e-06 -1.935e-06 -9.126e-06 -1.015e-08 -1.928e-06 -1.822e-06 -3.112e-05 ... -2.905e-04 -5.528e-04 -1.391e-04 -2.897e-05 -1.452e-05 -1.240e-04 -1.107e-06 -8.483e-04 -3.796e-06 -3.079e-04
max_shear 1.739e-06 2.177e-06 1.090e-05 1.691e-05 2.379e-06 1.553e-05 3.900e-08 8.668e-06 9.990e-06 6.316e-05 ... 6.044e-04 1.494e-03 3.379e-04 4.430e-05 1.622e-04 2.744e-04 2.859e-06 1.586e-03 1.236e-05 5.846e-04
2 e11 -3.703e-07 9.612e-07 -6.598e-06 -1.739e-06 -1.677e-06 -2.991e-06 2.625e-08 4.163e-06 4.428e-06 8.487e-06 ... -8.438e-05 -4.209e-04 1.091e-05 3.542e-06 -2.829e-05 8.890e-05 3.630e-06 -4.732e-04 5.339e-06 -1.600e-04
e22 6.794e-08 1.444e-08 -5.976e-07 1.168e-06 2.313e-07 1.350e-06 -9.873e-09 1.515e-07 1.453e-06 -7.739e-06 ... 1.134e-04 5.129e-04 6.822e-05 -1.252e-05 8.224e-05 -2.835e-05 -1.673e-06 2.014e-04 5.947e-07 8.451e-05
e12 -4.517e-07 7.143e-07 -4.378e-06 -9.846e-06 -2.529e-07 -8.287e-06 1.682e-08 9.339e-07 1.763e-07 5.004e-05 ... -5.853e-04 -1.500e-03 -3.089e-04 4.357e-05 -1.933e-04 1.319e-04 -8.495e-07 -9.797e-04 -3.530e-06 -4.303e-04
e1z -3.229e-06 2.340e-06 -2.339e-06 -2.553e-05 -1.340e-06 -2.118e-05 -3.110e-10 1.044e-05 1.451e-05 5.563e-05 ... 2.376e-05 1.371e-03 2.394e-04 -2.314e-05 3.801e-04 1.680e-04 -1.729e-05 -8.337e-04 1.444e-05 -2.353e-04
e2z -2.323e-06 2.012e-06 -1.151e-05 -2.006e-05 -1.444e-06 -1.687e-05 -1.264e-08 8.679e-06 1.315e-05 5.822e-05 ... 4.468e-05 5.716e-06 3.005e-04 -9.216e-07 -2.903e-05 2.909e-04 -1.183e-05 -1.414e-03 2.395e-05 -3.866e-04
angle -6.707e+01 1.852e+01 -7.194e+01 -5.322e+01 -8.623e+01 -5.882e+01 1.248e+01 6.553e+00 1.695e+00 3.602e+01 ... -5.433e+01 -6.095e+01 -5.026e+01 3.488e+01 -5.988e+01 2.418e+01 -4.551e+00 -6.227e+01 -1.833e+01 -5.980e+01
major 1.635e-07 1.081e-06 1.159e-07 4.847e-06 2.396e-07 3.857e-06 2.811e-08 4.216e-06 4.431e-06 2.668e-05 ... 3.234e-04 9.294e-04 1.966e-04 1.873e-05 1.383e-04 1.185e-04 3.663e-06 4.588e-04 5.924e-06 2.097e-04
minor -4.659e-07 -1.052e-07 -7.312e-06 -5.419e-06 -1.685e-06 -5.498e-06 -1.173e-08 9.781e-08 1.450e-06 -2.593e-05 ... -2.944e-04 -8.375e-04 -1.175e-04 -2.771e-05 -8.437e-05 -5.796e-05 -1.707e-06 -7.307e-04 9.996e-09 -2.852e-04
max_shear 6.294e-07 1.186e-06 7.428e-06 1.027e-05 1.925e-06 9.355e-06 3.984e-08 4.119e-06 2.981e-06 5.260e-05 ... 6.178e-04 1.767e-03 3.142e-04 4.644e-05 2.227e-04 1.765e-04 5.370e-06 1.189e-03 5.914e-06 4.950e-04
3 e11 3.667e-07 3.442e-07 -5.196e-06 4.594e-06 -1.431e-06 2.083e-06 2.632e-08 1.591e-06 7.102e-07 -5.615e-06 ... -8.194e-05 -7.271e-04 -5.137e-05 7.246e-06 -1.233e-04 3.653e-05 8.352e-06 -2.093e-04 2.780e-06 -8.151e-05
e22 -4.379e-07 5.584e-07 -4.062e-06 -4.016e-06 3.189e-08 -2.640e-06 -1.228e-08 2.226e-06 4.706e-06 6.190e-06 ... 1.166e-04 5.225e-04 1.499e-04 -1.156e-05 9.803e-05 5.809e-05 -5.083e-06 -2.232e-04 4.316e-06 -3.843e-05
e12 -4.572e-07 8.832e-07 -7.930e-06 -1.087e-05 -1.595e-07 -8.739e-06 1.391e-08 1.443e-06 1.279e-06 5.502e-05 ... -5.992e-04 -1.640e-03 -2.911e-04 4.490e-05 -2.244e-04 1.651e-04 -1.292e-06 -1.149e-03 -1.464e-06 -4.827e-04
e1z 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 ... -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00
e2z 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 -0.000e+00 -0.000e+00 -0.000e+00 ... -0.000e+00 -0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00 0.000e+00 -0.000e+00 0.000e+00
angle -1.480e+01 5.182e+01 -4.907e+01 -2.581e+01 -8.689e+01 -3.081e+01 9.908e+00 5.688e+01 8.113e+01 5.105e+01 ... -5.417e+01 -6.366e+01 -6.233e+01 3.364e+01 -6.730e+01 4.872e+01 -2.747e+00 -4.465e+01 -6.819e+01 -4.755e+01
major 4.271e-07 9.057e-07 -6.234e-07 7.224e-06 3.623e-08 4.688e-06 2.753e-08 2.697e-06 4.806e-06 2.843e-05 ... 3.330e-04 9.285e-04 2.262e-04 2.218e-05 1.450e-04 1.306e-04 8.383e-06 3.584e-04 4.609e-06 1.823e-04
minor -4.983e-07 -3.109e-09 -8.634e-06 -6.645e-06 -1.435e-06 -5.245e-06 -1.349e-08 1.120e-06 6.104e-07 -2.785e-05 ... -2.983e-04 -1.133e-03 -1.277e-04 -2.650e-05 -1.703e-04 -3.594e-05 -5.114e-06 -7.910e-04 2.487e-06 -3.023e-04
max_shear 9.253e-07 9.088e-07 8.011e-06 1.387e-05 1.471e-06 9.933e-06 4.103e-08 1.577e-06 4.195e-06 5.628e-05 ... 6.313e-04 2.061e-03 3.539e-04 4.868e-05 3.152e-04 1.665e-04 1.350e-05 1.149e-03 2.122e-06 4.846e-04

864 rows × 33 columns

Manipulating the Pandas DataFrame

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op2_pandas_unstack.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_pandas_unstack.ipynb

This example will use pandas unstack

The unstack method on a DataFrame moves on index level from rows to columns. First let’s read in some data:

import os
import pyNastran
pkg_path = pyNastran.__path__[0]
from pyNastran.op2.op2 import read_op2
import pandas as pd
pd.set_option('precision', 2)

op2_filename = os.path.join(pkg_path, '..', 'models', 'iSat', 'iSat_launch_100Hz.op2')
from pyNastran.op2.op2 import read_op2
isat = read_op2(op2_filename, build_dataframe=True, debug=False, skip_undefined_matrices=True)
INFO:      fname=op2_scalar.py             lineNo=1176   op2_filename = 'f:\work\pynastran\models\iSat\iSat_launch_100Hz.op2'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAPCONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAQCONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RASCONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAFCONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAECONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RANCONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAGCONS'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAPEATC'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAQEATC'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RASEATC'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAFEATC'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAEEATC'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RANEATC'
INFO:      fname=fortran_format.py         lineNo=321    skipping table_name = 'RAGEATC'
cbar = isat.cbar_force[1].data_frame
cbar.head()
Mode 1 2 3 4 5 6 7 8 9 10 ... 24 25 26 27 28 29 30 31 32 33
EigenvalueReal 2758.15 3568.63 9689.31 16168.10 16278.22 16679.71 18248.43 18600.70 18632.55 32147.81 ... 253140.88 295297.75 306885.91 309040.66 319227.72 350984.50 351566.19 364166.16 384601.34 386090.44
Freq 8.36 9.51 15.67 20.24 20.31 20.55 21.50 21.71 21.72 28.54 ... 80.08 86.49 88.17 88.48 89.92 94.29 94.37 96.04 98.70 98.89
Radians 52.52 59.74 98.43 127.15 127.59 129.15 135.09 136.38 136.50 179.30 ... 503.13 543.41 553.97 555.91 565.00 592.44 592.93 603.46 620.16 621.36
ElementID Item
3323 bending_moment_a1 -0.16 0.23 -1.33 -2.32e+00 1.88 -0.80 -1.34e-03 1.42 1.47 4.64 ... -43.49 63.35 -43.08 -3.35 11.10 -14.38 0.75 29.36 0.49 -4.56
bending_moment_a2 0.19 -0.05 0.18 5.61e-03 0.11 -0.42 -4.19e-03 -1.11 0.10 -1.57 ... -4.46 5.33 1.63 4.86 2.14 0.09 -1.27 -10.58 -0.67 3.48
bending_moment_b1 0.17 -0.21 2.01 2.66e+00 -1.88 0.73 2.29e-03 -1.38 -1.31 -3.97 ... 34.78 -74.02 35.14 3.54 -15.06 10.97 -0.67 -17.69 -0.63 6.39
bending_moment_b2 -0.19 0.05 -0.18 -3.57e-03 -0.11 0.43 4.18e-03 1.11 -0.10 1.57 ... 4.45 -5.34 -1.62 -4.86 -2.15 -0.08 1.27 10.56 0.67 -3.48
shear1 -0.13 0.18 -1.33 -1.99e+00 1.50 -0.61 -1.45e-03 1.12 1.11 3.44 ... -31.31 54.95 -31.29 -2.76 10.47 -10.14 0.57 18.82 0.44 -4.38

5 rows × 33 columns

First I’m going to pull out a small subset to work with

csub = cbar.loc[3323:3324,1:2]
csub
Mode 1 2
EigenvalueReal 2758.15 3568.63
Freq 8.36 9.51
Radians 52.52 59.74
ElementID Item
3323 bending_moment_a1 -0.16 0.23
bending_moment_a2 0.19 -0.05
bending_moment_b1 0.17 -0.21
bending_moment_b2 -0.19 0.05
shear1 -0.13 0.18
shear2 0.15 -0.04
axial 0.80 0.21
torque -0.04 -0.06
3324 bending_moment_a1 0.14 -0.29
bending_moment_a2 -0.19 0.05
bending_moment_b1 -0.15 0.26
bending_moment_b2 0.19 -0.05
shear1 0.12 -0.22
shear2 -0.15 0.04
axial -0.80 -0.21
torque 0.04 0.06

I happen to like the way that’s organized, but let’s say that I want the have the item descriptions in columns and the mode ID’s and element numbers in rows. To do that, I’ll first move the element ID’s up to the columns using a .unstack(level=0) and the transpose the result:

csub.unstack(level=0).T
Item bending_moment_a1 bending_moment_a2 bending_moment_b1 bending_moment_b2 shear1 shear2 axial torque
Mode EigenvalueReal Freq Radians ElementID
1 2758.15 8.36 52.52 3323 -0.16 0.19 0.17 -0.19 -0.13 0.15 0.80 -0.04
3324 0.14 -0.19 -0.15 0.19 0.12 -0.15 -0.80 0.04
2 3568.63 9.51 59.74 3323 0.23 -0.05 -0.21 0.05 0.18 -0.04 0.21 -0.06
3324 -0.29 0.05 0.26 -0.05 -0.22 0.04 -0.21 0.06

unstack requires unique row indices so I can’t work with CQUAD4 stresses as they’re currently output, but I’ll work with CHEXA stresses. Let’s pull out the first two elements and first two modes:

chs = isat.chexa_stress[1].data_frame.loc[3684:3685,1:2]
chs
Mode 1 2
EigenvalueReal 2758.15 3568.63
Freq 8.36 9.51
Radians 52.52 59.74
ElementID NodeID Item
3684 0 oxx 7.93e-12 1.14e-13
oyy -3.58e-12 -7.96e-13
ozz -3.41e-13 2.27e-13
txy -1.99e-13 0.00e+00
tyz 2.84e-14 5.68e-14
txz 5.12e-13 -2.27e-13
omax 7.96e-12 4.07e-13
omid -3.72e-13 -6.22e-14
omin -3.59e-12 -7.99e-13
von_mises 1.03e-11 1.05e-12
55 oxx 2.33e-12 -2.10e-12
oyy 1.18e-12 -1.93e-12
ozz -9.45e-13 -1.05e-12
txy -3.98e-13 -9.09e-13
tyz -2.62e-14 -9.88e-14
txz -4.76e-13 -6.53e-13
omax 2.51e-12 -6.34e-13
omid 1.07e-12 -1.37e-12
omin -1.02e-12 -3.08e-12
von_mises 3.07e-12 2.18e-12
51 oxx -8.67e-13 -3.98e-13
oyy 2.29e-12 9.66e-13
ozz -2.53e-12 7.11e-13
txy -3.15e-13 -1.98e-12
tyz 2.17e-14 -3.56e-13
txz 1.95e-13 -1.58e-13
omax 2.32e-12 2.40e-12
omid -8.75e-13 7.31e-13
omin -2.55e-12 -1.85e-12
von_mises 4.29e-12 3.71e-12
... ... ... ... ...
3685 46 oxx -2.38e-13 2.84e-13
oyy 6.68e-13 -3.41e-13
ozz 1.28e-13 1.14e-13
txy 1.05e-13 3.84e-16
tyz -2.84e-14 0.00e+00
txz 2.14e-13 -9.59e-14
omax 6.80e-13 3.27e-13
omid 2.26e-13 7.06e-14
omin -3.48e-13 -3.41e-13
von_mises 8.92e-13 5.84e-13
1031 oxx -2.74e-12 -3.41e-13
oyy -5.68e-13 3.41e-13
ozz -1.42e-12 -4.55e-13
txy 1.07e-13 0.00e+00
tyz 0.00e+00 -2.27e-13
txz -4.55e-13 4.55e-13
omax -5.63e-13 4.26e-13
omid -1.28e-12 -1.01e-28
omin -2.89e-12 -8.80e-13
von_mises 2.06e-12 1.15e-12
1037 oxx 2.42e-13 -1.14e-13
oyy -1.28e-13 -4.55e-13
ozz 1.14e-13 0.00e+00
txy -7.11e-15 2.84e-13
tyz -1.42e-14 -1.14e-13
txz -2.27e-13 4.55e-13
omax 4.14e-13 4.15e-13
omid -5.52e-14 -2.05e-13
omin -1.31e-13 -7.79e-13
von_mises 5.11e-13 1.03e-12

180 rows × 2 columns

Now I want to put ElementID and the Node ID in the rows along with the Load ID, and have the items in the columns:

cht = chs.unstack(level=[0,1]).T
cht
Item oxx oyy ozz txy tyz txz omax omid omin von_mises
Mode EigenvalueReal Freq Radians ElementID NodeID
1 2758.15 8.36 52.52 3684 0 7.93e-12 -3.58e-12 -3.41e-13 -1.99e-13 2.84e-14 5.12e-13 7.96e-12 -3.72e-13 -3.59e-12 1.03e-11
41 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
45 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
46 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
50 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
51 -8.67e-13 2.29e-12 -2.53e-12 -3.15e-13 2.17e-14 1.95e-13 2.32e-12 -8.75e-13 -2.55e-12 4.29e-12
55 2.33e-12 1.18e-12 -9.45e-13 -3.98e-13 -2.62e-14 -4.76e-13 2.51e-12 1.07e-12 -1.02e-12 3.07e-12
56 -5.37e-12 -2.76e-12 -2.43e-12 -4.92e-13 1.14e-13 -1.95e-13 -2.35e-12 -2.74e-12 -5.47e-12 2.95e-12
60 8.81e-13 -2.10e-12 -4.97e-13 5.68e-14 1.14e-13 -2.93e-13 9.41e-13 -5.47e-13 -2.11e-12 2.65e-12
758 2.22e-12 1.63e-12 2.43e-12 -1.99e-13 -2.49e-14 -3.41e-13 2.69e-12 2.04e-12 1.55e-12 9.89e-13
778 -3.24e-12 -1.88e-12 -4.99e-12 -1.15e-13 -5.52e-15 -3.41e-13 -1.87e-12 -3.19e-12 -5.05e-12 2.77e-12
880 1.76e-12 1.88e-12 1.82e-12 -5.26e-13 1.14e-13 0.00e+00 2.36e-12 1.82e-12 1.28e-12 9.37e-13
952 -5.29e-12 -7.11e-13 -1.93e-12 -1.71e-13 5.68e-14 2.27e-13 -7.02e-13 -1.92e-12 -5.31e-12 4.13e-12
1015 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1021 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1031 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1037 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3685 0 7.18e-13 1.85e-13 -2.13e-13 1.17e-13 -3.55e-14 3.41e-13 8.45e-13 1.79e-13 -3.34e-13 1.02e-12
41 -8.46e-13 -6.04e-13 -6.04e-14 2.20e-13 -3.50e-15 1.71e-13 -2.15e-14 -4.89e-13 -1.00e-12 8.48e-13
45 1.06e-12 -5.65e-13 5.68e-13 3.55e-14 -5.37e-15 -1.18e-13 1.09e-12 5.42e-13 -5.66e-13 1.46e-12
46 -2.38e-13 6.68e-13 1.28e-13 1.05e-13 -2.84e-14 2.14e-13 6.80e-13 2.26e-13 -3.48e-13 8.92e-13
50 -6.04e-14 1.14e-13 6.39e-14 -4.26e-14 -2.84e-14 -9.99e-14 1.27e-13 1.17e-13 -1.27e-13 2.49e-13
51 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
55 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
60 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
758 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
778 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
880 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
952 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2 3568.63 9.51 59.74 3684 50 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
51 -3.98e-13 9.66e-13 7.11e-13 -1.98e-12 -3.56e-13 -1.58e-13 2.40e-12 7.31e-13 -1.85e-12 3.71e-12
55 -2.10e-12 -1.93e-12 -1.05e-12 -9.09e-13 -9.88e-14 -6.53e-13 -6.34e-13 -1.37e-12 -3.08e-12 2.18e-12
56 2.84e-13 -4.55e-13 -8.53e-13 -9.09e-13 -2.27e-13 9.52e-14 9.20e-13 -8.07e-13 -1.14e-12 1.91e-12
60 5.12e-13 1.14e-12 5.12e-13 -9.09e-13 -2.27e-13 -3.68e-14 1.81e-12 5.30e-13 -1.76e-13 1.74e-12
758 3.41e-13 2.05e-12 1.08e-12 -9.09e-13 -3.40e-13 4.55e-13 2.60e-12 9.89e-13 -1.25e-13 2.38e-12
778 2.27e-13 2.27e-13 3.98e-13 -1.03e-12 2.30e-14 4.55e-13 1.36e-12 3.87e-13 -8.99e-13 1.97e-12
880 -1.71e-12 1.59e-12 9.09e-13 -9.09e-13 -2.27e-13 4.55e-13 1.94e-12 8.48e-13 -1.99e-12 3.51e-12
952 -1.02e-12 1.36e-12 -1.36e-12 -9.09e-13 0.00e+00 4.55e-13 1.68e-12 -9.20e-13 -1.78e-12 3.12e-12
1015 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1021 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1031 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1037 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3685 0 1.14e-13 -3.41e-13 2.27e-13 -2.84e-14 -5.68e-14 6.82e-13 8.58e-13 -3.42e-13 -5.16e-13 1.30e-12
41 -2.84e-13 2.27e-13 -2.84e-14 -9.02e-13 -3.56e-13 1.07e-12 1.53e-12 -2.31e-13 -1.38e-12 2.54e-12
45 -5.68e-13 0.00e+00 1.14e-13 2.27e-13 -3.26e-13 6.52e-13 5.63e-13 6.88e-14 -1.09e-12 1.47e-12
46 2.84e-13 -3.41e-13 1.14e-13 3.84e-16 0.00e+00 -9.59e-14 3.27e-13 7.06e-14 -3.41e-13 5.84e-13
50 5.12e-13 6.82e-13 3.98e-13 4.55e-13 0.00e+00 9.45e-13 1.54e-12 6.27e-13 -5.73e-13 1.83e-12
51 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
55 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
60 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
758 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
778 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
880 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
952 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1015 -1.14e-13 5.68e-14 1.71e-13 1.14e-13 -1.13e-13 4.55e-13 5.06e-13 1.01e-13 -4.94e-13 8.71e-13
1021 0.00e+00 5.68e-14 1.71e-13 9.15e-13 -9.06e-14 -4.55e-13 1.11e-12 7.50e-14 -9.53e-13 1.78e-12
1031 -3.41e-13 3.41e-13 -4.55e-13 0.00e+00 -2.27e-13 4.55e-13 4.26e-13 -1.01e-28 -8.80e-13 1.15e-12
1037 -1.14e-13 -4.55e-13 0.00e+00 2.84e-13 -1.14e-13 4.55e-13 4.15e-13 -2.05e-13 -7.79e-13 1.03e-12

68 rows × 10 columns

Maybe I’d like my rows organized with the modes on the inside. I can do that by swapping levels:

We actually need to get rid of the extra rows using dropna():

cht = cht.dropna()
cht
Item oxx oyy ozz txy tyz txz omax omid omin von_mises
Mode EigenvalueReal Freq Radians ElementID NodeID
1 2758.15 8.36 52.52 3684 0 7.93e-12 -3.58e-12 -3.41e-13 -1.99e-13 2.84e-14 5.12e-13 7.96e-12 -3.72e-13 -3.59e-12 1.03e-11
51 -8.67e-13 2.29e-12 -2.53e-12 -3.15e-13 2.17e-14 1.95e-13 2.32e-12 -8.75e-13 -2.55e-12 4.29e-12
55 2.33e-12 1.18e-12 -9.45e-13 -3.98e-13 -2.62e-14 -4.76e-13 2.51e-12 1.07e-12 -1.02e-12 3.07e-12
56 -5.37e-12 -2.76e-12 -2.43e-12 -4.92e-13 1.14e-13 -1.95e-13 -2.35e-12 -2.74e-12 -5.47e-12 2.95e-12
60 8.81e-13 -2.10e-12 -4.97e-13 5.68e-14 1.14e-13 -2.93e-13 9.41e-13 -5.47e-13 -2.11e-12 2.65e-12
758 2.22e-12 1.63e-12 2.43e-12 -1.99e-13 -2.49e-14 -3.41e-13 2.69e-12 2.04e-12 1.55e-12 9.89e-13
778 -3.24e-12 -1.88e-12 -4.99e-12 -1.15e-13 -5.52e-15 -3.41e-13 -1.87e-12 -3.19e-12 -5.05e-12 2.77e-12
880 1.76e-12 1.88e-12 1.82e-12 -5.26e-13 1.14e-13 0.00e+00 2.36e-12 1.82e-12 1.28e-12 9.37e-13
952 -5.29e-12 -7.11e-13 -1.93e-12 -1.71e-13 5.68e-14 2.27e-13 -7.02e-13 -1.92e-12 -5.31e-12 4.13e-12
3685 0 7.18e-13 1.85e-13 -2.13e-13 1.17e-13 -3.55e-14 3.41e-13 8.45e-13 1.79e-13 -3.34e-13 1.02e-12
41 -8.46e-13 -6.04e-13 -6.04e-14 2.20e-13 -3.50e-15 1.71e-13 -2.15e-14 -4.89e-13 -1.00e-12 8.48e-13
45 1.06e-12 -5.65e-13 5.68e-13 3.55e-14 -5.37e-15 -1.18e-13 1.09e-12 5.42e-13 -5.66e-13 1.46e-12
46 -2.38e-13 6.68e-13 1.28e-13 1.05e-13 -2.84e-14 2.14e-13 6.80e-13 2.26e-13 -3.48e-13 8.92e-13
50 -6.04e-14 1.14e-13 6.39e-14 -4.26e-14 -2.84e-14 -9.99e-14 1.27e-13 1.17e-13 -1.27e-13 2.49e-13
1015 -5.68e-14 -7.85e-13 -2.70e-13 3.55e-14 -1.18e-14 -3.41e-13 1.95e-13 -5.20e-13 -7.87e-13 8.80e-13
1021 9.66e-13 2.17e-13 8.60e-13 4.43e-13 -2.10e-15 -6.82e-13 1.67e-12 4.79e-13 -1.10e-13 1.57e-12
1031 -2.74e-12 -5.68e-13 -1.42e-12 1.07e-13 0.00e+00 -4.55e-13 -5.63e-13 -1.28e-12 -2.89e-12 2.06e-12
1037 2.42e-13 -1.28e-13 1.14e-13 -7.11e-15 -1.42e-14 -2.27e-13 4.14e-13 -5.52e-14 -1.31e-13 5.11e-13
2 3568.63 9.51 59.74 3684 0 1.14e-13 -7.96e-13 2.27e-13 0.00e+00 5.68e-14 -2.27e-13 4.07e-13 -6.22e-14 -7.99e-13 1.05e-12
51 -3.98e-13 9.66e-13 7.11e-13 -1.98e-12 -3.56e-13 -1.58e-13 2.40e-12 7.31e-13 -1.85e-12 3.71e-12
55 -2.10e-12 -1.93e-12 -1.05e-12 -9.09e-13 -9.88e-14 -6.53e-13 -6.34e-13 -1.37e-12 -3.08e-12 2.18e-12
56 2.84e-13 -4.55e-13 -8.53e-13 -9.09e-13 -2.27e-13 9.52e-14 9.20e-13 -8.07e-13 -1.14e-12 1.91e-12
60 5.12e-13 1.14e-12 5.12e-13 -9.09e-13 -2.27e-13 -3.68e-14 1.81e-12 5.30e-13 -1.76e-13 1.74e-12
758 3.41e-13 2.05e-12 1.08e-12 -9.09e-13 -3.40e-13 4.55e-13 2.60e-12 9.89e-13 -1.25e-13 2.38e-12
778 2.27e-13 2.27e-13 3.98e-13 -1.03e-12 2.30e-14 4.55e-13 1.36e-12 3.87e-13 -8.99e-13 1.97e-12
880 -1.71e-12 1.59e-12 9.09e-13 -9.09e-13 -2.27e-13 4.55e-13 1.94e-12 8.48e-13 -1.99e-12 3.51e-12
952 -1.02e-12 1.36e-12 -1.36e-12 -9.09e-13 0.00e+00 4.55e-13 1.68e-12 -9.20e-13 -1.78e-12 3.12e-12
3685 0 1.14e-13 -3.41e-13 2.27e-13 -2.84e-14 -5.68e-14 6.82e-13 8.58e-13 -3.42e-13 -5.16e-13 1.30e-12
41 -2.84e-13 2.27e-13 -2.84e-14 -9.02e-13 -3.56e-13 1.07e-12 1.53e-12 -2.31e-13 -1.38e-12 2.54e-12
45 -5.68e-13 0.00e+00 1.14e-13 2.27e-13 -3.26e-13 6.52e-13 5.63e-13 6.88e-14 -1.09e-12 1.47e-12
46 2.84e-13 -3.41e-13 1.14e-13 3.84e-16 0.00e+00 -9.59e-14 3.27e-13 7.06e-14 -3.41e-13 5.84e-13
50 5.12e-13 6.82e-13 3.98e-13 4.55e-13 0.00e+00 9.45e-13 1.54e-12 6.27e-13 -5.73e-13 1.83e-12
1015 -1.14e-13 5.68e-14 1.71e-13 1.14e-13 -1.13e-13 4.55e-13 5.06e-13 1.01e-13 -4.94e-13 8.71e-13
1021 0.00e+00 5.68e-14 1.71e-13 9.15e-13 -9.06e-14 -4.55e-13 1.11e-12 7.50e-14 -9.53e-13 1.78e-12
1031 -3.41e-13 3.41e-13 -4.55e-13 0.00e+00 -2.27e-13 4.55e-13 4.26e-13 -1.01e-28 -8.80e-13 1.15e-12
1037 -1.14e-13 -4.55e-13 0.00e+00 2.84e-13 -1.14e-13 4.55e-13 4.15e-13 -2.05e-13 -7.79e-13 1.03e-12
# mode, eigr, freq, rad, eids, nids # initial
# nids, eids, eigr, freq, rad, mode # final

cht.swaplevel(0,4).swaplevel(1,5).swaplevel(2,5).swaplevel(4, 5)
Item oxx oyy ozz txy tyz txz omax omid omin von_mises
ElementID NodeID EigenvalueReal Radians Freq Mode
3684 0 2758.15 52.52 8.36 1 7.93e-12 -3.58e-12 -3.41e-13 -1.99e-13 2.84e-14 5.12e-13 7.96e-12 -3.72e-13 -3.59e-12 1.03e-11
51 2758.15 52.52 8.36 1 -8.67e-13 2.29e-12 -2.53e-12 -3.15e-13 2.17e-14 1.95e-13 2.32e-12 -8.75e-13 -2.55e-12 4.29e-12
55 2758.15 52.52 8.36 1 2.33e-12 1.18e-12 -9.45e-13 -3.98e-13 -2.62e-14 -4.76e-13 2.51e-12 1.07e-12 -1.02e-12 3.07e-12
56 2758.15 52.52 8.36 1 -5.37e-12 -2.76e-12 -2.43e-12 -4.92e-13 1.14e-13 -1.95e-13 -2.35e-12 -2.74e-12 -5.47e-12 2.95e-12
60 2758.15 52.52 8.36 1 8.81e-13 -2.10e-12 -4.97e-13 5.68e-14 1.14e-13 -2.93e-13 9.41e-13 -5.47e-13 -2.11e-12 2.65e-12
758 2758.15 52.52 8.36 1 2.22e-12 1.63e-12 2.43e-12 -1.99e-13 -2.49e-14 -3.41e-13 2.69e-12 2.04e-12 1.55e-12 9.89e-13
778 2758.15 52.52 8.36 1 -3.24e-12 -1.88e-12 -4.99e-12 -1.15e-13 -5.52e-15 -3.41e-13 -1.87e-12 -3.19e-12 -5.05e-12 2.77e-12
880 2758.15 52.52 8.36 1 1.76e-12 1.88e-12 1.82e-12 -5.26e-13 1.14e-13 0.00e+00 2.36e-12 1.82e-12 1.28e-12 9.37e-13
952 2758.15 52.52 8.36 1 -5.29e-12 -7.11e-13 -1.93e-12 -1.71e-13 5.68e-14 2.27e-13 -7.02e-13 -1.92e-12 -5.31e-12 4.13e-12
3685 0 2758.15 52.52 8.36 1 7.18e-13 1.85e-13 -2.13e-13 1.17e-13 -3.55e-14 3.41e-13 8.45e-13 1.79e-13 -3.34e-13 1.02e-12
41 2758.15 52.52 8.36 1 -8.46e-13 -6.04e-13 -6.04e-14 2.20e-13 -3.50e-15 1.71e-13 -2.15e-14 -4.89e-13 -1.00e-12 8.48e-13
45 2758.15 52.52 8.36 1 1.06e-12 -5.65e-13 5.68e-13 3.55e-14 -5.37e-15 -1.18e-13 1.09e-12 5.42e-13 -5.66e-13 1.46e-12
46 2758.15 52.52 8.36 1 -2.38e-13 6.68e-13 1.28e-13 1.05e-13 -2.84e-14 2.14e-13 6.80e-13 2.26e-13 -3.48e-13 8.92e-13
50 2758.15 52.52 8.36 1 -6.04e-14 1.14e-13 6.39e-14 -4.26e-14 -2.84e-14 -9.99e-14 1.27e-13 1.17e-13 -1.27e-13 2.49e-13
1015 2758.15 52.52 8.36 1 -5.68e-14 -7.85e-13 -2.70e-13 3.55e-14 -1.18e-14 -3.41e-13 1.95e-13 -5.20e-13 -7.87e-13 8.80e-13
1021 2758.15 52.52 8.36 1 9.66e-13 2.17e-13 8.60e-13 4.43e-13 -2.10e-15 -6.82e-13 1.67e-12 4.79e-13 -1.10e-13 1.57e-12
1031 2758.15 52.52 8.36 1 -2.74e-12 -5.68e-13 -1.42e-12 1.07e-13 0.00e+00 -4.55e-13 -5.63e-13 -1.28e-12 -2.89e-12 2.06e-12
1037 2758.15 52.52 8.36 1 2.42e-13 -1.28e-13 1.14e-13 -7.11e-15 -1.42e-14 -2.27e-13 4.14e-13 -5.52e-14 -1.31e-13 5.11e-13
3684 0 3568.63 59.74 9.51 2 1.14e-13 -7.96e-13 2.27e-13 0.00e+00 5.68e-14 -2.27e-13 4.07e-13 -6.22e-14 -7.99e-13 1.05e-12
51 3568.63 59.74 9.51 2 -3.98e-13 9.66e-13 7.11e-13 -1.98e-12 -3.56e-13 -1.58e-13 2.40e-12 7.31e-13 -1.85e-12 3.71e-12
55 3568.63 59.74 9.51 2 -2.10e-12 -1.93e-12 -1.05e-12 -9.09e-13 -9.88e-14 -6.53e-13 -6.34e-13 -1.37e-12 -3.08e-12 2.18e-12
56 3568.63 59.74 9.51 2 2.84e-13 -4.55e-13 -8.53e-13 -9.09e-13 -2.27e-13 9.52e-14 9.20e-13 -8.07e-13 -1.14e-12 1.91e-12
60 3568.63 59.74 9.51 2 5.12e-13 1.14e-12 5.12e-13 -9.09e-13 -2.27e-13 -3.68e-14 1.81e-12 5.30e-13 -1.76e-13 1.74e-12
758 3568.63 59.74 9.51 2 3.41e-13 2.05e-12 1.08e-12 -9.09e-13 -3.40e-13 4.55e-13 2.60e-12 9.89e-13 -1.25e-13 2.38e-12
778 3568.63 59.74 9.51 2 2.27e-13 2.27e-13 3.98e-13 -1.03e-12 2.30e-14 4.55e-13 1.36e-12 3.87e-13 -8.99e-13 1.97e-12
880 3568.63 59.74 9.51 2 -1.71e-12 1.59e-12 9.09e-13 -9.09e-13 -2.27e-13 4.55e-13 1.94e-12 8.48e-13 -1.99e-12 3.51e-12
952 3568.63 59.74 9.51 2 -1.02e-12 1.36e-12 -1.36e-12 -9.09e-13 0.00e+00 4.55e-13 1.68e-12 -9.20e-13 -1.78e-12 3.12e-12
3685 0 3568.63 59.74 9.51 2 1.14e-13 -3.41e-13 2.27e-13 -2.84e-14 -5.68e-14 6.82e-13 8.58e-13 -3.42e-13 -5.16e-13 1.30e-12
41 3568.63 59.74 9.51 2 -2.84e-13 2.27e-13 -2.84e-14 -9.02e-13 -3.56e-13 1.07e-12 1.53e-12 -2.31e-13 -1.38e-12 2.54e-12
45 3568.63 59.74 9.51 2 -5.68e-13 0.00e+00 1.14e-13 2.27e-13 -3.26e-13 6.52e-13 5.63e-13 6.88e-14 -1.09e-12 1.47e-12
46 3568.63 59.74 9.51 2 2.84e-13 -3.41e-13 1.14e-13 3.84e-16 0.00e+00 -9.59e-14 3.27e-13 7.06e-14 -3.41e-13 5.84e-13
50 3568.63 59.74 9.51 2 5.12e-13 6.82e-13 3.98e-13 4.55e-13 0.00e+00 9.45e-13 1.54e-12 6.27e-13 -5.73e-13 1.83e-12
1015 3568.63 59.74 9.51 2 -1.14e-13 5.68e-14 1.71e-13 1.14e-13 -1.13e-13 4.55e-13 5.06e-13 1.01e-13 -4.94e-13 8.71e-13
1021 3568.63 59.74 9.51 2 0.00e+00 5.68e-14 1.71e-13 9.15e-13 -9.06e-14 -4.55e-13 1.11e-12 7.50e-14 -9.53e-13 1.78e-12
1031 3568.63 59.74 9.51 2 -3.41e-13 3.41e-13 -4.55e-13 0.00e+00 -2.27e-13 4.55e-13 4.26e-13 -1.01e-28 -8.80e-13 1.15e-12
1037 3568.63 59.74 9.51 2 -1.14e-13 -4.55e-13 0.00e+00 2.84e-13 -1.14e-13 4.55e-13 4.15e-13 -2.05e-13 -7.79e-13 1.03e-12

Alternatively I can do that by first using reset_index to move all the index columns into data, and then using set_index to define the order of columns I want as my index:

cht.reset_index().set_index(['ElementID','NodeID','Mode','Freq']).sort_index()
Item EigenvalueReal Radians oxx oyy ozz txy tyz txz omax omid omin von_mises
ElementID NodeID Mode Freq
3684 0 1 8.36 2758.15 52.52 7.93e-12 -3.58e-12 -3.41e-13 -1.99e-13 2.84e-14 5.12e-13 7.96e-12 -3.72e-13 -3.59e-12 1.03e-11
2 9.51 3568.63 59.74 1.14e-13 -7.96e-13 2.27e-13 0.00e+00 5.68e-14 -2.27e-13 4.07e-13 -6.22e-14 -7.99e-13 1.05e-12
51 1 8.36 2758.15 52.52 -8.67e-13 2.29e-12 -2.53e-12 -3.15e-13 2.17e-14 1.95e-13 2.32e-12 -8.75e-13 -2.55e-12 4.29e-12
2 9.51 3568.63 59.74 -3.98e-13 9.66e-13 7.11e-13 -1.98e-12 -3.56e-13 -1.58e-13 2.40e-12 7.31e-13 -1.85e-12 3.71e-12
55 1 8.36 2758.15 52.52 2.33e-12 1.18e-12 -9.45e-13 -3.98e-13 -2.62e-14 -4.76e-13 2.51e-12 1.07e-12 -1.02e-12 3.07e-12
2 9.51 3568.63 59.74 -2.10e-12 -1.93e-12 -1.05e-12 -9.09e-13 -9.88e-14 -6.53e-13 -6.34e-13 -1.37e-12 -3.08e-12 2.18e-12
56 1 8.36 2758.15 52.52 -5.37e-12 -2.76e-12 -2.43e-12 -4.92e-13 1.14e-13 -1.95e-13 -2.35e-12 -2.74e-12 -5.47e-12 2.95e-12
2 9.51 3568.63 59.74 2.84e-13 -4.55e-13 -8.53e-13 -9.09e-13 -2.27e-13 9.52e-14 9.20e-13 -8.07e-13 -1.14e-12 1.91e-12
60 1 8.36 2758.15 52.52 8.81e-13 -2.10e-12 -4.97e-13 5.68e-14 1.14e-13 -2.93e-13 9.41e-13 -5.47e-13 -2.11e-12 2.65e-12
2 9.51 3568.63 59.74 5.12e-13 1.14e-12 5.12e-13 -9.09e-13 -2.27e-13 -3.68e-14 1.81e-12 5.30e-13 -1.76e-13 1.74e-12
758 1 8.36 2758.15 52.52 2.22e-12 1.63e-12 2.43e-12 -1.99e-13 -2.49e-14 -3.41e-13 2.69e-12 2.04e-12 1.55e-12 9.89e-13
2 9.51 3568.63 59.74 3.41e-13 2.05e-12 1.08e-12 -9.09e-13 -3.40e-13 4.55e-13 2.60e-12 9.89e-13 -1.25e-13 2.38e-12
778 1 8.36 2758.15 52.52 -3.24e-12 -1.88e-12 -4.99e-12 -1.15e-13 -5.52e-15 -3.41e-13 -1.87e-12 -3.19e-12 -5.05e-12 2.77e-12
2 9.51 3568.63 59.74 2.27e-13 2.27e-13 3.98e-13 -1.03e-12 2.30e-14 4.55e-13 1.36e-12 3.87e-13 -8.99e-13 1.97e-12
880 1 8.36 2758.15 52.52 1.76e-12 1.88e-12 1.82e-12 -5.26e-13 1.14e-13 0.00e+00 2.36e-12 1.82e-12 1.28e-12 9.37e-13
2 9.51 3568.63 59.74 -1.71e-12 1.59e-12 9.09e-13 -9.09e-13 -2.27e-13 4.55e-13 1.94e-12 8.48e-13 -1.99e-12 3.51e-12
952 1 8.36 2758.15 52.52 -5.29e-12 -7.11e-13 -1.93e-12 -1.71e-13 5.68e-14 2.27e-13 -7.02e-13 -1.92e-12 -5.31e-12 4.13e-12
2 9.51 3568.63 59.74 -1.02e-12 1.36e-12 -1.36e-12 -9.09e-13 0.00e+00 4.55e-13 1.68e-12 -9.20e-13 -1.78e-12 3.12e-12
3685 0 1 8.36 2758.15 52.52 7.18e-13 1.85e-13 -2.13e-13 1.17e-13 -3.55e-14 3.41e-13 8.45e-13 1.79e-13 -3.34e-13 1.02e-12
2 9.51 3568.63 59.74 1.14e-13 -3.41e-13 2.27e-13 -2.84e-14 -5.68e-14 6.82e-13 8.58e-13 -3.42e-13 -5.16e-13 1.30e-12
41 1 8.36 2758.15 52.52 -8.46e-13 -6.04e-13 -6.04e-14 2.20e-13 -3.50e-15 1.71e-13 -2.15e-14 -4.89e-13 -1.00e-12 8.48e-13
2 9.51 3568.63 59.74 -2.84e-13 2.27e-13 -2.84e-14 -9.02e-13 -3.56e-13 1.07e-12 1.53e-12 -2.31e-13 -1.38e-12 2.54e-12
45 1 8.36 2758.15 52.52 1.06e-12 -5.65e-13 5.68e-13 3.55e-14 -5.37e-15 -1.18e-13 1.09e-12 5.42e-13 -5.66e-13 1.46e-12
2 9.51 3568.63 59.74 -5.68e-13 0.00e+00 1.14e-13 2.27e-13 -3.26e-13 6.52e-13 5.63e-13 6.88e-14 -1.09e-12 1.47e-12
46 1 8.36 2758.15 52.52 -2.38e-13 6.68e-13 1.28e-13 1.05e-13 -2.84e-14 2.14e-13 6.80e-13 2.26e-13 -3.48e-13 8.92e-13
2 9.51 3568.63 59.74 2.84e-13 -3.41e-13 1.14e-13 3.84e-16 0.00e+00 -9.59e-14 3.27e-13 7.06e-14 -3.41e-13 5.84e-13
50 1 8.36 2758.15 52.52 -6.04e-14 1.14e-13 6.39e-14 -4.26e-14 -2.84e-14 -9.99e-14 1.27e-13 1.17e-13 -1.27e-13 2.49e-13
2 9.51 3568.63 59.74 5.12e-13 6.82e-13 3.98e-13 4.55e-13 0.00e+00 9.45e-13 1.54e-12 6.27e-13 -5.73e-13 1.83e-12
1015 1 8.36 2758.15 52.52 -5.68e-14 -7.85e-13 -2.70e-13 3.55e-14 -1.18e-14 -3.41e-13 1.95e-13 -5.20e-13 -7.87e-13 8.80e-13
2 9.51 3568.63 59.74 -1.14e-13 5.68e-14 1.71e-13 1.14e-13 -1.13e-13 4.55e-13 5.06e-13 1.01e-13 -4.94e-13 8.71e-13
1021 1 8.36 2758.15 52.52 9.66e-13 2.17e-13 8.60e-13 4.43e-13 -2.10e-15 -6.82e-13 1.67e-12 4.79e-13 -1.10e-13 1.57e-12
2 9.51 3568.63 59.74 0.00e+00 5.68e-14 1.71e-13 9.15e-13 -9.06e-14 -4.55e-13 1.11e-12 7.50e-14 -9.53e-13 1.78e-12
1031 1 8.36 2758.15 52.52 -2.74e-12 -5.68e-13 -1.42e-12 1.07e-13 0.00e+00 -4.55e-13 -5.63e-13 -1.28e-12 -2.89e-12 2.06e-12
2 9.51 3568.63 59.74 -3.41e-13 3.41e-13 -4.55e-13 0.00e+00 -2.27e-13 4.55e-13 4.26e-13 -1.01e-28 -8.80e-13 1.15e-12
1037 1 8.36 2758.15 52.52 2.42e-13 -1.28e-13 1.14e-13 -7.11e-15 -1.42e-14 -2.27e-13 4.14e-13 -5.52e-14 -1.31e-13 5.11e-13
2 9.51 3568.63 59.74 -1.14e-13 -4.55e-13 0.00e+00 2.84e-13 -1.14e-13 4.55e-13 4.15e-13 -2.05e-13 -7.79e-13 1.03e-12

Static & Transient DataFrames in PyNastran

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op2_pandas_multi_case.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op2_pandas_multi_case.ipynb

import os
import pandas as pd
import pyNastran
from pyNastran.op2.op2 import read_op2

pkg_path = pyNastran.__path__[0]
model_path = os.path.join(pkg_path, '..', 'models')
Solid Bending

Let’s show off combine=True/False. We’ll talk about the keys soon.

solid_bending_op2 = os.path.join(model_path, 'solid_bending', 'solid_bending.op2')
solid_bending = read_op2(solid_bending_op2, combine=False, debug=False)
print(solid_bending.displacements.keys())
INFO: op2_scalar.py:1459 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran\\pyNastran\\..\\models\\solid_bending\\solid_bending.op2'
dict_keys([(1, 1, 1, 0, 0, '', '')])
c:nasam4formatsgitpynastranpyNastranop2op2.py:740: FutureWarning:
Panel is deprecated and will be removed in a future version.
The recommended way to represent these types of 3-dimensional data are with a MultiIndex on a DataFrame, via the Panel.to_frame() method
Alternatively, you can use the xarray package http://xarray.pydata.org/en/stable/.
Pandas provides a .to_xarray() method to help automate this conversion.

  obj.build_dataframe()
solid_bending_op2 = os.path.join(model_path, 'solid_bending', 'solid_bending.op2')
solid_bending2 = read_op2(solid_bending_op2, combine=True, debug=False)
print(solid_bending2.displacements.keys())
INFO: op2_scalar.py:1459 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran\\pyNastran\\..\\models\\solid_bending\\solid_bending.op2'
dict_keys([1])
Single Subcase Buckling Example

The keys cannot be “combined” despite us telling the program that it was OK. We’ll get the following values that we need to handle. #### isubcase, analysis_code, sort_method, count, subtitle * isubcase -> the same key that you’re used to accessing * sort_method -> 1 (SORT1), 2 (SORT2) * count -> the optimization count * subtitle -> the analysis subtitle (changes for superlements) * analysis code -> the “type” of solution

### Partial code for calculating analysis code:

 if trans_word == 'LOAD STEP':  # nonlinear statics
    analysis_code = 10
elif trans_word in ['TIME', 'TIME STEP']:  # TODO check name
    analysis_code = 6
elif trans_word == 'EIGENVALUE':  # normal modes
    analysis_code = 2
elif trans_word == 'FREQ':  # TODO check name
    analysis_code = 5
elif trans_word == 'FREQUENCY':
    analysis_code = 5
elif trans_word == 'COMPLEX EIGENVALUE':
    analysis_code = 9
else:
    raise NotImplementedError('transient_word=%r is not supported...' % trans_word)
Let’s look at an odd case:

You can do buckling as one subcase or two subcases (makes parsing it a lot easier!).

However, you have to do this once you start messing around with superelements or multi-step optimization.

For optimization, sometimes Nastran will downselect elements and do an optimization on that and print out a subset of the elements. At the end, it will rerun an analysis to double check the constraints are satisfied. It does not always do multi-step optimization.

op2_filename = os.path.join(model_path, 'sol_101_elements', 'buckling_solid_shell_bar.op2')
model = read_op2(op2_filename, combine=True, debug=False, build_dataframe=True)
INFO: op2_scalar.py:1459 op2_filename = 'c:\\nasa\\m4\\formats\\git\\pynastran\\pyNastran\\..\\models\\sol_101_elements\\buckling_solid_shell_bar.op2'
stress_keys = model.cquad4_stress.keys()
print (stress_keys)

# subcase, analysis_code, sort_method, count, isuperelmemnt_adaptivity_index, pval_step
key0 = (1, 1, 1, 0, 0, '', '')
key1 = (1, 8, 1, 0, 0, '', '')
dict_keys([(1, 1, 1, 0, 0, '', ''), (1, 8, 1, 0, 0, '', '')])

Keys: * key0 is the “static” key * key1 is the “buckling” key

Similarly: * Transient solutions can have preload * Frequency solutions can have loadsets (???)

Moving onto the data frames
  • The static case is the initial deflection state

  • The buckling case is “transient”, where the modes (called load steps or lsdvmn here) represent the “times”

pyNastran reads these tables differently and handles them differently internally. They look very similar though.

stress_static = model.cquad4_stress[key0].data_frame
stress_transient = model.cquad4_stress[key1].data_frame

# The final calculated factor:
#   Is it a None or not?
# This defines if it's static or transient
print('stress_static.nonlinear_factor = %s' % model.cquad4_stress[key0].nonlinear_factor)
print('stress_transient.nonlinear_factor = %s' % model.cquad4_stress[key1].nonlinear_factor)

print('data_names  = %s' % model.cquad4_stress[key1].data_names)
print('loadsteps   = %s' % model.cquad4_stress[key1].lsdvmns)
print('eigenvalues = %s' % model.cquad4_stress[key1].eigrs)
stress_static.nonlinear_factor = nan
stress_transient.nonlinear_factor = 4
data_names  = ['lsdvmn', 'eigr']
loadsteps   = [1, 2, 3, 4]
eigenvalues = [-49357660160.0, -58001940480.0, -379750744064.0, -428462538752.0]
Static Table
# Sets default precision of real numbers for pandas output\n"
pd.set_option('precision', 2)

stress_static.head(20)
index fiber_distance oxx oyy txy angle omax omin von_mises
ElementID NodeID Location
6 CEN Top 0 -0.12 5.85e-07 9.73e-06 -1.36e-07 -89.15 9.73e-06 5.83e-07 9.46e-06
Bottom 1 0.12 4.71e-07 9.44e-06 -1.61e-07 -88.97 9.44e-06 4.69e-07 9.21e-06
4 Top 2 -0.12 -6.50e-07 9.48e-06 -1.36e-07 -89.23 9.48e-06 -6.52e-07 9.82e-06
Bottom 3 0.12 -8.37e-07 9.11e-06 -1.61e-07 -89.08 9.12e-06 -8.39e-07 9.56e-06
1 Top 4 -0.12 -6.50e-07 9.98e-06 -1.36e-07 -89.27 9.99e-06 -6.51e-07 1.03e-05
Bottom 5 0.12 -8.37e-07 9.76e-06 -1.61e-07 -89.13 9.76e-06 -8.39e-07 1.02e-05
14 Top 6 -0.12 1.82e-06 9.98e-06 -1.36e-07 -89.05 9.99e-06 1.82e-06 9.21e-06
Bottom 7 0.12 1.78e-06 9.76e-06 -1.61e-07 -88.85 9.76e-06 1.78e-06 9.01e-06
15 Top 8 -0.12 1.82e-06 9.48e-06 -1.36e-07 -88.98 9.48e-06 1.82e-06 8.72e-06
Bottom 9 0.12 1.78e-06 9.11e-06 -1.61e-07 -88.75 9.12e-06 1.78e-06 8.37e-06
7 CEN Top 10 -0.12 7.16e-07 1.02e-05 1.22e-07 89.26 1.02e-05 7.14e-07 9.82e-06
Bottom 11 0.12 7.31e-07 1.04e-05 1.53e-07 89.10 1.04e-05 7.29e-07 1.01e-05
3 Top 12 -0.12 -7.30e-07 1.04e-05 1.22e-07 89.37 1.04e-05 -7.31e-07 1.08e-05
Bottom 13 0.12 -8.05e-07 1.07e-05 1.53e-07 89.24 1.07e-05 -8.07e-07 1.12e-05
2 Top 14 -0.12 -7.30e-07 9.90e-06 1.22e-07 89.34 9.90e-06 -7.31e-07 1.03e-05
Bottom 15 0.12 -8.05e-07 1.01e-05 1.53e-07 89.20 1.01e-05 -8.07e-07 1.05e-05
17 Top 16 -0.12 2.16e-06 9.90e-06 1.22e-07 89.10 9.90e-06 2.16e-06 9.02e-06
Bottom 17 0.12 2.27e-06 1.01e-05 1.53e-07 88.88 1.01e-05 2.26e-06 9.18e-06
16 Top 18 -0.12 2.16e-06 1.04e-05 1.22e-07 89.15 1.04e-05 2.16e-06 9.52e-06
Bottom 19 0.12 2.27e-06 1.07e-05 1.53e-07 88.96 1.07e-05 2.26e-06 9.79e-06
Transient Table
# Sets default precision of real numbers for pandas output\n"
pd.set_option('precision', 3)
#import numpy as np
#np.set_printoptions(formatter={'all':lambda x: '%g'})

stress_transient.head(20)
LoadStep Item 1 2 3 4
EigenvalueReal -49357660160.0 -58001940480.0 -379750744064.0 -428462538752.0
ElementID NodeID Location
6 CEN Top fiber_distance -1.250e-01 -1.250e-01 -1.250e-01 -1.250e-01
Top oxx -3.657e+04 -1.587e+05 -1.497e+05 1.069e+06
Top oyy 2.064e+05 1.084e+06 4.032e+05 6.158e+06
Top txy 2.296e+02 -1.267e+04 4.394e+06 -3.572e+05
Top angle 8.995e+01 -8.942e+01 4.680e+01 -8.601e+01
Top omax 2.064e+05 1.084e+06 4.530e+06 6.183e+06
Top omin -3.657e+04 -1.588e+05 -4.276e+06 1.044e+06
Top von_mises 2.269e+05 1.171e+06 7.627e+06 5.733e+06
Bottom fiber_distance 1.250e-01 1.250e-01 1.250e-01 1.250e-01
Bottom oxx -2.816e+04 -9.555e+04 -1.942e+05 -4.882e+05
Bottom oyy 1.402e+05 7.325e+05 7.017e+03 -2.785e+05
Bottom txy 7.409e+04 -3.522e+04 4.535e+06 -3.533e+05
Bottom angle 6.933e+01 -8.757e+01 4.564e+01 -5.326e+01
Bottom omax 1.682e+05 7.340e+05 4.442e+06 -1.480e+04
Bottom omin -5.611e+04 -9.705e+04 -4.630e+06 -7.519e+05
Bottom von_mises 2.022e+05 7.870e+05 7.857e+06 7.446e+05
4 Top fiber_distance -1.250e-01 -1.250e-01 -1.250e-01 -1.250e-01
Top oxx -9.976e+04 -5.802e+05 -2.925e+05 7.936e+05
Top oyy -1.102e+06 1.461e+06 -3.138e+06 6.441e+06
Top txy 2.296e+02 -1.267e+04 4.394e+06 -3.572e+05

OP4

OP4 Demo

The Jupyter notebook for this demo can be found in: - docs/quick_start/demo/op4_demo.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/main/docs/quick_start/demo/op4_demo.ipynb

The OP4 is a Nastran input/output format that can store matrices.

The OP2 can as well, but is less validated in regards to matrices.

Import pyNastran
import os

import pyNastran
pkg_path = pyNastran.__path__[0]

from pyNastran.utils import print_bad_path
from pyNastran.op4.op4 import read_op4
import numpy as np
from numpy import float32, float64, int32, int64, product

# decrease output precision
np.set_printoptions(precision=3, threshold=20)

GUI

Graphical User Interface (GUI)

Overview

The pyNastran GUI was originally developed to solve a data validation problem. It’s hard to validate that things like coordinate systems were correct if you can’t look at the geometry in a native format. As time went on, niche features that were needed (e.g., aero panels) that were not supported natively in Patran 2005, were added. The goal is not to replace a code like Patran or FEMAP, but instead complement it.

Since the initial development, the GUI has become significantly more capable by adding features such as displacements and forces, so the need for a code like Patran has decreased, but will not be eliminated.

Introduction

The Graphical User Interface (GUI) looks like:

_images/qt1.png

A somewhat messy, but more featured image:

_images/eigenvectors_groups_legend.png

The GUI also has a sidebar and transient support.

Advantages of pyNastranGUI
  • command line interface for loading models

  • simple scripting

  • nice looking models

  • intuitive rotation

  • niche features - aero panels - aero splines - aero spline points - control surfaces

  • custom results from a CSV file

  • 64 bit support - Patran 2005 can’t read in models that pyNastranGUI can - not an advantage for newer versions

  • animated gifs

Advantages of Patran/FEMAP
  • CAD geometry support (e.g., IGES, Parasolid)

  • geometry creation (e.g., points, surfaces)

  • meshing

  • edit materials/properties

  • much better picking support

  • much better groups

  • better use of memory

  • grid point forces

  • many more…

Purpose of additional formats

Over time, pyNastran has also added converter and GUI support for additional formats. Nastran is not the only piece of the analysis puzzle and there is a need for niche engineering formats.

While, you could convert a Cart3d model (a simple triangulation) to another format like Nastran, you would need to map the geometry/result quantity of interest (e.g., Mach Number) to something like pressure. That’s unintuitive and also requires writing an ill-defined format converter. It’s nice to load it natively as you can also automatically create other quantities (e.g., the bounding CFD box, free edges).

Finally, adding support for alternate formats drives GUI development. The model reload functionality was added to address loading the latest time step of a Usm3d model. It was repurposed to reload the geometry for other formats. This is very useful when creating aero panels and you want to see your changes. The groups functionality benefits all formats.

Additional formats include:

  • panair

  • cart3d

  • stl

  • tecplot

  • AFLR

  • bsurf

  • surf

  • ugrid

  • usm3d

Setup Note

Download the entire package from Github or just the GUI executable.

If you download the source, make sure you follow the installation and use setup.py develop and not setup.py install.

For the GUI, the main requires:
  • Python 3.7-3.10

  • any version of numpy

  • any version of scipy

  • vtk==7 or vtk==8 or vtk==9 (best in 7 or 8)

  • PyQt5/6 or PySide2/6

  • other minor packages

Running the GUI

On the command line:

>>> pyNastranGUI

To view the options:

>>> pyNastranGUI --help

  Usage:
    pyNastranGUI [-f FORMAT] INPUT [-o OUTPUT]
                 [-s SHOT] [-m MAGNIFY]
                 [-g GSCRIPT] [-p PSCRIPT]
                 [-u POINTS_FNAME...] [--user_geom GEOM_FNAME...]
                 [-q] [--groups]
    pyNastranGUI [-f FORMAT] INPUT OUTPUT [-o OUTPUT]
                 [-s SHOT] [-m MAGNIFY]
                 [-g GSCRIPT] [-p PSCRIPT]
                 [-u POINTS_FNAME...] [--user_geom GEOM_FNAME...]
                 [-q] [--groups]
    pyNastranGUI [-f FORMAT] [-i INPUT] [-o OUTPUT...]
                 [-s SHOT] [-m MAGNIFY]
                 [-g GSCRIPT] [-p PSCRIPT]
                 [-u POINTS_FNAME...] [--user_geom GEOM_FNAME...]
                 [-q] [--groups]
    pyNastranGUI -h | --help
    pyNastranGUI -v | --version

  Primary Options:
    -f FORMAT, --format FORMAT  format type (avus, cart3d, lawgs, nastran, panair,
                                             plot3d, stl, surf, tetgen, ugrid, usm3d)
    -i INPUT, --input INPUT     path to input file
    -o OUTPUT, --output OUTPUT  path to output file

  Secondary Options:
    -g GSCRIPT, --geomscript        path to geometry script file (runs before load geometry)
    -p PSCRIPT, --postscript        path to post script file (runs after load geometry)
    -s SHOT, --shots SHOT           path to screenshot (only 1 for now)
    -m MAGNIFY, --magnify           how much should the resolution on a picture be magnified [default: 5]
    --groups                        enables groups
    --user_geom GEOM_FNAME          add user specified points to an alternate grid (repeatable)
    -u POINTS_FNAME, --user_points  add user specified points to an alternate grid (repeatable)

  Info:
    -q, --quiet    prints debug messages (default=True)
    -h, --help     show this help message and exit
    -v, --version  show program's version number and exit

The standard way to run the code is simply by launching the exe. Alternatively, you can call it from the command line, which can directly load a model:

>>> pyNastranGUI -f nastran -i model.bdf -o model1.op2 -o model2.op2

The solid_bending.bdf and solid_bending.op2 files have been included as examples that work in the GUI. They are inside the “models” folder (at the same level as setup.py).

You can also run it like:

>>> pyNastranGUI model.bdf model1.op2

Here the code will guess based on your file extension what your file format is. If you want to load a second OP2, you must use -o model2.op2.

Features
  • fringe plot support

    • elemental/nodal results

    • custom CSV results

  • deflection results

  • force results

  • command line interface

  • scripting capability

  • high resolution screenshot

  • show/hide elements

    • can edit properties (e.g. color/opacity/size) using Edit Geometry Properties... on the View menu

  • legend menu

  • animation menu

  • save/load view menu

Minor Features
  • snap to axis

  • clipping customization menu

  • edges flippable from menu

  • change label color/size menu

  • change background color

  • attach simplistic custom geometry with the Load CSV User Geometry or the -user_geom option

  • additional points may be added with the Load CSV User Points or the --user_points option

Nastran Specific Features
  • attach multiple OP2 files

  • supports SPOINTs

  • displacement/eigenvectors/nodal force results

    • scale/phase editable from legend menu

    • rotated into global frame

  • Edit Geometry Properties

    • SPC/MPC/RBE constraints

    • CAERO panel, subpanels

    • AEFACT control surfaces

    • SPLINE panels/points

    • bar/beam orientation vectors

    • CONM2

BDF Requirements
  • Entire model can be cross-referenced

  • Same requirements as BDF (include an executive/case control deck, define all cross-referenced cards, etc.)

Versioning Note

The GUI download is typically newer than the latest release version.

Additional Formats

Some of the results include:

  • Nastran ASCII input (*.bdf, *.nas, *.dat, *.pch, *.ecd); binary output (*.op2)

    • geometry

      • node ID

      • element ID

      • property ID

      • material ID

      • thickness

      • normal

      • shell offset

      • PBAR/PBEAM/PBARL/PBEAML type

      • element quality (min/max interior angle, skew angle, taper ratio, area ratio)

    • real results
      • stress, strain

      • displacement, eigenvector, temperature, SPC forces, MPC forces, load vector

    • complex results
      • displacement, eigenvector

  • Cart3d ASCII/binary input (*.tri); ASCII output (*.triq)

    • Node ID

    • Element ID

    • Region

    • Cp, p, U, V, W, E, rho, rhoU, rhoV, rhoW, rhoE, Mach

    • Normal

  • LaWGS input (*.wgs)

  • Panair input (*.inp); output (agps, *.out)

    • Patch ID

    • Normal X/Y/Z

    • Centroid X/Y/Z

    • Area

    • Node X/Y/Z

    • Cp

  • STL ASCII/binary input (*.stl)

    • Normal X/Y/Z

  • Tetgen input (*.smesh)

  • Usm3d surface input (*.front, *.cogsg); volume input (*.cogsg); volume output (*.flo)

    • Boundary Condition Region

    • Node ID

    • Cp, Mach, T, U, V, W, p, rhoU

Features Overview
Edit Geometry Properties

The View -> “Edit Geometry Properties” menu brings up:

_images/edit_geometry_properties.png

This menu allows you to edit the opacity, line width, point size, show/hide various things associated with the model. The geometry auto-updates when changes are made.

Modify Legend

The View -> “Modify Legend” menu brings up:

_images/legend.png

This menu allows you to edit the max/min values of the legend as well as the orientation, number format (e.g. float precision) and deflection scale. Defaults are stored, so they may always be gone back to. The geometry will update when Apply/OK is clicked. OK/Cancel will close the window.

Animation Menu

The animation menu is a sub-menu found on the legend menu. Hover over the cells for more information.

Animation of Displacment/Mode Shapes (Animate Scale)

You must load the animation menu when a displacement-like result is active. You may then change to a scalar result to show during the animation. For the following SOL 101 static deflection result, Animate Scale is used to scale the current result (Displacement). The iCase value corresponds to case that is currently active (Displacement) and is automatically populated when you click the Create Animation button from the Legend menu.

If you would like to plot a separate result (e.g., Node ID), switch to that result. The iCase value will not change. When you click Run All, the iCase value is pulled and the deflection shape is calculated. Make sure you actually have a deflected geometry.

_images/animation_menu_scale.png

In your output folder, you will find:

_images/solid_bending.gif

If the file is too big, shrink the size of the window. Make the max deflection of the image fill the screen. Leave minimal whitespace.

Note

If unlickling Repeat? doesn’t disable gif looping, upgrade imageio.

Animation of Complex Mode Shapes (Animate Phase)

Complex Mode Shapes are simple and similar to the Animate Scale option. Here, the phase angle sweeps from 0 to 360 degrees. Note that this option only shows up when you have a complex result for iCase.

_images/animation_menu_freq.png
Animation of Time/Frequency/Load Step Results (Animate Time)

This option is recommended only for constant time/frequency/load step results. It is now necessary to learn how to set iCase. In the Application log, you’ll see:

COMMAND: fname=gui_qt_common.pyc lineNo=316 cycle_results(case=10)

Check your first (assume 10), second (assume 11), and final time step (assume 40) for their iCase values.

For deflection results loaded from an OP2, the iCase Delta will be 1, but depending on the frame rate and total time you want, you can skip steps.

_images/animation_menu_time.png

Note that there is currently no way to plot a transient result other than the deflection unless you want to use scripting.

Preferences Menu

The preferences menu allows you to change various settings. These will be remembered when you load model again. The menu looks like:

_images/preferences_menu.png

Hover over the cells for more information.

Picking Results

Click on the Probe button to activate probing. Now click on a node/element. A label will appear . This label will appear at the centroid of an elemental result or the closest node to the selected location. The value for the current result quantity will appear on the model. You can also press the p button.

_images/picking_results.png

For “NodeID”, the xyz of the selected point and the node in global XYZ space will be shown. Labels may be cleared from the View menu. Text color may also be changed from the View -> Preferences menu.

Note that for line elements, you need to be very accurate with your picking. Zooming in does not help with picking like it does for shells.

Focal Point

Click the following button and click on the rotation center point of the model. The model will now rotate around that point.

_images/trotation_center.png

Alternatively, hover over the point and press the f key.

Model Clipping

Clipping let’s you see “into” the model.

_images/clipping.png

Zoom in and hover over an element and press the f key. The model will pan and now rotate around that point. Continue to hold f while the model recenters. Eventually, the frame will clip. Reset the view by clicking the Undo-looking arrow at the top.

Note that clipping currently doesn’t work…

Modify Groups

The View -> “Modify Groups” menu brings up:

_images/modify_groups1.png

Had you first clicked View -> “Create Groups by Property ID”, you’d get:

_images/modify_groups2.png

Add/Remove use the “Patran-style” syntax:

# elements 1 to 10 inclusive
1:10

# elements 100 to the end
100:#

# every other element 1 to 11 - 1, 3, 5, 7, 9, 11
1:11:2

The name of the group may also be changed, but duplicate names are not allowed. The “main” group is the entire geometry.

The bolded/italicized text indicates the group that will be displayed to the screen. The defaults will be updated when you click Set As Main. This will also update the bolded/italicided group.

Camera Views

The eyeball icon brings up a camera view. You can set and save multiple camera views. Additionally, views are written out for scripting. You can script an external optimization process and take pictures every so many steps.

_images/camera_views.png
User Points

User points allow you to load a CSV of xyz points. These may be loaded from within the GUI or from the command line.

# x, y, z
1.0, 2.0, 3.0
4.0, 5.0, 6.0

These will show up as points in the GUI with your requested filename.

User Geometry

User geometry is an attempt at creating a simple file format for defining geometry. This may be loaded from the command line. The structure will probably change.

The geometry may be modified from the Edit Geometry Properties menu.

# all supported cards
#  - GRID
#  - BAR
#  - TRI
#  - QUAD
#
# doesn't support:
#  - solid elements
#  - element properties
#  - custom colors
#  - coordinate systems
#  - materials
#  - loads
#  - results

#    id  x    y    z
GRID, 1, 0.2, 0.3, 0.3
GRID, 2, 1.2, 0.3, 0.3
GRID, 3, 2.2, 0.3, 0.3
GRID, 4, 5.2, 0.3, 0.3
grid, 5, 5.2, 1.3, 2.3  # case insensitive

#    ID, nodes
BAR,  1, 1, 2
TRI,  2, 1, 2, 3
# this is a comment

QUAD, 3, 1, 5, 3, 4
QUAD, 4, 1, 2, 3, 4  # this is after a blank line
Custom Scalar Results

Custom Elemental/Nodal CSV/TXT file results may be loaded. The order and length is important. Results must be in nodal/elemental sorted order. The following example has 3 scalar values with 2 locations. The corresponding model must have ONLY two nodes. By default, all results must be floatable (e.g., no NaN values).

# element_id, x,   y, z
1,            1.0, 2, 3.0
2,            4.0, 5, 6.0
# element_id  x    y  z
1             1.0  2  3.0
2             4.0  5  6.0

You may also assign result types.

# element_id(%i), x(%f), y(%i), z(%f)
1,                1.0,     2,     3.0
2,                4.0,     5,     6.0
Custom Deflection Results

Custom Elemental/Nodal CSV/TXT file results may be loaded. The order and length is important. Results must be in nodal/elemental sorted order. The following example has 3 scalar values with 2 locations. The model must have only two nodes.

# result_name
1.0     2     3.0
2.0     5     6.0
Custom Results Specific Buttons

Nastran Static/Dynamic Aero solutions require custom cards that create difficult to view, difficult to validate geometry. The pyNastranGUI aides in creating models. The CAERO panels are seen when a model is loaded:

_images/caero.png

Additionally, by clicking the Toggle CAERO Subpanels button, the subpanels may be seen:

_images/caero_subpanels.png

Additionally, flaps are shown from within the GUI. SPLINE surfaces are also generated and may be seen on the View -> Edit Geometry Properties menu.

Scripting

GUI commands are logged to the window with their call signature. Scripting may be used to call any function in the GUI class. Most of these commands are written to the COMMAND output.

For example, you can:

  • load geometry

  • load results

  • plot unsupported result types

  • custom animations of mode shapes

  • high resolution screenshots

  • model introspection

  • create custom annotations

Using the scripting menu

The scripting menu allows for custom code and experimentation to be written without loading a script from a file. All valid Python is accepted. Scripting commands should start with self. as they’re left off from the menu. Local variables do not need this.

Command line scripting

geomscript runs after the load_geometry method, while postscript runs after load_results has been performed

import sys
self.on_take_screenshot('solid_bending.png', magnify=5)
sys.exit()
>>> pyNastranGUI solid_bending.bdf solid_bending.op2 --postscript take_picture.py
High Resolution Screenshots
Option #1
self.on_take_screenshot('solid_bending.png', magnify=5)
Option #2

On the View -> Preferences menu, change Screenshot Magnify and click Apply. Now take a screenshot.

Other

Calling pyNastran from Matlab

Note about Speed

There are two ways to pull large data from Python to Nastran.

  1. Use the Matlab-Python Interface

  2. Do an Matlab call to Python, dump your OP2 results matrices using to hdf5 (using h5py) and load them into and load them Matlab. It’s recommended that you don’t use scipy’s MAT reader as it seems to be buggy, not to mention that hdf5 has replaced the MAT format in Matlab.

Intuitively, it seems to that Option #1 should be faster, but for large problems, that doesn’t seem to be the case. Then again, Option #1, would be probably be better for any geometry related operation. In other words, test it.

Working around Matlab’s oddities

Replace the base redirectstdout.m file (that for my installation is located in the following folder):

C:Program FilesMATLABMATLAB Production ServerR2015atoolboxmatlabexternalinterfacespython+python+internalredirectstdout.m

with this file:

Also, instead of imports like:

>>> import py.pyNastran.op2.op2.OP2

use:

>>> import py.pyNastran.op2.op2.OP2.*
>>> clear
>>> import py.pyNastran.op2.op2.OP2.*
>>> clear import
>>> import py.pyNastran.op2.op2.OP2

If you don’t need all this insanity, please post and say what you did.

Example 1 - BDF

This example demonstrates how to call the BDF class and extract velocity, machs, and densities (FLFACT cards) from a SOL 145 deck

..

    >>> rho, velocity, mach, nmodes = get_flutter_bdf("model_145.bdf");

function [Density,Velocity,Mach,Nmodes] = get_flutter_bdf(filenamebdf)
    %get_flutter_bdf Reads bdf and provides Flutter condition from FLFACT

    import py.pyNastran.bdf.bdf.BDF % import BDF class
    import py.numpy.asarray % import as array function (convert list into a ndarray)

    % Instantiate an BDF class
    bdf = BDF();

    %% Read the BDF
    bdf.read_bdf(filenamebdf);

    % NMODES (is valid only if RESVEC = NO, that is no residual augmentation)
    EIGRL_CARDS_ID = ndarray2mat(asarray(py.list(bdf.methods.keys())));
    RESVEC_tuple = bdf.case_control_deck.get_subcase_parameter(0,'RESVEC');
    RESVEC_cell = RESVEC_tuple.cell;
    RESVEC_RH = char(RESVEC_tuple{1}); % RH side of the RESVEC case command


    if numel(EIGRL_CARDS_ID) ~= 1
        errordlg('If bdf contains more than 1 EIGRL cards, the software does not work. (Things are much more complicated)');
        return
    elseif strcmp(RESVEC_RH,'NO')~=1
            errordlg('If bdf does not contain RESVEC = NO commands, the software does not work. (Things are much more complicated)');
        return
    end

    Nmodes = double(bdf.Method(EIGRL_CARDS_ID).nd);


    % FLUTTER SETUP

    FLUTTER_CARDS_ID = ndarray2mat(asarray(py.list(bdf.flutters.keys())));

    if numel(FLUTTER_CARDS_ID) ~= 1

        errordlg('If bdf contains more than 1 FLUTTER cards, the software does not work. (Things are much more complicated)');
        return

    end


    % DENSITY
    Density_fact = ndarray2mat(bdf.FLFACT(1).factors);
    % Density_fact = [1 2];

    % MACH
    Mach_fact = ndarray2mat(bdf.FLFACT(2).factors);
    % Mach_fact = [1 2];



    % VELOCITY
    Velocity_fact = ndarray2mat(bdf.FLFACT(3).factors);
    Velocity_fact(Velocity_fact>0) = [];
    Velocity_fact = -1*Velocity_fact; % In the op2 NASTRAN gives only the eigenvalues/eigenvector associated to negative velocity (sic!)



    if strcmp(char(bdf.flutters{FLUTTER_CARDS_ID}.method),'PK')

        tmpdensity = repmat(Density_fact(:),numel(Velocity_fact)*numel(Mach_fact),1);
        Density = reshape(tmpdensity,numel(Density_fact)*numel(Velocity_fact)*numel(Mach_fact),1);
        tmpvelocity = repmat(Velocity_fact(:),numel(Density_fact),numel(Mach_fact));
        Velocity = reshape(tmpvelocity',numel(Density_fact)*numel(Velocity_fact)*numel(Mach_fact),1);
        tmpmach = repmat(Mach_fact(:),1,numel(Density_fact)*numel(Velocity_fact));
        Mach = reshape(tmpmach',numel(Density_fact)*numel(Velocity_fact)*numel(Mach_fact),1);

    else
        strcmp(char(bdf.flutters{FLUTTER_CARDS_ID}.method),'PKNL');
        Density = Density_fact;
        Velocity = Velocity_fact;
        Mach = Mach_fact;
    end

end
Example 2 - OP2

This example demonstrates how to call the OP2 class and extract the eigenvectors.

..

    >>> eigs, eigvs = get_eigenvalues_eigenvectors("model_145.op2");

function [eigs,eigvs] = get_eigenvalues_eigenvectors(filenameop2)

    %% Function that reads and outputs the eigenfrequencies and the
    % eigenvectors from an op2 (PARAM,POST,-1)

    % import pyNastran op2/bdf classes
    import py.pyNastran.op2.op2.OP2 % import OP2 class

    % Instantiate an OP2 class
    op2_results = OP2();

    %% Read the op2
    op2_results.read_op2(filenameop2)

    % Save eigenvector structure of a particular SUBCASE
    subcase = 1;
    eigenvector_struct = op2_results.eigenvectors{subcase}; % In MATLAB curly braces are needed to access to dictionaries

    % Convert EIGENFREQUENCIES from list to MATLAB array
    eigrs = cell2mat(cell(eigenvector_struct.eigrs)); % NASTRAN eigenvalues real
    eigis = cell2mat(cell(eigenvector_struct.eigis)); % NASTRAN eigenvalues imag
    eigs = eigrs+eigis*1i; % tot = real + imag

    % Convert EIGENVECTOR ndarray into MATLAB array (GRID,DISPLACEMENT,MODE_NUM)
    eigvs = ndarray2mat(eigenvector_struct.data);
end

MSC/NX Nastran Differences

The following is a list of differences between MSC and NX Nastran.

  • OFFT field on the CBAR/CBEAM. The OFFT field (default=’GGG’ for MSC) must be blank. I’m pretty sure GGG is the only form NX supports.

  • In NX, the nodes that MPCs/RBEs must actually exist and have associated mass/stiffness.

  • In NX, massless nodes can mess results up, e.g., two springs attached at a massless grid.

How To: pyNastran

How To: BDF

How To: OP2

table_of_contents code_organization read_write

pyNastran Package

This is the pyNastran.rst file for v1.3.

pyNastran/bdf

This is the pyNastran.bdf.rst file.

errors Module

Inheritance diagram of pyNastran.bdf.errors
exception pyNastran.bdf.errors.CardParseSyntaxError[source]

Bases: SyntaxError

Class that is used for testing. Users should just treat this as a SyntaxError.

exception pyNastran.bdf.errors.CrossReferenceError[source]

Bases: RuntimeError

exception pyNastran.bdf.errors.DisabledCardError[source]

Bases: RuntimeError

lets bdf_test.py flag cards as auto-crashing and then skipping the deck (e.g., CGEN)

exception pyNastran.bdf.errors.DuplicateIDsError[source]

Bases: RuntimeError

exception pyNastran.bdf.errors.EnvironmentVariableError[source]

Bases: SyntaxError

exception pyNastran.bdf.errors.MissingDeckSections[source]

Bases: RuntimeError

exception pyNastran.bdf.errors.ReplicationError[source]

Bases: SyntaxError

exception pyNastran.bdf.errors.SuperelementFlagError[source]

Bases: SyntaxError

exception pyNastran.bdf.errors.UnsupportedCard[source]

Bases: NotImplementedError

Subpackages

bdf Module
Inheritance diagram of pyNastran.bdf.bdf
Main BDF class. Defines:
  • BDF

class pyNastran.bdf.bdf.BDF(debug: Optional[bool] = True, log: Optional[Any] = None, mode: str = 'msc')[source]

Bases: pyNastran.bdf.bdf.BDF_

NASTRAN BDF Reader/Writer/Editor class.

Initializes the BDF object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/warning/error messages False: logs info/warning/error messages None: logs warning/error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

modestr; default=’msc’

the type of Nastran valid_modes = {‘msc’, ‘nx’}

AEFact(aefact: int, msg: str = '') → AEFACT

gets an AEFACT

AELIST(aid: int, msg: str = '') → AELIST

gets an AELIST

gets an AELINK

AEList(aelist: int, msg: str = '') → AELIST

gets an AELIST

AEParam(aid: int, msg: str = '') → AEPARM

gets an AEPARM

AEStat(aid: int, msg: str = '') → AESTAT

gets an AESTAT

AESurf(aesurf_id: int, msg: str = '') → AESURF

gets an AESURF

Acsid(msg: str = '') → Coord

gets the aerodynamic coordinate system

Aero(msg: str = '') → AERO

gets the AERO

Aeros(msg: str = '') → AEROS

gets the AEROS

CAero(eid: int, msg: str = '') → Union[CAERO1, CAERO2, CAERO3, CAERO4, CAERO5]

gets an CAEROx

CMethod(sid: int, msg: str = '') → EIGC

gets a METHOD (EIGC)

Coord(cid: int, msg: str = '') → Coord

gets an COORDx

DAREA(darea_id: int, msg: str = '') → DAREA

gets a DAREA

DConstr(oid: int, msg: str = '') → List[Union[DCONSTR, DCONADD]]

gets a DCONSTR

DDVal(oid: int, msg: str = '') → DDVAL

gets a DDVAL

DELAY(delay_id: int, msg: str = '') → DELAY

gets a DELAY

DEQATN(equation_id: int, msg: str = '') → DEQATN

gets a DEQATN

DLoad(sid: int, consider_dload_combinations: bool = True, msg: str = '') → DLOAD

Gets a DLOAD, TLOAD1, TLOAD2, etc. associated with the Case Control DLOAD entry

DMIG(dname: str, msg: str = '') → DMIG

gets a DMIG

DPHASE(dphase_id: int, msg: str = '') → DPHASE

gets a DPHASE

DResp(dresp_id: int, msg: str = '') → Union[DRESP1, DRESP2, DRESP3]

gets a DRESPx

DVcrel(dv_id: int, msg: str = '') → Union[DVCREL1, DVCREL2]

gets a DVCREL1/DVCREL2

DVmrel(dv_id: int, msg: str = '') → Union[DVMREL1, DVMREL2]

gets a DVMREL1/DVMREL2

DVprel(dv_id: int, msg: str = '') → Union[DVPREL1, DVPREL2]

gets a DVPREL1/DVPREL2

Desvar(desvar_id: int, msg: int = '') → DESVAR

gets a DESVAR

Element(eid: int, msg: str = '') → Any

Gets an element

Doesn’t get rigid (RROD, RBAR, RBE2, RBE3, RBAR, RBAR1, RSPLINE, RSSCON) or mass (CMASS1, CONM2)

Elements(eids: List[int], msg: str = '') → List[Any]

Gets an series of elements

Doesn’t get rigid (RROD, RBAR, RBE2, RBE3, RBAR, RBAR1, RSPLINE, RSSCON) or mass (CMASS1, CONM2)

EmptyNode(nid: int, msg: str = '') → Optional[Union[GRID, SPOINT, EPOINT]]

Gets a GRID/SPOINT/EPOINT object, but allows for empty nodes (i.e., the CTETRA10 supports empty nodes, but the CTETRA4 does not).

Parameters
nidint / None

the node id 0, None : indicate blank

msgstr; default=’’

a debugging message

EmptyNodes(nids: list[int], msg: str = '') → List[Optional[Union[GRID, SPOINT, EPOINT]]]

Returns a series of node objects given a list of IDs

FLFACT(sid: int, msg: str = '') → FLFACT

gets an FLFACT

Flutter(fid: int, msg: str = '') → FLUTTER

gets a FLUTTER

Gust(sid: int, msg: str = '') → GUST

gets a GUST

HyperelasticMaterial(mid: int, msg: str = '') → Union[MATHE, MATHP]

gets a hyperelastic material

Load(sid: int, consider_load_combinations: bool = True, msg: str = '') → List[Union[LOAD, GRAV, ACCEL, ACCEL1, SLOAD, FORCE, FORCE1, FORCE2, MOMENT, MOMENT1, MOMENT2, PLOAD, PLOAD1, PLOAD2, PLOAD4]]

Gets an LOAD or FORCE/PLOAD4/etc.

Parameters
sidint

the LOAD id

consider_load_combinationsbool; default=True

LOADs should not be considered when referenced from an LOAD card from a case control, True should be used.

msgstr

additional message to print when failing

MPC(mpc_id: int, consider_mpcadd: bool = True, msg: str = '') → Union[MPC, MPCADD]

Gets an MPCADD or MPC

Parameters
mpc_idint

the MPC id

consider_mpcaddbool; default=True

MPCADDs should not be considered when referenced from an MPCADD from a case control, True should be used.

msgstr

additional message to print when failing

Mass(eid: int, msg: str = '') → Union[CMASS1, CMASS2, CMASS3, CMASS4, CONM1, CONM2]

gets a mass element (CMASS1, CONM2)

Material(mid: int, msg: str = '') → Union[MAT1, MAT2, MAT3, MAT4, MAT5, MAT8, MAT9, MAT10, MAT11, MAT3D, EQUIV, MATG]

gets a structural or thermal material

Materials(mids, msg='') → List[Union[MAT1, MAT2, MAT3, MAT8, MAT9, MAT10, MAT11, MAT3D, EQUIV, MATG]]

gets one or more Materials

Method(sid: int, msg: str = '') → Union[EIGR, EIGRL]

gets a METHOD (EIGR, EIGRL)

NLParm(nid: int, msg: str = '') → NLPARM

gets an NLPARM

NSM(nsm_id: int, consider_nsmadd: bool = True, msg: str = '') → Union[NSM, NSM1, NSML, NSML1, NSMADD]

Gets an LOAD or FORCE/PLOAD4/etc.

Parameters
nsm_idint

the LOAD id

consider_nsmaddbool; default=True

NSMADDs should not be considered when referenced from an NSM card from a case control, True should be used.

msgstr

additional message to print when failing

Node(nid: int, msg: str = '') → Union[GRID, SPOINT, EPOINT]

Gets a GRID/SPOINT/EPOINT object. This method does not allow for empty nodes (i.e., the CTETRA10 supports empty nodes, but the CTETRA4 does not).

Parameters
nidint

the node id

msgstr; default=’’

a debugging message

Nodes(nids: List[int], msg: str = '') → List[Union[GRID, SPOINT, EPOINT]]

Returns a series of node objects given a list of IDs

PAero(pid: int, msg: str = '') → Union[PAERO1, PAERO2, PAERO3, PAERO4, PAERO5]

gets a PAEROx

Phbdy(pid: int, msg: str = '') → PHBDY

gets a PHBDY

Point(nid: int, msg: str = '') → POINT

Returns a POINT card

Points(nids: List[int], msg: str = '') → List[POINT]

Returns a series of POINT objects given a list of IDs

Properties(pids: List[int], msg: str = '') → List[Any]

gets one or more elemental property (e.g. PSOLID, PLSOLID, PCOMP, PSHELL, PSHEAR); not mass property (PMASS)

Property(pid: int, msg: str = '') → Any

gets an elemental property (e.g. PSOLID, PLSOLID, PCOMP, PSHELL, PSHEAR); not mass property (PMASS)

PropertyMass(pid: int, msg: str = '') → PMASS

gets a mass property (PMASS)

RandomTable(tid: int, msg: str = '') → Union[TABRND1, TABRNDG]

gets a TABRND1 / TABRNDG

RigidElement(eid: int, msg: str = '') → Union[RBAR, RBE2, RBE3, RBAR, RBAR1, RROD, RSPLINE, RSSCON]

gets a rigid element (RBAR, RBE2, RBE3, RBAR, RBAR1, RROD, RSPLINE, RSSCON)

SET1(set_id: int, msg: str = '') → SET1

gets a SET1

SPC(spc_id: int, consider_spcadd: bool = True, msg: str = '') → Union[SPC, SPC1, SPCADD]

Gets an SPCADD or SPC

Parameters
spc_idint

the SPC id

consider_spcaddbool; default=True

SPCADDs should not be considered when referenced from an SPCADD from a case control, True should be used.

msgstr

additional message to print when failing

Set(sid: int, msg: str = '') → Union[SET1, SET3]

gets a SET, SET1, SET2, or SET3 card

Spline(eid: int, msg: str = '') → Union[SPLINE1, SPLINE2, SPLINE3, SPLINE4, SPLINE5]

gets a SPLINEx

StructuralMaterial(mid, msg='') → Union[MAT1, MAT2, MAT3, MAT8, MAT9, MAT10, MAT11, MAT3D, EQUIV, MATG]

gets a structural material

Table(tid, msg='') → Union[TABLES1, TABLEST, TABLEH1, TABLEHT]

gets a TABLES1, TABLEST, TABLEH1, TABLEHT

TableD(tid: int, msg: str = '') → Union[TABLED1, TABLED2, TABLED3, TABLED4]

gets a TABLEDx (TABLED1, TABLED2, TABLED3, TABLED4)

TableM(tid: int, msg: str = '') → Union[TABLEM1, TABLEM2, TABLEM3, TABLEM4]

gets a TABLEx (TABLEM1, TABLEM2, TABLEM3, TABLEM4)

ThermalMaterial(mid: int, msg: str = '') → Union[MAT4, MAT5]

gets a thermal material

add_accel(sid, N, direction, locs, vals, cid=0, comment='') → pyNastran.bdf.cards.loads.static_loads.ACCEL

Creates an ACCEL card

Parameters
sidint

load id

N(3, ) float ndarray

the acceleration vector in the cid frame

directionstr

Component direction of acceleration variation {X, Y, Z}

locsList[float]

Location along direction DIR in coordinate system CID for specification of a load scale factor.

valsList[float]

The load scale factor associated with location LOCi

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

add_accel1(sid, scale, N, nodes, cid=0, comment='') → pyNastran.bdf.cards.loads.static_loads.ACCEL1

Creates an ACCEL1 card

Parameters
sidint

load id

scalefloat

scale factor for load

N(3, ) float ndarray

the acceleration vector in the cid frame

directionstr

Component direction of acceleration variation {X, Y, Z}

nodesList[int]

the nodes to apply acceleration to

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

add_acmodl(infor, fset, sset, normal=0.5, olvpang=60.0, search_unit='REL', intol=0.2, area_op=0, ctype='STRONG', method='BW', sk_neps=0.5, dsk_neps=0.75, all_set='NO', inter='DIFF', nastran_version='nx', comment='') → pyNastran.bdf.cards.elements.acoustic.ACMODL
add_acsrce(sid, excite_id, rho, b, delay=0, dphase=0, power=0, comment='') → pyNastran.bdf.cards.loads.dloads.ACSRCE

Creates an ACSRCE card

Parameters
sidint

load set id number (referenced by DLOAD)

excite_idint

Identification number of a DAREA or SLOAD entry that lists each degree of freedom to apply the excitation and the corresponding scale factor, A, for the excitation

rhofloat

Density of the fluid

bfloat

Bulk modulus of the fluid

delayint; default=0

Time delay, τ.

dphaseint / float; default=0

the dphase; if it’s 0/blank there is no phase lag float : delay in units of time int : delay id

powerint; default=0

Power as a function of frequency, P(f). float : value of P(f) used over all frequencies for all

degrees of freedom in EXCITEID entry.

intTABLEDi entry that defines P(f) for all degrees of

freedom in EXCITEID entry.

commentstr; default=’’

a comment for the card

add_aecomp(name: str, list_type: List[str], lists: Union[int, List[int]], comment: str = '') → pyNastran.bdf.cards.aero.aero.AECOMP

Creates an AECOMP card

Parameters
namestr

the name of the component

list_typestr

One of CAERO, AELIST or CMPID for aerodynamic components and SET1 for structural components. Aerodynamic components are defined on the aerodynamic ks-set mesh while the structural components are defined on the g-set mesh.

listsList[int, int, …]; int

The identification number of either SET1, AELIST or CAEROi entries that define the set of grid points that comprise the component

commentstr; default=’’

a comment for the card

add_aecompl(name: str, labels: List[str], comment: str = '') → pyNastran.bdf.cards.aero.aero.AECOMPL

Creates an AECOMPL card

Parameters
namestr

the name of the component

labelsList[str, str, …]; str

A string of 8 characters referring to the names of other components defined by either AECOMP or other AECOMPL entries.

commentstr; default=’’

a comment for the card

add_aefact(sid, fractions, comment='') → pyNastran.bdf.cards.aero.aero.AEFACT

Creates an AEFACT card, which is used by the CAEROx / PAEROx card to adjust the spacing of the sub-paneleing (and grid point paneling in the case of the CAERO3).

Parameters
sidint

unique id

fractionsList[float, …, float]

list of percentages

commentstr; default=’’

a comment for the card

Creates an AELINK card, which defines an equation linking AESTAT and AESURF cards

Parameters
aelink_idint

unique id

labelstr

name of the dependent AESURF card

independent_labelsList[str, …, str]

name for the independent variables (AESTATs)

linking_coefficentsList[float]

linking coefficients

commentstr; default=’’

a comment for the card

add_aelist(sid, elements, comment='') → pyNastran.bdf.cards.aero.aero.AELIST

Creates an AELIST card, which defines the aero boxes for an AESURF/SPLINEx.

Parameters
sidint

unique id

elementsList[int, …, int]

list of box ids

commentstr; default=’’

a comment for the card

add_aeparm(aeparm_id, label, units, comment='') → pyNastran.bdf.cards.aero.aero.AEPARM

Creates an AEPARM card, which defines a new trim variable.

Parameters
aeparm_idint

the unique id

labelstr

the variable name

unitsstr

unused by Nastran

commentstr; default=’’

a comment for the card

add_aero(velocity: float, cref: float, rho_ref: float, acsid: int = 0, sym_xz: int = 0, sym_xy: int = 0, comment: str = '') → pyNastran.bdf.cards.aero.dynamic_loads.AERO

Creates an AERO card

Parameters
velocityfloat

the airspeed

creffloat

the aerodynamic chord

rho_reffloat

FLFACT density scaling factor

acsidint; default=0

aerodyanmic coordinate system

sym_xzint; default=0

xz symmetry flag (+1=symmetry; -1=antisymmetric)

sym_xyint; default=0

xy symmetry flag (+1=symmetry; -1=antisymmetric)

commentstr; default=’’

a comment for the card

add_aeros(cref, bref, sref, acsid=0, rcsid=0, sym_xz=0, sym_xy=0, comment='') → pyNastran.bdf.cards.aero.static_loads.AEROS

Creates an AEROS card

Parameters
creffloat

the aerodynamic chord

breffloat

the wing span

sreffloat

the wing area

acsidint; default=0

aerodyanmic coordinate system

rcsidint; default=0

coordinate system for rigid body motions

sym_xzint; default=0

xz symmetry flag (+1=symmetry; -1=antisymmetric)

sym_xyint; default=0

xy symmetry flag (+1=symmetry; -1=antisymmetric)

commentstr; default=’’

a comment for the card

add_aestat(aestat_id: int, label: str, comment: str = '') → pyNastran.bdf.cards.aero.static_loads.AESTAT

Creates an AESTAT card, which is a variable to be used in a TRIM analysis

Parameters
aestat_idint

unique id

labelstr

name for the id

commentstr; default=’’

a comment for the card

add_aesurf(aesid, label, cid1, alid1, cid2=None, alid2=None, eff=1.0, ldw='LDW', crefc=1.0, crefs=1.0, pllim=-1.5707963267948966, pulim=1.5707963267948966, hmllim=None, hmulim=None, tqllim=None, tqulim=None, comment='') → pyNastran.bdf.cards.aero.aero.AESURF

Creates an AESURF card, which defines a control surface

Parameters
aesidint

controller number

labelstr

controller name

cid1 / cid2int / None

coordinate system id for primary/secondary control surface

alid1 / alid2int / None

AELIST id for primary/secondary control surface

efffloat; default=1.0

Control surface effectiveness

ldwstr; default=’LDW’

Linear downwash flag; [‘LDW’, ‘NODLW’]

crefcfloat; default=1.0

reference chord for the control surface

crefsfloat; default=1.0

reference area for the control surface

pllim / pulimfloat; default=-pi/2 / pi/2

Lower/Upper deflection limits for the control surface in radians

hmllim / hmulimfloat; default=None

Lower/Upper hinge moment limits for the control surface in force-length units

tqllim / tqulimint; default=None

Set identification numbers of TABLEDi entries that provide the lower/upper deflection limits for the control surface as a function of the dynamic pressure

commentstr; default=’’

a comment for the card

add_aesurfs(aesid, label, list1, list2, comment='') → pyNastran.bdf.cards.aero.aero.AESURFS

Creates an AESURFS card

Parameters
aesidint

the unique id

labelstr

the AESURF name

list1 / list2int / None

the list (SET1) of node ids for the primary/secondary control surface(s) on the AESURF card

commentstr; default=’’

a comment for the card

add_aset(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.ASET, pyNastran.bdf.cards.bdf_sets.ASET1]

Creates an ASET/ASET1 card, which defines the degree of freedoms that will be retained during an ASET modal reduction.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]; str

the degree of freedoms to be retained (e.g., ‘1’, ‘123’) if a list is passed in, a ASET is made if a str is passed in, a ASET1 is made

commentstr; default=’’

a comment for the card

Notes

the length of components and ids must be the same

add_aset1(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.ASET, pyNastran.bdf.cards.bdf_sets.ASET1]
add_axic(nharmonics, comment='') → pyNastran.bdf.cards.axisymmetric.axisymmetric.AXIC

Creates a AXIC card

add_baror(pid, is_g0, g0, x, offt='GGG', comment: str = '') → pyNastran.bdf.cards.elements.bars.BAROR
add_bconp(contact_id, slave, master, sfac, fric_id, ptype, cid, comment='') → pyNastran.bdf.cards.contact.BCONP

Creates a BCONP card

add_bcrpara(crid, surf='TOP', offset=None, Type='FLEX', grid_point=0, comment='') → pyNastran.bdf.cards.contact.BCRPARA

Creates a BCRPARA card

Parameters
cridint

CRID Contact region ID.

offsetfloat; default=None

Offset distance for the contact region (Real > 0.0). None : OFFSET value in BCTPARA entry

surfstr; default=’TOP’

SURF Indicates the contact side. See Remark 1. {‘TOP’, ‘BOT’; )

Typestr; default=’FLEX’

Indicates whether a contact region is a rigid surface if it is used as a target region. {‘RIGID’, ‘FLEX’}. This is not supported for SOL 101.

grid_pointint; default=0

Control grid point for a target contact region with TYPE=RIGID or when the rigid-target algorithm is used. The grid point may be used to control the motion of a rigid surface. (Integer > 0). This is not supported for SOL 101.

commentstr; default=’’

a comment for the card

add_bctadd(csid, contact_sets, comment='') → pyNastran.bdf.cards.contact.BCTADD

Creates a BCTADD card

add_bctpara(csid, params, comment='') → pyNastran.bdf.cards.contact.BCTPARA

Creates a BCTPARA card

add_bctset(csid, sids, tids, frictions, min_distances, max_distances, comment='', sol=101) → pyNastran.bdf.cards.contact.BCTSET

Creates a BCTSET card

add_bfric(friction_id, mu1, fstiff=None, comment='')
add_blseg(line_id, nodes, comment='') → pyNastran.bdf.cards.contact.BLSEG

Creates a BLSEG card

add_bset(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.BSET, pyNastran.bdf.cards.bdf_sets.BSET1]

Creates an BSET/BSET1 card, which defines the degree of freedoms that will be fixed during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]; str

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’) if a list is passed in, a ASET is made if a str is passed in, a ASET1 is made

commentstr; default=’’

a comment for the card

Notes

the length of components and ids must be the same

add_bset1(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.BSET, pyNastran.bdf.cards.bdf_sets.BSET1]
add_bsurf(sid, eids, comment='') → pyNastran.bdf.cards.contact.BSURF

Creates a BSURF card

add_bsurfs(id, eids, g1s, g2s, g3s, comment='') → pyNastran.bdf.cards.contact.BSURFS

Creates a BSURFS card

add_caabsf(eid, pid, nodes, comment='') → pyNastran.bdf.cards.elements.acoustic.CHACAB
add_caero1(eid: int, pid: int, igroup: int, p1: Any, x12: float, p4: Any, x43: float, cp: int = 0, nspan: int = 0, lspan: int = 0, nchord: int = 0, lchord: int = 0, comment: str = '') → pyNastran.bdf.cards.aero.aero.CAERO1

Defines a CAERO1 card, which defines a simplified lifting surface (e.g., wing/tail).

Parameters
eidint

element id

pidint

int : PAERO1 ID

igroupint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2; (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3; (typically x, tip chord)

cpint; default=0

int : coordinate system

nspanint; default=0

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

nchordint; default=0

int > 0 : N chordwise boxes distributed evenly int = 0 : use lchord

lspanint, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan AEFACT : AEFACT object (xref)

lchordint, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nchord int = 0 : use nchord AEFACT : AEFACT object (xref)

commentstr; default=’’

a comment for the card

add_caero2(eid: int, pid: int, igroup: int, p1: List[float], x12: float, cp: int = 0, nsb: int = 0, nint: int = 0, lsb: int = 0, lint: int = 0, comment: str = '') → pyNastran.bdf.cards.aero.aero.CAERO2

Defines a CAERO2 card, which defines a slender body (e.g., fuselage/wingtip tank).

Parameters
eidint

element id

pidint, PAERO2

int : PAERO2 ID

igroupint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (forward position)

x12float

length of the CAERO2

cpint; default=0

int : coordinate system

nsbint; default=0

Number of slender body elements

lsbint; default=0

AEFACT id for defining the location of the slender body elements

nintint; default=0

Number of interference elements

lintint; default=0

AEFACT id for defining the location of interference elements

commentstr; default=’’

a comment for the card

add_caero3(eid, pid, list_w, p1, x12, p4, x43, cp=0, list_c1=None, list_c2=None, comment='') → pyNastran.bdf.cards.aero.aero.CAERO3

Creates a CAERO3 card

add_caero4(eid, pid, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, comment='') → pyNastran.bdf.cards.aero.aero.CAERO4

Defines a CAERO4 card, which defines a strip theory surface.

Parameters
eidint

element id

pidint

int : PAERO4 ID

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2 (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3 (typically x, tip chord)

cpint; default=0

int : coordinate system

nspanint; default=0

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

lspanint; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan

commentstr; default=’’

a comment for the card

add_caero5(eid: int, pid: int, p1: List[float], x12: float, p4: List[float], x43: float, cp: int = 0, nspan: int = 0, lspan: int = 0, ntheory: int = 0, nthick: int = 0, comment: str = '') → pyNastran.bdf.cards.aero.aero.CAERO5

Creates a CAERO5 card

add_card(card_lines: List[str], card_name: str, comment: str = '', ifile=None, is_list: bool = True, has_none: bool = True) → Any

Adds a card object to the BDF object.

Parameters
card_lines: list[str]

the list of the card fields

card_namestr

the card_name -> ‘GRID’

commentstr

an optional the comment for the card

is_listbool, optional

False : input is a list of card fields -> [‘GRID’, 1, None, 3.0, 4.0, 5.0] True : input is list of card_lines -> [‘GRID, 1,, 3.0, 4.0, 5.0’]

has_nonebool; default=True

can there be trailing Nones in the card data (e.g. [‘GRID’, 1, 2, 3.0, 4.0, 5.0, None]) can there be trailing Nones in the card data (e.g. [‘GRID, 1, 2, 3.0, 4.0, 5.0, ‘])

Returns
card_objectBDFCard()

the card object representation of card

Note

this is a very useful method for interfacing with the code ..

Note

the card_object is not a card-type object…so not a GRID card or CQUAD4 object. It’s a BDFCard Object. However, you know the type (assuming a GRID), so just call the mesh.Node(nid) to get the Node object that was just created.

add_card_fields(card_lines, card_name, comment='', has_none=True)

Adds a card object to the BDF object.

Parameters
card_lines: list[str]

the list of the card fields input is a list of card fields -> [‘GRID’, 1, 2, 3.0, 4.0, 5.0]

card_namestr

the card_name -> ‘GRID’

commentstr

an optional the comment for the card

has_nonebool; default=True

can there be trailing Nones in the card data (e.g. [‘GRID’, 1, 2, 3.0, 4.0, 5.0, None])

Returns
card_objectBDFCard()

the card object representation of card

add_card_ifile(ifile: int, card_lines: List[str], card_name: str, comment: str = '', is_list: bool = True, has_none: bool = True) → Any

Same as add_card except it has an ifile parameter

add_card_lines(card_lines, card_name, comment='', has_none=True)

Adds a card object to the BDF object.

Parameters
card_lines: list[str]

the list of the card fields input is list of card_lines -> [‘GRID, 1, 2, 3.0, 4.0, 5.0’]

card_namestr

the card_name -> ‘GRID’

commentstr; default=’’

an optional the comment for the card

has_nonebool; default=True

can there be trailing Nones in the card data (e.g. [‘GRID, 1, 2, 3.0, 4.0, 5.0, ‘])

add_cbar(eid: int, pid: int, nids: List[int], x: Optional[List[float]], g0: Optional[int], offt: str = 'GGG', pa: int = 0, pb: int = 0, wa: Optional[List[float]] = None, wb: Optional[List[float]] = None, comment: str = '') → pyNastran.bdf.cards.elements.bars.CBAR

Adds a CBAR card

Parameters
pidint

property id

midint

material id

nidsList[int, int]

node ids; connected grid points at ends A and B

xList[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offtstr; default=’GGG’

Offset vector interpretation flag

pa / pbint; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wbList[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

commentstr; default=’’

a comment for the card

add_cbarao(eid: int, scale: str, x: List[float], comment: str = '') → pyNastran.bdf.cards.elements.bars.CBARAO

Creates a CBARAO card, which defines additional output locations for the CBAR card.

It also changes the OP2 element type from a CBAR-34 to a CBAR-100. However, it is ignored if there are no PLOAD1s in the model. Furthermore, the type is changed for the whole deck, regardless of whether there are PLOAD1s in the other load cases.

Parameters
eidint

element id

scalestr

defines what x means LE : x is in absolute coordinates along the bar FR : x is in fractional

xList[float]

the additional output locations len(x) <= 6

commentstr; default=’’

a comment for the card

Notes

MSC only

add_cbeam(eid, pid, nids, x, g0, offt='GGG', bit=None, pa=0, pb=0, wa=None, wb=None, sa=0, sb=0, comment='') → pyNastran.bdf.cards.elements.beam.CBEAM

Adds a CBEAM card

Parameters
pidint

property id

midint

material id

nidsList[int, int]

node ids; connected grid points at ends A and B

xList[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offtstr; default=’GGG’

Offset vector interpretation flag None : bit is active

bitfloat; default=None

Built-in twist of the cross-sectional axes about the beam axis at end B relative to end A. For beam p-elements ONLY! None : offt is active

pa / pbint; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wbList[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

sa / sbint; default=0

Scalar or grid point identification numbers for the ends A and B, respectively. The degrees-of-freedom at these points are the warping variables . SA and SB cannot be specified for beam p-elements

commentstr; default=’’

a comment for the card

Notes

offt/bit are MSC specific fields

add_cbeam3(eid, pid, nids, x, g0, wa, wb, wc, tw, s, comment='') → pyNastran.bdf.cards.elements.bars.CBEAM3

Creates a CBEAM3 card

add_cbend(eid, pid, nids, g0, x, geom, comment='') → pyNastran.bdf.cards.elements.bars.CBEND

Creates a CBEND card

add_cbush(eid: int, pid: int, nids, x: Optional[List[float]], g0: Optional[int], cid=None, s: float = 0.5, ocid: int = -1, si: Optional[List[float]] = None, comment='') → pyNastran.bdf.cards.elements.bush.CBUSH

Creates a CBUSH card

Parameters
eidint

Element id

pidint

Property id (PBUSH)

nidsList[int, int]

node ids; connected grid points at ends A and B The nodes may be coincident, but then cid is required.

xList[float, float, float]; None
Listthe directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use g0

g0int/None
intthe directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use x

cidint; default=None

Element coordinate system identification. A 0 means the basic coordinate system. If CID is blank, then the element coordinate system is determined from GO or Xi.

s: float; default=0.5

Location of spring damper (0 <= s <= 1.0)

ocidint; default=-1

Coordinate system identification of spring-damper offset. (Integer > -1; Default = -1, which means the offset point lies on the line between GA and GB)

siList[float, float, float]; default=None

Components of spring-damper offset in the OCID coordinate system if OCID > 0. None : [None, None, None]

commentstr; default=’’

a comment for the card

add_cbush1d(eid: int, pid: int, nids: List[int], cid: Optional[int] = None, comment: str = '') → pyNastran.bdf.cards.elements.bush.CBUSH1D

Creates a CBUSH1D card

add_cbush2d(eid: int, pid: int, nids: List[int], cid: int = 0, plane: str = 'XY', sptid: Optional[int] = None, comment: str = '') → pyNastran.bdf.cards.elements.bush.CBUSH2D

Creates a CBUSH2D card

add_cconeax(eid, pid, rings, comment='') → pyNastran.bdf.cards.axisymmetric.axisymmetric.CCONEAX

Creates a CCONEAX card

add_cdamp1(eid: int, pid: int, nids: List[int], c1: int = 0, c2: int = 0, comment: str = '') → pyNastran.bdf.cards.elements.damper.CDAMP1

Creates a CDAMP1 card

Parameters
eidint

element id

pidint

property id (PDAMP)

nidsList[int, int]

node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

add_cdamp2(eid: int, b: float, nids: List[int], c1: int = 0, c2: int = 0, comment: str = '') → pyNastran.bdf.cards.elements.damper.CDAMP2

Creates a CDAMP2 card

Parameters
eidint

element id

bfloat

damping

nidsList[int, int]

SPOINT ids node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

add_cdamp3(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.damper.CDAMP3

Creates a CDAMP3 card

Parameters
eidint

element id

pidint

property id (PDAMP)

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_cdamp4(eid: int, b: float, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.damper.CDAMP4

Creates a CDAMP4 card

Parameters
eidint

element id

bfloat

damping

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_cdamp5(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.damper.CDAMP5

Creates a CDAMP5 card

Parameters
eidint

element id

pidint

property id (PDAMP5)

nidsList[int, int]

GRID/SPOINT ids

commentstr; default=’’

a comment for the card

add_celas1(eid: int, pid: int, nids: List[int], c1: int = 0, c2: int = 0, comment: str = '') → pyNastran.bdf.cards.elements.springs.CELAS1

Creates a CELAS1 card

Parameters
eidint

element id

pidint

property id (PELAS)

nidsList[int, int]

node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

add_celas2(eid: int, k: float, nids: List[int], c1: int = 0, c2: int = 0, ge: float = 0.0, s: float = 0.0, comment: str = '') → pyNastran.bdf.cards.elements.springs.CELAS2

Creates a CELAS2 card

Parameters
eidint

element id

kfloat

spring stiffness

nidsList[int, int]

SPOINT ids node ids

c1 / c2int; default=0

DOF for nid1 / nid2

geint; default=0.0

damping coefficient

sfloat; default=0.0

stress coefficient

commentstr; default=’’

a comment for the card

add_celas3(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.springs.CELAS3

Creates a CELAS3 card

Parameters
eidint

element id

pidint

property id (PELAS)

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_celas4(eid: int, k: float, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.springs.CELAS4

Creates a CELAS4 card

Parameters
eidint

element id

kfloat

spring stiffness

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_cfast(eid: int, pid: int, Type: str, ida: int, idb: int, gs=None, ga=None, gb=None, xs=None, ys=None, zs=None, comment: str = '') → pyNastran.bdf.cards.elements.elements.CFAST

Creates a CFAST card

add_cfluid2(eid, ringfls, rho, b, harmonic) → None
add_cfluid3(eid, ringfls, rho, b, harmonic) → None
add_cfluid4(eid, ringfls, rho, b, harmonic) → None
add_cgap(eid: int, pid: int, nids: List[int], x: Optional[List[int]], g0: Optional[int], cid: Optional[int] = None, comment: str = '') → pyNastran.bdf.cards.elements.elements.CGAP

Creates a CGAP card

Parameters
eidint

Element ID

pidint

Property ID (PGAP)

nidsList[int, int]

node ids; connected grid points at ends A and B

xList[float, float, float]

Components of the orientation vector, from GA, in the displacement coordinate system at GA

g0int

GO Alternate method to supply the orientation vector using grid point GO. Direction of is from GA to GO

cidint; default=None

Element coordinate system identification number. CID must be specified if GA and GB are coincident (distance from GA to GB < 10^-4)

commentstr; default=’’

a comment for the card

add_cgen(Type, field_eid, pid, field_id, th_geom_opt, eidl, eidh, t_abcd=None, direction='L', comment='') → pyNastran.bdf.cards.msgmesh.CGEN

Creates a CGEN card

add_chacab(eid, pid, nodes, comment='') → pyNastran.bdf.cards.elements.acoustic.CHACAB
add_chacbr(eid, pid, nodes, comment='') → pyNastran.bdf.cards.elements.acoustic.CHACBR
add_chbdye(eid, eid2, side, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, comment='') → pyNastran.bdf.cards.thermal.thermal.CHBDYE

Creates a CHBDYE card

Parameters
eidint

surface element ID number for a side of an element

eid2: int

a heat conduction element identification

side: int

a consistent element side identification number (1-6)

iview_front: int; default=0

a VIEW entry identification number for the front face

iview_back: int; default=0

a VIEW entry identification number for the back face

rad_mid_front: int; default=0

RADM identification number for front face of surface element

rad_mid_back: int; default=0

RADM identification number for back face of surface element

commentstr; default=’’

a comment for the card

add_chbdyg(eid, surface_type, nodes, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, comment='') → pyNastran.bdf.cards.thermal.thermal.CHBDYG

Creates a CHBDYG card

add_chbdyp(eid, pid, surface_type, g1, g2, g0=0, gmid=None, ce=0, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, e1=None, e2=None, e3=None, comment='') → pyNastran.bdf.cards.thermal.thermal.CHBDYP

Creates a CHBDYP card

Parameters
eidint

Surface element ID

pidint

PHBDY property entry identification numbers. (Integer > 0)

surface_typestr

Surface type Must be {POINT, LINE, ELCYL, FTUBE, TUBE}

iview_frontint; default=0

A VIEW entry identification number for the front face.

iview_backint; default=0

A VIEW entry identification number for the back face.

g1 / g2int

Grid point identification numbers of grids bounding the surface

g0int; default=0

Orientation grid point

rad_mid_frontint

RADM identification number for front face of surface element

rad_mid_backint

RADM identification number for back face of surface element.

gmidint

Grid point identification number of a midside node if it is used with the line type surface element.

ceint; default=0

Coordinate system for defining orientation vector

e1 / e2 / e3float; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1.

commentstr; default=’’

a comment for the card

add_chexa(eid, pid, nids, comment='') → Union[pyNastran.bdf.cards.elements.solid.CHEXA8, pyNastran.bdf.cards.elements.solid.CHEXA20]

Creates a CHEXA8/CHEXA20

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=8 or 20

commentstr; default=’’

a comment for the card

add_cihex1(eid, pid, nids, comment='') → pyNastran.bdf.cards.elements.solid.CIHEX1

see CHEXA

add_cihex2(eid, pid, nids, comment='') → pyNastran.bdf.cards.elements.solid.CIHEX2

see CHEXA

add_cload(sid, scale, scale_factors, load_ids, comment='') → pyNastran.bdf.cards.loads.static_loads.CLOAD

Creates a CLOAD card

Parameters
sidint

load id

scalefloat

overall scale factor

scale_factorsList[float]

individual scale factors (corresponds to load_ids)

load_idsList[int]

individual load_ids (corresponds to scale_factors)

commentstr; default=’’

a comment for the card

add_cmass1(eid: int, pid: int, nids: List[int], c1: int = 0, c2: int = 0, comment: str = '') → pyNastran.bdf.cards.elements.mass.CMASS1

Creates a CMASS1 card

Parameters
eidint

element id

pidint

property id (PMASS)

nidsList[int, int]

node ids

c1 / c2int; default=None

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

add_cmass2(eid: int, mass: float, nids: List[int], c1: int, c2: int, comment: str = '') → pyNastran.bdf.cards.elements.mass.CMASS2

Creates a CMASS2 card

Parameters
eidint

element id

massfloat

mass

nidsList[int, int]

node ids

c1 / c2int; default=None

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

add_cmass3(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.mass.CMASS3

Creates a CMASS3 card

Parameters
eidint

element id

pidint

property id (PMASS)

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_cmass4(eid: int, mass: float, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.mass.CMASS4

Creates a CMASS4 card

Parameters
eidint

element id

massfloat

SPOINT mass

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_cmfree(eid, s, s2, y, n) → None
add_conm1(eid: int, nid: int, mass_matrix: Any, cid=0, comment='') → pyNastran.bdf.cards.elements.mass.CONM1

Creates a CONM1 card

Parameters
eidint

element id

nidint

the node to put the mass matrix

mass_matrix(6, 6) float ndarray

the 6x6 mass matrix, M

cidint; default=0

the coordinate system for the mass matrix

commentstr; default=’’

a comment for the card

::
[M] = [M11 M21 M31 M41 M51 M61]

[ M22 M32 M42 M52 M62] [ M33 M43 M53 M63] [ M44 M54 M64] [ Sym M55 M65] [ M66]

add_conm2(eid: int, nid: int, mass: float, cid: int = 0, X: Optional[List[float]] = None, I: Optional[List[float]] = None, comment: str = '') → pyNastran.bdf.cards.elements.mass.CONM2

Creates a CONM2 card

Parameters
eidint

element id

nidint

node id

massfloat

the mass of the CONM2

cidint; default=0

coordinate frame of the offset (-1=absolute coordinates)

X(3, ) List[float]; default=None -> [0., 0., 0.]

xyz offset vector relative to nid

I(6, ) List[float]; default=None -> [0., 0., 0., 0., 0., 0.]

mass moment of inertia matrix about the CG I11, I21, I22, I31, I32, I33 = I

commentstr; default=’’

a comment for the card

add_conrod(eid: int, mid: int, nids: List[int], A: float = 0.0, j: float = 0.0, c: float = 0.0, nsm: float = 0.0, comment: str = '') → pyNastran.bdf.cards.elements.rods.CONROD

Creates a CONROD card

Parameters
eidint

element id

midint

material id

nidsList[int, int]

node ids

Afloat; default=0.

area

jfloat; default=0.

polar moment of inertia

cfloat; default=0.

stress factor

nsmfloat; default=0.

non-structural mass per unit length

commentstr; default=’’

a comment for the card

add_conv(eid, pconid, ta, film_node=0, cntrlnd=0, comment='') → pyNastran.bdf.cards.thermal.thermal.CONV

Creates a CONV card

Parameters
eidint

element id

pconidint

Convection property ID

midint

Material ID

taList[int]

Ambient points used for convection 0’s are allowed for TA2 and higher

film_nodeint; default=0

Point for film convection fluid property temperature

cntrlndint; default=0

Control point for free convection boundary condition

commentstr; default=’’

a comment for the card

add_convm(eid, pconvm, ta1, film_node=0, cntmdot=0, ta2=None, mdot=1.0, comment='') → pyNastran.bdf.cards.thermal.thermal.CONVM

Creates a CONVM card

Parameters
eidint

element id (CHBDYP)

pconidint

property ID (PCONVM)

midint

Material ID

ta1int

ambient point for convection

ta2int; default=None

None : ta1 ambient point for convection

film_nodeint; default=0
cntmdotint; default=0

control point used for controlling mass flow 0/blank is only allowed when mdot > 0

mdotfloat; default=1.0

a multiplier for the mass flow rate in case there is no point associated with the CNTRLND field required if cntmdot = 0

commentstr; default=’’

a comment for the card

add_cord1c(cid: int, g1: int, g2: int, g3: int, comment: str = '') → pyNastran.bdf.cards.coordinate_systems.CORD1C

Creates the CORD1C card, which defines a cylindrical coordinate system using 3 GRID points.

Parameters
cidint

the coordinate id

g1int

grid point 1

g2int

grid point 2

g3int

grid point 3

commentstr; default=’’

a comment for the card

add_cord1r(cid: int, g1: int, g2: int, g3: int, comment: str = '') → pyNastran.bdf.cards.coordinate_systems.CORD1R

Creates the CORD1R card, which defines a rectangular coordinate system using 3 GRID points.

Parameters
cidint

the coordinate id

g1int

grid point 1

g2int

grid point 2

g3int

grid point 3

commentstr; default=’’

a comment for the card

add_cord1s(cid: int, g1: int, g2: int, g3: int, comment: str = '') → pyNastran.bdf.cards.coordinate_systems.CORD1S

Creates the CORD1S card, which defines a spherical coordinate system using 3 GRID points.

Parameters
cidint

the coordinate id

g1int

grid point 1

g2int

grid point 2

g3int

grid point 3

commentstr; default=’’

a comment for the card

add_cord2c(cid: int, origin: Union[List[float], Any, None], zaxis: Union[List[float], Any, None], xzplane: Union[List[float], Any, None], rid: int = 0, setup: bool = True, comment: str = '') → pyNastran.bdf.cards.coordinate_systems.CORD2C

Creates the CORD2C card, which defines a cylindrical coordinate system using 3 vectors.

Parameters
cidint

coordinate system id

ridint; default=0

the referenced coordinate system that defines the system the vectors

originList[float, float, float]

the origin of the coordinate system

zaxisList[float, float, float]

the z-axis of the coordinate system

xzplaneList[float, float, float]

a point on the xz plane

commentstr; default=’’

a comment for the card

add_cord2r(cid: int, origin: Union[List[float], Any, None], zaxis: Union[List[float], Any, None], xzplane: Union[List[float], Any, None], rid: int = 0, setup: bool = True, comment: str = '') → pyNastran.bdf.cards.coordinate_systems.CORD2R

Creates the CORD2R card, which defines a rectangular coordinate system using 3 vectors.

Parameters
cidint

coordinate system id

ridint; default=0

the referenced coordinate system that defines the system the vectors

originList[float, float, float]

the origin of the coordinate system

zaxisList[float, float, float]

the z-axis of the coordinate system

xzplaneList[float, float, float]

a point on the xz plane

commentstr; default=’’

a comment for the card

add_cord2s(cid: int, origin: Union[List[float], Any, None], zaxis: Union[List[float], Any, None], xzplane: Union[List[float], Any, None], rid: int = 0, setup: bool = True, comment: str = '') → pyNastran.bdf.cards.coordinate_systems.CORD2S

Creates the CORD2C card, which defines a spherical coordinate system using 3 vectors.

Parameters
cidint

coordinate system id

originList[float, float, float]

the origin of the coordinate system

zaxisList[float, float, float]

the z-axis of the coordinate system

xzplaneList[float, float, float]

a point on the xz plane

ridint; default=0

the referenced coordinate system that defines the system the vectors

commentstr; default=’’

a comment for the card

add_cpenta(eid, pid, nids, comment='') → Union[pyNastran.bdf.cards.elements.solid.CPENTA6, pyNastran.bdf.cards.elements.solid.CPENTA15]

Creates a CPENTA6/CPENTA15

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=6 or 15

commentstr; default=’’

a comment for the card

add_cplstn3(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTN3

Creates a CPLSTN4 card

add_cplstn4(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTN4

Creates a CPLSTN4 card

add_cplstn6(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTN6

Creates a CPLSTN6 card

add_cplstn8(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTN8

Creates a CPLSTN8 card

add_cplsts3(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTS3

Creates a CPLSTS3 card

add_cplsts4(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTS4

Creates a CPLSTS4 card

add_cplsts6(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTS6

Creates a CPLSTS6 card

add_cplsts8(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CPLSTS8

Creates a CPLSTS8 card

add_cpyram(eid, pid, nids, comment='') → Union[pyNastran.bdf.cards.elements.solid.CPYRAM5, pyNastran.bdf.cards.elements.solid.CPYRAM13]

Creates a CPYRAM5/CPYRAM13

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=5 or 13

commentstr; default=’’

a comment for the card

add_cquad(eid, pid, nids, theta_mcid=0.0, comment='') → pyNastran.bdf.cards.elements.shell.CQUAD

Creates a CQUAD card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int, int/None, int/None,

int/None, int/None, int/None]

node ids

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

commentstr; default=’’

a comment for the card

add_cquad4(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='') → pyNastran.bdf.cards.elements.shell.CQUAD4

Creates a CQUAD4 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

add_cquad8(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='') → pyNastran.bdf.cards.elements.shell.CQUAD8

Creates a CQUAD8 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int, int/None, int/None, int/None, int/None]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

add_cquadr(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='') → pyNastran.bdf.cards.elements.shell.CQUADR

Creates a CQUADR card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

add_cquadx(eid, pid, nids, theta_mcid=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CQUADX

Creates a CQUADX card

add_cquadx4(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CQUADX4

Creates a CQUADX4 card

add_cquadx8(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CQUADX8

Creates a CQUADX8 card

add_crac2d(eid, pid, nids, comment='') → pyNastran.bdf.cards.elements.elements.CRAC2D

Creates a PRAC2D card

add_crac3d(eid, pid, nids, comment='') → pyNastran.bdf.cards.elements.elements.CRAC3D

Creates a CRAC3D card

add_creep(mid, T0, exp, form, tidkp, tidcp, tidcs, thresh, Type, a, b, c, d, e, f, g, comment='') → pyNastran.bdf.cards.materials.CREEP

Creates a CREEP card

add_crod(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.rods.CROD

Creates a CROD card

Parameters
eidint

element id

pidint

property id (PROD)

nidsList[int, int]

node ids

commentstr; default=’’

a comment for the card

add_cset(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.CSET, pyNastran.bdf.cards.bdf_sets.CSET1]

Creates an CSET/CSET1 card, which defines the degree of freedoms that will be free during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]; str

the degree of freedoms to be free (e.g., ‘1’, ‘123’) if a list is passed in, a CSET is made if a str is passed in, a CSET1 is made

commentstr; default=’’

a comment for the card

Notes

the length of components and ids must be the same

add_cset1(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.CSET, pyNastran.bdf.cards.bdf_sets.CSET1]

See also

add_cset

add_cshear(eid, pid, nids, comment='') → pyNastran.bdf.cards.elements.shell.CSHEAR

Creates a CSHEAR card

Parameters
eidint

element id

pidint

property id (PSHEAR)

nidsList[int, int, int, int]

node ids

commentstr; default=’’

a comment for the card

add_csschd(sid, aesid, lschd, lalpha=None, lmach=None, comment='') → pyNastran.bdf.cards.aero.static_loads.CSSCHD

Creates an CSSCHD card, which defines a specified control surface deflection as a function of Mach and alpha (used in SOL 144/146).

Parameters
sidint

the unique id

aesidint

the control surface (AESURF) id

lalphaint; default=None

the angle of attack profile (AEFACT) id

lmachint; default=None

the mach profile (AEFACT) id

lschdint; default=None

the control surface deflection profile (AEFACT) id

commentstr; default=’’

a comment for the card

add_csuper(seid, psid, nodes, comment='') → pyNastran.bdf.cards.superelements.CSUPER
add_csupext(seid, nodes, comment='') → pyNastran.bdf.cards.superelements.CSUPEXT
add_ctetra(eid, pid, nids, comment='') → Union[pyNastran.bdf.cards.elements.solid.CTETRA4, pyNastran.bdf.cards.elements.solid.CTETRA10]

Creates a CTETRA4/CTETRA10

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=4 or 10

commentstr; default=’’

a comment for the card

add_ctrax3(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CTRAX3

Creates a CTRAX3 card

add_ctrax6(eid, pid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CTRAX6

Creates a CTRAX6 card

add_ctria3(eid, pid, nids, zoffset=0.0, theta_mcid=0.0, tflag=0, T1=None, T2=None, T3=None, comment='') → pyNastran.bdf.cards.elements.shell.CTRIA3

Creates a CTRIA3 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

add_ctria6(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, comment='') → pyNastran.bdf.cards.elements.shell.CTRIA6

Creates a CTRIA6 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int/None, int/None, int/None]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

add_ctriar(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, comment='') → pyNastran.bdf.cards.elements.shell.CTRIAR

Creates a CTRIAR card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

add_ctriax(eid, pid, nids, theta_mcid=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CTRIAX

Creates a CTRIAX card

add_ctriax6(eid, mid, nids, theta=0.0, comment='') → pyNastran.bdf.cards.elements.axisymmetric_shells.CTRIAX

Creates a CTRIAX6 card

add_ctube(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.rods.CTUBE

Creates a CTUBE card

Parameters
eidint

element id

pidint

property id

nidsList[int, int]

node ids

commentstr; default=’’

a comment for the card

add_cvisc(eid: int, pid: int, nids: List[int], comment: str = '') → pyNastran.bdf.cards.elements.damper.CVISC

Creates a CVISC card

Parameters
eidint

element id

pidint

property id (PVISC)

nidsList[int, int]

GRID ids

commentstr; default=’’

a comment for the card

add_cyax(nids, comment='') → pyNastran.bdf.cards.cyclic.CYAX
add_cyjoin(side, coord, nids, comment='') → pyNastran.bdf.cards.cyclic.CYJOIN
add_darea(sid, nid, component, scale, comment='') → pyNastran.bdf.cards.loads.loads.DAREA

Creates a DAREA card

Parameters
sidint

darea id

nidint

GRID, EPOINT, SPOINT id

componentstr

Component number. (0-6; 0-EPOINT/SPOINT; 1-6 GRID)

scalefloat

Scale (area) factor

add_dconadd(oid, dconstrs, comment='') → pyNastran.bdf.cards.optimization.DCONADD

Creates a DCONADD card

add_dconstr(oid: int, dresp_id: int, lid: float = -1e+20, uid: float = 1e+20, lowfq: float = 0.0, highfq: float = 1e+20, comment: str = '') → pyNastran.bdf.cards.optimization.DCONSTR

Creates a DCONSTR card

Parameters
oidint

unique optimization id

dresp_idint

DRESP1/2 id

lid / uid=-1.e20 / 1.e20

lower/upper bound

lowfq / highfqfloat; default=0. / 1.e20

lower/upper end of the frequency range

commentstr; default=’’

a comment for the card

add_ddval(oid, ddvals, comment='') → pyNastran.bdf.cards.optimization.DDVAL

Creates a DDVAL card

add_deform(sid: int, eid: int, deformation: float, comment='') → pyNastran.bdf.cards.loads.loads.DEFORM

Creates an DEFORM card, which defines applied deformation on a 1D elemment. Links to the DEFORM card in the case control deck.

Parameters
sidint

load id

eidint

CTUBE/CROD/CONROD/CBAR/CBEAM element id

deformationfloat

the applied deformation

commentstr; default=’’

a comment for the card

add_delay(sid, nodes, components, delays, comment='') → pyNastran.bdf.cards.dynamic.DELAY

Creates a DELAY card

Parameters
sidint

DELAY id that is referenced by a TLOADx, RLOADx or ACSRCE card

nodesList[int]

list of nodes that see the delay len(nodes) = 1 or 2

componentsList[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

delaysList[float]

Time delay (tau) for designated point Pi and component Ci len(nodes) = len(delays)

commentstr; default=’’

a comment for the card

add_deqatn(equation_id, eqs, comment='') → pyNastran.bdf.cards.deqatn.DEQATN

Creates a DEQATN card

Parameters
equation_idint

the id of the equation

eqsList[str]

the equations, which may overbound the field split them by a semicolon (;)

commentstr; default=’’

a comment for the card

DEQATN 41 F1(A,B,C,D,R) = A+B *C-(D**3 + 10.0) + sin(PI(1) * R)
  • A**2 / (B - C); F = A + B - F1 * D

def F1(A, B, C, D, R):

F1 = A+B *C-(D**3 + 10.0) + sin(PI(1) * R) + A**2 / (B - C) F = A + B - F1 * D return F

eqs = [

‘F1(A,B,C,D,R) = A+B *C-(D**3 + 10.0) + sin(PI(1) * R) + A**2 / (B - C)’, ‘F = A + B - F1 * D’,

]
>>> deqatn = model.add_deqatn(41, eqs, comment=’’)
add_desvar(desvar_id: int, label: str, xinit: float, xlb: float = -1e+20, xub: float = 1e+20, delx=None, ddval: Optional[int] = None, comment: str = '') → pyNastran.bdf.cards.optimization.DESVAR

Creates a DESVAR card

Parameters
desvar_idint

design variable id

labelstr

name of the design variable

xinitfloat

the starting point value for the variable

xlbfloat; default=-1.e20

the lower bound

xubfloat; default=1.e20

the lower bound

delxfloat; default=1.e20

fractional change allowed for design variables during approximate optimization NX if blank : take from DOPTPRM; otherwise 1.0 MSC if blank : take from DOPTPRM; otherwise 0.5

ddvalint; default=None
intDDVAL id

allows you to set discrete values

None : continuous

commentstr; default=’’

a comment for the card

add_diverg(sid, nroots, machs, comment='') → pyNastran.bdf.cards.aero.static_loads.DIVERG

Creates an DIVERG card, which is used in divergence analysis (SOL 144).

Parameters
sidint

The name

nrootsint

the number of roots

machsList[float, …, float]

list of Mach numbers

commentstr; default=’’

a comment for the card

Creates a DLINK card, which creates a variable that is a lienar ccombination of other design variables

Parameters
oidint

optimization id

dependent_desvarint

the DESVAR to link

independent_desvarsList[int]

the DESVARs to combine

coeffsList[int]

the linear combination coefficients

c0float; default=0.0

an offset

cmultfloat; default=1.0

an scale factor

commentstr; default=’’

a comment for the card

add_dload(sid, scale, scale_factors, load_ids, comment='') → pyNastran.bdf.cards.loads.dloads.DLOAD

Creates a DLOAD card

Parameters
sidint

Load set identification number. See Remarks 1. and 4. (Integer > 0)

scalefloat

Scale factor. See Remarks 2. and 8. (Real)

SiList[float]

Scale factors. See Remarks 2., 7. and 8. (Real)

load_idsList[int]

Load set identification numbers of RLOAD1, RLOAD2, TLOAD1, TLOAD2, and ACSRCE entries. See Remarks 3. and 7. (Integer > 0)

commentstr; default=’’

a comment for the card

add_dmi(name, form, tin, tout, nrows, ncols, GCj, GCi, Real, Complex=None, comment='') → pyNastran.bdf.cards.dmig.DMI

Creates a DMI card

add_dmiax(name, matrix_form, tin, tout, ncols, GCNj, GCNi, Real, Complex=None, comment='') → pyNastran.bdf.cards.dmig.DMIAX

Creates a DMIAX card

add_dmig(name, ifo, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='') → pyNastran.bdf.cards.dmig.DMIG

Creates a DMIG card

Parameters
namestr

the name of the matrix

ifoint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]

the [jnode, jDOFs]

GCiList[(node, dof)]

the inode, iDOFs

RealList[float]

The real values

ComplexList[float]; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

add_dmig_uaccel(tin, ncol, load_sequences, comment='') → pyNastran.bdf.cards.dmig.DMIG_UACCEL

Creates a DMIG,UACCEL card

add_dmij(name, form, tin, tout, nrows, ncols, GCj, GCi, Real, Complex=None, comment='') → pyNastran.bdf.cards.dmig.DMIJ

Creates a DMIJ card

add_dmiji(name, ifo, tin, tout, nrows, ncols, GCj, GCi, Real, Complex=None, comment='') → pyNastran.bdf.cards.dmig.DMIJI
DMIJI | NAME | 0 | IFO | TIN | TOUT POLAR | | NCOL |
add_dmik(name, ifo, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='') → pyNastran.bdf.cards.dmig.DMIK

Creates a DMIK card

Parameters
namestr

the name of the matrix

ifoint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]

the jnode, jDOFs

GCiList[(node, dof)]

the inode, iDOFs

RealList[float]

The real values

ComplexList[float]; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

add_doptprm(params: Dict[str, Union[int, float]], comment='') → pyNastran.bdf.cards.optimization.DOPTPRM

Creates a DOPTPRM card

add_dphase(sid, nodes, components, phase_leads, comment='') → pyNastran.bdf.cards.dynamic.DPHASE

Creates a DPHASE card

Parameters
sidint

DPHASE id that is referenced by a RLOADx or ACSRCE card

nodesList[int]

list of nodes that see the delay len(nodes) = 1 or 2

componentsList[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

phase_leadsList[float]

Phase lead θ in degrees. len(nodes) = len(delays)

commentstr; default=’’

a comment for the card

add_dresp1(dresp_id: int, label: str, response_type: str, property_type: str, region: str, atta: Union[int, float, str, None], attb: Union[int, float, str, None], atti: List[Union[int, float, str]], validate: bool = True, comment: str = '') → pyNastran.bdf.cards.optimization.DRESP1

Creates a DRESP1 card.

A DRESP1 is used to define a “simple” output result that may be optimized on. A simple result is a result like stress, strain, force, displacement, eigenvalue, etc. for a node/element that may be found in a non-optimization case.

Parameters
dresp_idint

response id

labelstr

Name of the response

response_typestr

Response type

property_typestr

Element flag (PTYPE = ‘ELEM’), or property entry name, or panel flag for ERP responses (PTYPE = ‘PANEL’ - See Remark 34), or RANDPS ID. Blank for grid point responses. ‘ELEM’ or property name used only with element type responses (stress, strain, force, etc.) to identify the relevant element IDs, or the property type and relevant property IDs.

Must be {ELEM, PBAR, PSHELL, PCOMP, PANEL, etc.) PTYPE = RANDPS ID when RTYPE=PSDDISP, PSDVELO, or PSDACCL.

regionstr

Region identifier for constraint screening

attaint / float / str / blank

Response attribute

attbint / float / str / blank

Response attribute

attiList[int / float / str]

the response values to pull from List[int]:

list of grid ids list of property ids

List[str]

‘ALL’

commentstr; default=’’

a comment for the card

validatebool; default=True

should the card be validated when it’s created

Examples

Stress/PSHELL

>>> dresp_id = 103
>>> label = 'resp1'
>>> response_type = 'STRESS'
>>> property_type = 'PSHELL'
>>> pid = 3
>>> atta = 9 # von mises upper surface stress
>>> region = None
>>> attb = None
>>> atti = [pid]
>>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

Stress/PCOMP

>>> dresp_id = 104
>>> label = 'resp2'
>>> response_type = 'STRESS'
>>> property_type = 'PCOMP'
>>> pid = 3
>>> layer = 4
>>> atta = 9 # von mises upper surface stress
>>> region = None
>>> attb = layer
>>> atti = [pid]
>>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)
add_dresp2(dresp_id, label, dequation, region, params, method='MIN', c1=1.0, c2=0.005, c3=10.0, validate=True, comment='') → pyNastran.bdf.cards.optimization.DRESP2

Creates a DRESP2 card.

A DRESP2 is used to define a “complex” output result that may be optimized on. A complex result is a result that uses:

  • simple (DRESP1) results

  • complex (DRESP2) results

  • default values (DTABLE)

  • DVCRELx values

  • DVMRELx values

  • DVPRELx values

  • DESVAR values

Then, an equation (DEQATN) is used to formulate an output response.

Parameters
dresp_idint

response id

labelstr

Name of the response

dequationint

DEQATN id

regionstr

Region identifier for constraint screening

paramsdict[(index, card_type)] = values

the storage table for the response function index : int

a counter

card_typestr

the type of card to pull from DESVAR, DVPREL1, DRESP2, etc.

valuesList[int]

the values for this response

methodstr; default=MIN

flag used for FUNC=BETA/MATCH FUNC = BETA

valid options are {MIN, MAX}

FUNC = MATCH

valid options are {LS, BETA}

c1 / c2 / c3float; default=1. / 0.005 / 10.0

constants for FUNC=BETA or FUNC=MATCH

commentstr; default=’’

a comment for the card

validatebool; default=False

should the card be validated when it’s created

params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}
add_dresp3(dresp_id, label, group, Type, region, params, validate=True, comment='') → pyNastran.bdf.cards.optimization.DRESP3

Creates a DRESP3 card

add_dscreen(rtype: str, trs=-0.5, nstr=20, comment='') → pyNastran.bdf.cards.optimization.DSCREEN

Creates a DSCREEN object

Parameters
rtypestr

Response type for which the screening criteria apply

trsfloat

Truncation threshold

nstrint

Maximum number of constraints to be retained per region per load case

commentstr; default=’’

a comment for the card

add_dtable(default_values: Dict[str, float], comment='') → pyNastran.bdf.cards.bdf_tables.DTABLE

Creates a DTABLE card

Parameters
default_valuesdict
keystr

the parameter name

valuefloat

the value

commentstr; default=’’

a comment for the card

add_dti(name, fields, comment='') → pyNastran.bdf.cards.dmig.DTI

Creates a DTI card

add_dvcrel1(oid, Type, eid, cp_name, dvids, coeffs, cp_min=None, cp_max=1e+20, c0=0.0, validate=True, comment='') → pyNastran.bdf.cards.optimization.DVCREL1

Creates a DVCREL1 card

Parameters
oidint

optimization id

prop_typestr

property card name (e.g., PSHELL)

EIDint

element id

cp_namestr/int

optimization parameter as an element connectivity name (e.g., X1)

dvidsList[int]

DESVAR ids

coeffsList[float]

scale factors for DESVAR ids

cp_minfloat; default=None

minimum value

cp_maxfloat; default=1e20

maximum value

c0float; default=0.

offset factor for the variable

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

add_dvcrel2(oid, Type, eid, cp_name, deqation, dvids, labels, cp_min=None, cp_max=1e+20, validate=True, comment='') → pyNastran.bdf.cards.optimization.DVCREL2

Creates a DVCREL2 card

add_dvgrid(dvid: int, nid: int, dxyz: Any, cid: int = 0, coeff: float = 1.0, comment: str = '') → pyNastran.bdf.cards.optimization.DVGRID

Creates a DVGRID card

Parameters
dvidint

DESVAR id

nidint

GRID/POINT id

dxyz(3, ) float ndarray

the amount to move the grid point

cidint; default=0

Coordinate system for dxyz

coefffloat; default=1.0

the dxyz scale factor

commentstr; default=’’

a comment for the card

add_dvmrel1(oid: int, mat_type: str, mid: int, mp_name: str, dvids: List[int], coeffs: List[float], mp_min: Optional[float] = None, mp_max: float = 1e+20, c0: float = 0.0, validate: bool = True, comment: str = '') → pyNastran.bdf.cards.optimization.DVMREL1

Creates a DVMREL1 card

Parameters
oidint

optimization id

prop_typestr

material card name (e.g., MAT1)

midint

material id

mp_namestr

optimization parameter as a pname (material name; E)

dvidsList[int]

DESVAR ids

coeffsList[float]

scale factors for DESVAR ids

mp_minfloat; default=None

minimum material property value

mp_maxfloat; default=1e20

maximum material property value

c0float; default=0.

offset factor for the variable

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

add_dvmrel2(oid: int, mat_type: str, mid: int, mp_name: str, deqation: int, dvids: List[int], labels: List[str], mp_min: Optional[float] = None, mp_max: float = 1e+20, validate: bool = True, comment: str = '') → pyNastran.bdf.cards.optimization.DVMREL2

Creates a DVMREL2 card

Parameters
oidint

optimization id

mat_typestr

material card name (e.g., MAT1)

midint

material id

mp_namestr

optimization parameter as a pname (material name; E)

deqationint

DEQATN id

dvidsList[int]; default=None

DESVAR ids

labelsList[str]; default=None

DTABLE names

mp_minfloat; default=None

minimum material property value

mp_maxfloat; default=1e20

maximum material property value

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

Notes

either dvids or labels is required

add_dvprel1(oid: int, prop_type: str, pid: int, pname_fid: Union[int, str], dvids: List[int], coeffs: List[float], p_min=None, p_max: float = 1e+20, c0: float = 0.0, validate: bool = True, comment: str = '') → pyNastran.bdf.cards.optimization.DVPREL1

Creates a DVPREL1 card

Parameters
oidint

optimization id

prop_typestr

property card name (e.g., PSHELL)

pidint

property id

pname_fidstr/int

optimization parameter as a pname (property name; T) or field number (fid)

dvidsList[int]

DESVAR ids

coeffsList[float]

scale factors for DESVAR ids

p_minfloat; default=None

minimum property value

p_maxfloat; default=1e20

maximum property value

c0float; default=0.

offset factor for the variable

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

add_dvprel2(oid: int, prop_type: str, pid: int, pname_fid: Union[int, str], deqation: int, dvids: List[int] = None, labels: List[str] = None, p_min: Optional[float] = None, p_max: float = 1e+20, validate: bool = True, comment: str = '') → pyNastran.bdf.cards.optimization.DVPREL2

Creates a DVPREL2 card

Parameters
oidint

optimization id

prop_typestr

property card name (e.g., PSHELL)

pidint

property id

pname_fidstr/int

optimization parameter as a pname (property name; T) or field number (fid)

deqationint

DEQATN id

dvidsList[int]; default=None

DESVAR ids

labelsList[str]; default=None

DTABLE names

p_minfloat; default=None

minimum property value

p_maxfloat; default=1e20

maximum property value

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

Notes

either dvids or labels is required

add_dynred(sid, fmax, nirv, nit, idir, nqdes) → None
add_eigb(sid, method, L1, L2, nep, ndp, ndn, norm, G, C, comment='') → pyNastran.bdf.cards.methods.EIGB

Creates an EIGB card

add_eigc(sid, method, grid, component, epsilon, neigenvalues, norm='MAX', mblkszs=None, iblkszs=None, ksteps=None, NJIs=None, alphaAjs=None, omegaAjs=None, alphaBjs=None, omegaBjs=None, LJs=None, NEJs=None, NDJs=None, shift_r1=None, shift_i1=None, isrr_flag=None, nd1=None, comment='') → pyNastran.bdf.cards.methods.EIGC

Creates an EIGC card

add_eigp(sid, alpha1, omega1, m1, alpha2, omega2, m2, comment='') → pyNastran.bdf.cards.methods.EIGP

Creates an EIGP card

add_eigr(sid, method='LAN', f1=None, f2=None, ne=None, nd=None, norm='MASS', G=None, C=None, comment='') → pyNastran.bdf.cards.methods.EIGR

Adds a EIGR card

Parameters
sidint

method id

methodstr; default=’LAN’

eigenvalue method recommended: {LAN, AHOU} obsolete : {INV, SINV, GIV, MGIV, HOU, MHOU, AGIV}

f1 / f2float; default=None

lower/upper bound eigenvalue

f2float; default=None

upper bound eigenvalue

neint; default=None

estimate of number of roots (used for INV)

ndint; default=None

desired number of roots

msglvlint; default=0

debug level; 0-4

maxsetint; default=None

Number of vectors in block or set

shfsclfloat; default=None

estimate of first flexible mode natural frequency

normstr; default=None

{MAX, MASS, AF, POINT} default=MASS (NX)

Gint; default=None

node id for normalization; only for POINT

Cint; default=None

component for normalization (1-6); only for POINT

commentstr; default=’’

a comment for the card

add_eigrl(sid, v1=None, v2=None, nd=None, msglvl=0, maxset=None, shfscl=None, norm=None, options=None, values=None, comment='') → pyNastran.bdf.cards.methods.EIGRL

Adds an EIGRL card

Parameters
sidint

method id

v1float; default=None

lower bound eigenvalue

v2float; default=None

upper bound eigenvalue

ndint

number of roots

msglvlint; default=0

debug level; 0-4

maxsetint; default=None

Number of vectors in block or set

shfsclfloat; default=None

estimate of first flexible mode natural frequency

normstr; default=None

{MAX, MASS}

options???; default=None -> []

???

values???; default=None -> []

???

commentstr; default=’’

a comment for the card

add_epoint(ids: Union[int, List[int]], comment: str = '') → pyNastran.bdf.cards.nodes.EPOINTs

Creates the EPOINTs card that contains many EPOINTs

Parameters
idsList[int]

EPOINT ids

commentstr; default=’’

a comment for the card

add_feedge(edge_id, nids, cid, geom_ids, geomin='POINT', comment='') → pyNastran.bdf.cards.parametric.geometry.FEEDGE
add_feface(face_id, nids, cid, surf_ids, comment='') → pyNastran.bdf.cards.parametric.geometry.FEFACE
add_flfact(sid: int, factors: List[float], comment: str = '') → pyNastran.bdf.cards.aero.dynamic_loads.FLFACT

Creates an FLFACT card, which defines factors used for flutter analysis. These factors define either:

  • density

  • mach

  • velocity

  • reduced frequency

depending on the FLUTTER method chosen (e.g., PK, PKNL, PKNLS)

Parameters
sidint

the id of a density, reduced_frequency, mach, or velocity table the FLUTTER card defines the meaning

factorsvaries
valuesList[float, …, float]

list of factors

List[f1, THRU, fnf, nf, fmid]
f1float

first value

THRUstr

the word THRU

fnffloat

second value

nfint

number of values

fmidfloat; default=(f1 + fnf) / 2.

the mid point to bias the array

TODO: does f1 need be be greater than f2/fnf???

commentstr; default=’’

a comment for the card

add_flutter(sid: int, method: str, density: int, mach: int, reduced_freq_velocity: int, imethod: str = 'L', nvalue: Optional[int] = None, omax: Optional[float] = None, epsilon: float = 0.001, comment: str = '') → pyNastran.bdf.cards.aero.dynamic_loads.FLUTTER

Creates a FLUTTER card, which is required for a flutter (SOL 145) analysis.

Parameters
sidint

flutter id

methodstr
valid methods = [K, KE,

PKS, PKNLS, PKNL, PKE]

densityint

defines a series of air densities in units of mass/volume PARAM,WTMASS does not affect this AERO affects this references an FLFACT id

machint

defines a series of the mach numbers references an FLFACT id

reduced_freq_velocityint
Defines a series of either:
  1. reduced frequencies - K, KE

  2. velocities - PK, PKNL, PKS, PKNLS

depending on the method chosen. references an FLFACT id

imethodstr; default=’L’

Choice of interpolation method for aerodynamic matrix interpolation. imethods :

  1. L - linear

  2. S - surface

  3. TCUB - termwise cubic

nvalueint

Number of eigenvalues beginning with the first eigenvalue for output and plots

omaxfloat

For the PKS and PKNLS methods, OMAX specifies the maximum frequency, in Hz., to be used in he flutter sweep. MSC only.

epsilonfloat; default=1.0e-3

Convergence parameter for k. Used in the PK and PKNL methods only

commentstr; default=’’

a comment for the card

add_force(sid, node, mag, xyz, cid=0, comment='') → pyNastran.bdf.cards.loads.static_loads.FORCE

Creates a FORCE card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

xyz(3, ) float ndarray

the load direction in the cid frame

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

add_force1(sid, node, mag, g1, g2, comment='') → pyNastran.bdf.cards.loads.static_loads.FORCE1

Creates a FORCE1 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

n1 / n2int / int

defines the load direction n = n2 - n1

commentstr; default=’’

a comment for the card

add_force2(sid, node, mag, g1, g2, g3, g4, comment='') → pyNastran.bdf.cards.loads.static_loads.FORCE2

Creates a FORCE2 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

g1 / g2 / g3 / g4int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

commentstr; default=’’

a comment for the card

add_forceax(sid, ring_id, hid, scale, f_rtz, comment='') → pyNastran.bdf.cards.axisymmetric.loads.FORCEAX
add_freq(sid, freqs, comment='') → pyNastran.bdf.cards.dynamic.FREQ

Creates a FREQ card

Parameters
sidint

set id referenced by case control FREQUENCY

freqsList[float]

the frequencies for a FREQx object

commentstr; default=’’

a comment for the card

add_freq1(sid, f1, df, ndf=1, comment='') → pyNastran.bdf.cards.dynamic.FREQ1

Creates a FREQ1 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float

first frequency

dffloat

frequency increment

ndfint; default=1

number of frequency increments

commentstr; default=’’

a comment for the card

add_freq2(sid, f1, f2, nf=1, comment='') → pyNastran.bdf.cards.dynamic.FREQ2

Creates a FREQ2 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float

first frequency

f2float

last frequency

nfint; default=1

number of logorithmic intervals

commentstr; default=’’

a comment for the card

add_freq3(sid, f1, f2=None, Type='LINEAR', nef=10, cluster=1.0, comment='') → pyNastran.bdf.cards.dynamic.FREQ3

Creates a FREQ3 card

add_freq4(sid, f1=0.0, f2=1e+20, fspread=0.1, nfm=3, comment='') → pyNastran.bdf.cards.dynamic.FREQ4

Creates a FREQ4 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2float; default=1E20

Upper bound of frequency range in cycles per unit time.

nfmint; default=3

Number of evenly spaced frequencies per ‘spread’ mode.

commentstr; default=’’

a comment for the card

add_freq5(sid, fractions, f1=0.0, f2=1e+20, comment='') → pyNastran.bdf.cards.dynamic.FREQ5

Creates a FREQ5 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2float; default=1e20

Upper bound of frequency range in cycles per unit time.

fractionsList[float]

Fractions of the natural frequencies in the range F1 to F2.

commentstr; default=’’

a comment for the card

Notes

FREQ5 is only valid in modal frequency-response solutions (SOLs 111, 146, and 200) and is ignored in direct frequency response solutions.

add_genel_flexibility(eid, ul, ud, z, s=None) → pyNastran.bdf.cards.elements.elements.GENEL

creates a GENEL card using the flexiblity (Z) approach

add_genel_stiffness(eid, ul, ud, k, s=None) → pyNastran.bdf.cards.elements.elements.GENEL

creates a GENEL card using the stiffness (K) approach

add_gmcord(cid, entity, gm_ids, comment='') → pyNastran.bdf.cards.coordinate_systems.GMCORD

Creates a GMCORD card

add_gmcurv(curve_id, group, data, cid_in=0, cid_bc=0, comment='') → pyNastran.bdf.cards.parametric.geometry.GMCURV
add_gmload(sid, normal, entity, entity_id, method, load_magnitudes, cid=0, comment='') → pyNastran.bdf.cards.loads.static_loads.GMLOAD

Creates a GMLOAD object

add_gmspc(conid, component, entity, entity_id, comment='') → pyNastran.bdf.cards.constraints.GMSPC

Creates a GMSPC card

add_gmsurf(curve_id, group, data, cid_in=0, cid_bc=0, comment='') → pyNastran.bdf.cards.parametric.geometry.GMSURF
add_grav(sid, scale, N, cid=0, mb=0, comment='') → pyNastran.bdf.cards.loads.static_loads.GRAV

Creates an GRAV card

Parameters
sidint

load id

scalefloat

scale factor for load

N(3, ) float ndarray

the acceleration vector in the cid frame

cidint; default=0

the coordinate system for the load

mbint; default=0

???

commentstr; default=’’

a comment for the card

add_grdset(cp: int, cd: int, ps: str, seid: int, comment: str = '') → pyNastran.bdf.cards.nodes.GRDSET

Creates the GRDSET card

Parameters
cpint; default=0

the xyz coordinate frame

cdint; default=0

the analysis coordinate frame

psstr; default=’’

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seidint; default=0

superelement id TODO: how is this used by Nastran???

commentstr; default=’’

a comment for the card

add_grid(nid: int, xyz: Union[None, List[float], Any], cp: int = 0, cd: int = 0, ps: str = '', seid: int = 0, comment: str = '') → pyNastran.bdf.cards.nodes.GRID

Creates the GRID card

Parameters
nidint

node id

cpint; default=0

the xyz coordinate frame

xyz(3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cdint; default=0

the analysis coordinate frame

psstr; default=’’

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seidint; default=0

superelement id TODO: how is this used by Nastran???

commentstr; default=’’

a comment for the card

add_gust(sid, dload, wg, x0, V=None, comment='') → pyNastran.bdf.cards.aero.dynamic_loads.GUST

Creates a GUST card, which defines a stationary vertical gust for use in aeroelastic response analysis.

Parameters
sidint

gust load id

dloadint

TLOADx or RLOADx entry that defines the time/frequency dependence

wgfloat

Scale factor (gust velocity/forward velocity) for gust velocity

x0float

Streamwise location in the aerodynamic coordinate system of the gust reference point.

Vfloat; default=None
floatvelocity of the vehicle (must be the same as the

velocity on the AERO card)

None : ???

commentstr; default=’’

a comment for the card

add_load(sid, scale, scale_factors, load_ids, comment='') → pyNastran.bdf.cards.loads.static_loads.LOAD

Creates a LOAD card

Parameters
sidint

load id

scalefloat

overall scale factor

scale_factorsList[float]

individual scale factors (corresponds to load_ids)

load_idsList[int]

individual load_ids (corresponds to scale_factors)

commentstr; default=’’

a comment for the card

add_loadcyh(sid, scale, hid, htype, scales, load_ids, comment='') → pyNastran.bdf.cards.loads.loads.LOADCYH

Creates a LOADCYH card

add_loadcyn(sid, scale, segment_id, scales, load_ids, segment_type=None, comment='') → pyNastran.bdf.cards.loads.loads.LOADCYN

Creates a LOADCYN card

add_lseq(sid, excite_id, lid, tid=None, comment='') → pyNastran.bdf.cards.loads.loads.LSEQ

Creates a LSEQ card

Parameters
sidint

loadset id; LOADSET points to this

excite_idint

set id assigned to this static load vector

lidint

load set id of a set of static load entries; LOAD in the Case Control

tidint; default=None

temperature set id of a set of thermal load entries; TEMP(LOAD) in the Case Control

commentstr; default=’’

a comment for the card

add_mat1(mid, E, G, nu, rho=0.0, a=0.0, tref=0.0, ge=0.0, St=0.0, Sc=0.0, Ss=0.0, mcsid=0, comment='') → pyNastran.bdf.cards.materials.MAT1

Creates a MAT1 card

Parameters
midint

material id

Efloat / None

Young’s modulus

Gfloat / None

Shear modulus

nufloat / None

Poisson’s ratio

rhofloat; default=0.

density

afloat; default=0.

coefficient of thermal expansion

treffloat; default=0.

reference temperature

gefloat; default=0.

damping coefficient

St / Sc / Ssfloat; default=0.

tensile / compression / shear allowable

mcsidint; default=0

material coordinate system id used by PARAM,CURV

commentstr; default=’’

a comment for the card

If E, G, or nu is None (only 1), it will be calculated
add_mat10(mid, bulk, rho, c, ge=0.0, gamma=None, table_bulk=None, table_rho=None, table_ge=None, table_gamma=None, comment='') → pyNastran.bdf.cards.materials.MAT10

Creates a MAT10 card

Parameters
midint

material id

bulkfloat; default=None

Bulk modulus

rhofloat; default=None

Density

cfloat; default=None

Speed of sound

gefloat; default=0.

Damping

gammafloat; default=None

NX : ratio of imaginary bulk modulus to real bulk modulus; default=0.0 MSC : normalized admittance coefficient for porous material

table_bulkint; default=None

TABLEDx entry defining bulk modulus vs. frequency None for MSC Nastran

table_rhoint; default=None

TABLEDx entry defining rho vs. frequency None for MSC Nastran

table_geint; default=None

TABLEDx entry defining ge vs. frequency None for MSC Nastran

table_gammaint; default=None

TABLEDx entry defining gamma vs. frequency None for MSC Nastran

commentstr; default=’’

a comment for the card

add_mat11(mid, e1, e2, e3, nu12, nu13, nu23, g12, g13, g23, rho=0.0, a1=0.0, a2=0.0, a3=0.0, tref=0.0, ge=0.0, comment='') → pyNastran.bdf.cards.materials.MAT11

Creates a MAT11 card

add_mat2(mid, G11, G12, G13, G22, G23, G33, rho=0.0, a1=None, a2=None, a3=None, tref=0.0, ge=0.0, St=None, Sc=None, Ss=None, mcsid=None, comment='') → pyNastran.bdf.cards.materials.MAT2

Creates an MAT2 card

add_mat3(mid, ex, eth, ez, nuxth, nuthz, nuzx, rho=0.0, gzx=None, ax=0.0, ath=0.0, az=0.0, tref=0.0, ge=0.0, comment='') → pyNastran.bdf.cards.materials.MAT3

Creates a MAT3 card

add_mat3d(mid, e1, e2, e3, nu12, nu13, nu23, g12, g13, g23, rho=0.0, comment='') → pyNastran.bdf.cards.materials.MAT3D

This is a VABS specific card that is almost identical to the MAT11.

add_mat4(mid, k, cp=0.0, rho=1.0, H=None, mu=None, hgen=1.0, ref_enthalpy=None, tch=None, tdelta=None, qlat=None, comment='') → pyNastran.bdf.cards.materials.MAT4

Creates a MAT4 card

add_mat5(mid, kxx=0.0, kxy=0.0, kxz=0.0, kyy=0.0, kyz=0.0, kzz=0.0, cp=0.0, rho=1.0, hgen=1.0, comment='') → pyNastran.bdf.cards.materials.MAT5

Creates a MAT5 card

add_mat8(mid, e11, e22, nu12, g12=0.0, g1z=100000000.0, g2z=100000000.0, rho=0.0, a1=0.0, a2=0.0, tref=0.0, Xt=0.0, Xc=None, Yt=0.0, Yc=None, S=0.0, ge=0.0, F12=0.0, strn=0.0, comment='') → pyNastran.bdf.cards.materials.MAT8

Creates a MAT8 card

add_mat9(mid, G11=0.0, G12=0.0, G13=0.0, G14=0.0, G15=0.0, G16=0.0, G22=0.0, G23=0.0, G24=0.0, G25=0.0, G26=0.0, G33=0.0, G34=0.0, G35=0.0, G36=0.0, G44=0.0, G45=0.0, G46=0.0, G55=0.0, G56=0.0, G66=0.0, rho=0.0, A=None, tref=0.0, ge=0.0, comment='') → pyNastran.bdf.cards.materials.MAT9

Creates a MAT9 card

add_matg(mid, idmem, behav, tabld, tablu, yprs, epl, gpl, gap=0.0, tab_yprs=None, tab_epl=None, tab_gpl=None, tab_gap=None, comment='') → pyNastran.bdf.cards.materials.MATG

Creates a MATG card

add_mathe(mid, model, bulk, mus, alphas, betas, mooney, sussbat, aboyce, gent, rho=0.0, texp=0.0, tref=0.0, ge=0.0, comment='') → pyNastran.bdf.cards.materials.MATHE

Creates a MATHE card

add_mathp(mid, a10=0.0, a01=0.0, d1=None, rho=0.0, av=0.0, tref=0.0, ge=0.0, na=1, nd=1, a20=0.0, a11=0.0, a02=0.0, d2=0.0, a30=0.0, a21=0.0, a12=0.0, a03=0.0, d3=0.0, a40=0.0, a31=0.0, a22=0.0, a13=0.0, a04=0.0, d4=0.0, a50=0.0, a41=0.0, a32=0.0, a23=0.0, a14=0.0, a05=0.0, d5=0.0, tab1=None, tab2=None, tab3=None, tab4=None, tabd=None, comment='') → pyNastran.bdf.cards.materials.MATHP

Creates a MATHP card

add_mats1(mid, tid, Type, h, hr, yf, limit1, limit2, comment='') → pyNastran.bdf.cards.material_deps.MATS1

Creates a MATS1 card

add_matt1(mid, e_table=None, g_table=None, nu_table=None, rho_table=None, a_table=None, ge_table=None, st_table=None, sc_table=None, ss_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT1

Creates a MATT1 card

add_matt2(mid, g11_table=None, g12_table=None, g13_table=None, g22_table=None, g23_table=None, g33_table=None, rho_table=None, a1_table=None, a2_table=None, a3_table=None, ge_table=None, st_table=None, sc_table=None, ss_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT2

Creates a MATT2 card

add_matt3(mid, ex_table=None, eth_table=None, ez_table=None, nuth_table=None, nuxz_table=None, rho_table=None, gzx_table=None, ax_table=None, ath_table=None, az_table=None, ge_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT3

Creates a MATT3 card

add_matt4(mid, k_table=None, cp_table=None, h_table=None, mu_table=None, hgen_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT4

Creates a MATT4 card

add_matt5(mid, kxx_table=None, kxy_table=None, kxz_table=None, kyy_table=None, kyz_table=None, kzz_table=None, cp_table=None, hgen_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT5

Creates a MATT5 card

add_matt8(mid, e1_table=None, e2_table=None, nu12_table=None, g12_table=None, g1z_table=None, g2z_table=None, rho_table=None, a1_table=None, a2_table=None, xt_table=None, xc_table=None, yt_table=None, yc_table=None, s_table=None, ge_table=None, f12_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT8

Creates a MATT8 card

add_matt9(mid, g11_table=None, g12_table=None, g13_table=None, g14_table=None, g15_table=None, g16_table=None, g22_table=None, g23_table=None, g24_table=None, g25_table=None, g26_table=None, g33_table=None, g34_table=None, g35_table=None, g36_table=None, g44_table=None, g45_table=None, g46_table=None, g55_table=None, g56_table=None, g66_table=None, rho_table=None, a1_table=None, a2_table=None, a3_table=None, a4_table=None, a5_table=None, a6_table=None, ge_table=None, comment='') → pyNastran.bdf.cards.material_deps.MATT9
add_mkaero1(machs: List[float], reduced_freqs: List[float], comment: str = '') → pyNastran.bdf.cards.aero.dynamic_loads.MKAERO1

Creates an MKAERO1 card, which defines a set of mach and reduced frequencies.

Parameters
machsList[float]

series of Mach numbers

reduced_freqsList[float]

series of reduced frequencies

commentstr; default=’’

a comment for the card

add_mkaero2(machs, reduced_freqs, comment='') → pyNastran.bdf.cards.aero.dynamic_loads.MKAERO2

Creates an MKAERO2 card, which defines a set of mach and reduced frequency pairs.

Parameters
machsList[float]

series of Mach numbers

reduced_freqsList[float]

series of reduced frequencies

commentstr; default=’’

a comment for the card

add_modtrak() → pyNastran.bdf.cards.methods.MODTRAK
add_moment(sid, node, mag, xyz, cid=0, comment='') → pyNastran.bdf.cards.loads.static_loads.MOMENT

Creates a MOMENT card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

cidint; default=0

the coordinate system for the load

xyz(3, ) float ndarray; default

the load direction in the cid frame

commentstr; default=’’

a comment for the card

add_moment1(sid, node, mag, g1, g2, comment='') → pyNastran.bdf.cards.loads.static_loads.MOMENT1

Creates a MOMENT1 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

n1 / n2int / int

defines the load direction n = n2 - n1

commentstr; default=’’

a comment for the card

add_moment2(sid, node, mag, g1, g2, g3, g4, comment='') → pyNastran.bdf.cards.loads.static_loads.MOMENT2

Creates a MOMENT2 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

g1 / g2 / g3 / g4int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

commentstr; default=’’

a comment for the card

add_mondsp1(name, label, axes, aecomp_name, xyz, cp=0, cd=None, ind_dof='123', comment='') → pyNastran.bdf.cards.aero.aero.MONDSP1

Creates a MONDSP1 card

Parameters
namestr

Character string of up to 8 characters identifying the monitor point

labelstr

A string comprising no more than 56 characters that identifies and labels the monitor point.

axesstr

components {1,2,3,4,5,6}

aecomp_namestr

name of the AECOMP/AECOMPL entry

xyzList[float, float, float]; default=None

The coordinates in the CP coordinate system about which the loads are to be monitored. None : [0., 0., 0.]

cpint, CORDx; default=0

coordinate system of XYZ

cdint; default=None -> cp

the coordinate system for load outputs

ind_dofstr; default=’123’

the dofs to map

commentstr; default=’’

a comment for the card

Notes

MSC specific card

add_monpnt1(name: str, label: str, axes: str, aecomp_name: str, xyz: List[float], cp: int = 0, cd: Optional[int] = None, comment: str = '') → pyNastran.bdf.cards.aero.aero.MONPNT1

Creates a MONPNT1 card

Parameters
namestr

Character string of up to 8 characters identifying the monitor point

labelstr

A string comprising no more than 56 characters that identifies and labels the monitor point.

axesstr

components {1,2,3,4,5,6}

aecomp_namestr

name of the AECOMP/AECOMPL entry

xyzList[float, float, float]; default=None

The coordinates in the CP coordinate system about which the loads are to be monitored. None : [0., 0., 0.]

cpint, CORDx; default=0

int : coordinate system

cdint; default=None -> cp

the coordinate system for load outputs

commentstr; default=’’

a comment for the card

Notes

CD - MSC specific field

add_monpnt2(name, label, table, Type, nddl_item, eid, comment='') → pyNastran.bdf.cards.aero.aero.MONPNT2

Creates a MONPNT2 card

add_monpnt3(name, label, axes, grid_set, elem_set, xyz, cp=0, cd=None, xflag=None, comment='') → pyNastran.bdf.cards.aero.aero.MONPNT3

Creates a MONPNT3 card

add_mpc(conid, nodes, components, coefficients, comment='') → pyNastran.bdf.cards.constraints.MPC

Creates an MPC card

Parameters
conidint

Case Control MPC id

nodesList[int]

GRID/SPOINT ids

componentsList[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

coefficientsList[float]

the scaling coefficients

add_mpcadd(conid, sets, comment='') → pyNastran.bdf.cards.constraints.MPCADD

Creates an MPCADD card

add_nlparm(nlparm_id, ninc=None, dt=0.0, kmethod='AUTO', kstep=5, max_iter=25, conv='PW', int_out='NO', eps_u=0.01, eps_p=0.01, eps_w=0.01, max_div=3, max_qn=None, max_ls=4, fstress=0.2, ls_tol=0.5, max_bisect=5, max_r=20.0, rtol_b=20.0, comment='') → pyNastran.bdf.cards.dynamic.NLPARM

Creates an NLPARM card

add_nlpci(nlpci_id, Type='CRIS', minalr=0.25, maxalr=4.0, scale=0.0, desiter=12, mxinc=20, comment='') → pyNastran.bdf.cards.dynamic.NLPCI

Creates an NLPCI card

add_nlrsfd(sid, ga, gb, plane, bdia, blen, bclr, soln, visco, pvapco, nport, pres1, theta1, pres2, theat2, npnt, offset1, offset2) → None
add_nolin1(sid, gi, ci, s, gj, cj, t) → None
add_nolin2(sid, g, ci, s, gj, cj, gk, ck) → None
add_nolin3(sid, gi, ci, s, gj, cj, a) → None
add_nolin4(sid, gi, ci, s, gj, cj, a) → None
add_nsm(sid: int, nsm_type: str, pid_eid: int, value: float, comment: str = '') → pyNastran.bdf.cards.properties.mass.NSM

Creates an NSM card

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

pid_eidList[int]; int

property id or element id depending on nsm_type

valueList[float]; float

the non-structural pass per unit length/area same length as pid_eid

commentstr; default=’’

a comment for the card

add_nsm1(sid: int, nsm_type: str, value: float, ids: List[int], comment: str = '') → pyNastran.bdf.cards.properties.mass.NSM1

Creates an NSM1 card

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

valuefloat

the non-structural pass per unit length/area

idsList[int]

property ids or element ids depending on nsm_type

commentstr; default=’’

a comment for the card

add_nsmadd(sid: int, sets: List[int], comment: str = '') → pyNastran.bdf.cards.properties.mass.NSMADD

Creates an NSMADD card, which sum NSM sets

Parameters
sidint

the NSM Case Control value

setsList[int]

the NSM, NSM1, NSML, NSML1 values

commentstr; default=’’

a comment for the card

add_nsml(sid: int, nsm_type: str, pid_eid: int, value: float, comment: str = '') → pyNastran.bdf.cards.properties.mass.NSML

Creates an NSML card, which defines lumped non-structural mass

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

pid_eidList[int]; int

property id or element id depending on nsm_type

valueList[float]; float

the non-structural pass per unit length/area same length as pid_eid

commentstr; default=’’

a comment for the card

add_nsml1(sid: int, nsm_type: str, value: float, ids: List[int], comment: str = '') → pyNastran.bdf.cards.properties.mass.NSML1

Creates an NSML1 card, which defines lumped non-structural mass

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

valuefloat

the non-structural pass per unit length/area

idsList[int]

property ids or element ids depending on nsm_type

commentstr; default=’’

a comment for the card

add_nxstrat(sid, params, comment='') → pyNastran.bdf.cards.materials.NXSTRAT

Creates an NXSTRAT card

add_omit1(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.OMIT, pyNastran.bdf.cards.bdf_sets.OMIT1]

Creates an OMIT1 card, which defines the degree of freedoms that will be excluded (o-set) from the analysis set (a-set).

Parameters
idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms to be omitted (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

add_paabsf(pid, tzreid=None, tzimid=None, s=1.0, a=1.0, b=0.0, k=0.0, rhoc=1.0, comment='')
add_pacabs(pid, cutfr, b, k, m, synth=True, tid_resistance=None, tid_reactance=None, tid_weight=None, comment='') → pyNastran.bdf.cards.elements.acoustic.PACBAR

Creates a PACABS card

Parameters
pidint

Property identification number.

synthbool; default=True

Request the calculation of B, K, and M from the tables TIDi below

tid_resistanceint; default=None

Identification of the TABLEDi entry that defines the resistance.

tid_reactanceint; default=None

Identification of the TABLEDi entry that defines the reactance.

tid_weightint; default=None

Identification of the TABLEDi entry that defines the weighting function.

cutfrfloat

Cutoff frequency for tables referenced above. (Real > 0.0)

B, K, Mfloat

Equivalent damping, stiffness and mass values per unit area. (Real > 0.0)

..note:: tables are defined as a function of frequency in cycles/time
add_pacbar(pid, mback, mseptm, freson, kreson, comment='') → pyNastran.bdf.cards.elements.acoustic.PACBAR

Creates a PACBAR card

Parameters
pidint

Property identification number. (Integer > 0)

mbackfloat

Mass per unit area of the backing material

mseptmfloat

Mass per unit area of the septum material

fresonfloat; default=None

Resonant frequency of the sandwich construction in hertz.

kresonfloat; default=None

Resonant stiffness of the sandwich construction.

add_paero1(pid, caero_body_ids=None, comment='') → pyNastran.bdf.cards.aero.aero.PAERO1

Creates a PAERO1 card, which defines associated bodies for the panels in the Doublet-Lattice method.

Parameters
pidint

PAERO1 id

caero_body_idsList[int]; default=None

CAERO2 ids that are within the same IGID group

commentstr; default=’’

a comment for the card

add_paero2(pid: int, orient: str, width: float, AR: float, thi: List[int], thn: List[int], lrsb: Optional[int] = None, lrib: Optional[int] = None, lth: Optional[int] = None, comment: str = '') → pyNastran.bdf.cards.aero.aero.PAERO2

Creates a PAERO2 card, which defines additional cross-sectional properties for the CAERO2 geometry.

Parameters
pidint

PAERO1 id

orientstr

Orientation flag. Type of motion allowed for bodies. Refers to the aerodynamic coordinate system of ACSID. See AERO entry. valid_orientations = {Z, Y, ZY}

widthfloat

Reference half-width of body and the width of the constant width interference tube

ARfloat

Aspect ratio of the interference tube (height/width)

thi / thnList[int]

The first (thi) and last (thn) interference element of a body to use the theta1/theta2 array

lrsbint; default=None
intAEFACT id containing a list of slender body half-widths

at the end points of the slender body elements

None : use width

lribint; default=None
intAEFACT id containing a list of interference body

half-widths at the end points of the interference elements

None : use width

lthList[int, int]; default=None

AEFACT ids for defining theta arrays for interference calculations for theta1/theta2; length=2

commentstr; default=’’

a comment for the card

add_paero3(pid, nbox, ncontrol_surfaces, x, y, comment='') → pyNastran.bdf.cards.aero.aero.PAERO3

Creates a PAERO3 card, which defines the number of Mach boxes in the flow direction and the location of cranks and control surfaces of a Mach box lifting surface.

Parameters
pidint

PAERO1 id

nboxint

Number of Mach boxes in the flow direction; 0 < nbox < 50

ncontrol_surfacesint

Number of control surfaces. (0, 1, or 2)

x / yList[float, None]

float : locations of points 5 through 12, which are in the aerodynamic coordinate system, to define the cranks and control surface geometry.

commentstr; default=’’

a comment for the card

add_paero4(pid, docs, caocs, gapocs, cla=0, lcla=0, circ=0, lcirc=0, comment='') → pyNastran.bdf.cards.aero.aero.PAERO4

Creates a PAERO4 card

add_paero5(pid: int, caoci: List[float], nalpha: int = 0, lalpha: int = 0, nxis: int = 0, lxis: int = 0, ntaus: int = 0, ltaus: int = 0, comment='') → pyNastran.bdf.cards.aero.aero.PAERO5

Creates a PAERO5 card

add_param(key: str, values: List[Union[int, float, str]], comment: str = '') → pyNastran.bdf.cards.params.PARAM

Creates a PARAM card

Parameters
keystr

the name of the PARAM

valuesint/float/str/List

varies depending on the type of PARAM

commentstr; default=’’

a comment for the card

add_pbar(pid, mid, A=0.0, i1=0.0, i2=0.0, i12=0.0, j=0.0, nsm=0.0, c1=0.0, c2=0.0, d1=0.0, d2=0.0, e1=0.0, e2=0.0, f1=0.0, f2=0.0, k1=100000000.0, k2=100000000.0, comment='') → pyNastran.bdf.cards.properties.bars.PBAR

Creates a PBAR card

Parameters
pidint

property id

midint

material id

areafloat

area

i1, i2, i12, jfloat

moments of inertia

nsmfloat; default=0.

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2float

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2float; default=1.e8

Shear stiffness factor K in K*A*G for plane 1/2.

commentstr; default=’’

a comment for the card

add_pbarl(pid: int, mid: int, Type: str, dim: List[float], group: str = 'MSCBML0', nsm: float = 0.0, comment: str = '') → pyNastran.bdf.cards.properties.bars.PBARL

Creates a PBARL card, which defines A, I1, I2, I12, and J using dimensions rather than explicit values.

Parameters
pidint

property id

midint

material id

Typestr

type of the bar valid_types = {

ROD, TUBE, I, CHAN, T, BOX, BAR, CROSS, H, T1, I1, CHAN1, Z, CHAN2, T2, BOX1, HEXA, HAT, HAT1, DBOX

}

dimList[float]

dimensions for cross-section corresponding to Type; the length varies

groupstr default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

nsmfloat; default=0.

non-structural mass

commentstr; default=’’

a comment for the card

The shear center and neutral axis do not coincide when:
  • Type = I and dim2 != dim3

  • Type = CHAN, CHAN1, CHAN2

  • Type = T

  • Type = T1, T2

  • Type = BOX1

  • Type = HAT, HAT1

  • Type = DBOX

add_pbcomp(pid, mid, y, z, c, mids, area=0.0, i1=0.0, i2=0.0, i12=0.0, j=0.0, nsm=0.0, k1=1.0, k2=1.0, m1=0.0, m2=0.0, n1=0.0, n2=0.0, symopt=0, comment='') → pyNastran.bdf.cards.properties.beam.PBCOMP

Creates a PBCOMP card

Parameters
pidint

Property ID

midint

Material ID

midsList[int]

Material ID for the i-th integration point

y / zList[float]

The (y,z) coordinates of the lumped areas in the element coordinate system

cList[float]; default=0.0

Fraction of the total area for the i-th lumped area default not supported…

areafloat

Area of beam cross section

i1 / i2float; default=0.0

Area moment of inertia about plane 1/2 about the neutral axis

i12float; default=0.0

area product of inertia

jfloat; default=0.0

Torsional moment of interia

nsmfloat; default=0.0

Nonstructural mass per unit length

k1 / k2float; default=1.0

Shear stiffness factor K in K*A*G for plane 1/2

m1 / m2float; default=0.0

The (y,z) coordinates of center of gravity of nonstructural mass

n1 / n2float; default=0.0

The (y,z) coordinates of neutral axis

symoptint; default=0

Symmetry option to input lumped areas for the beam cross section 0 < Integer < 5

commentstr; default=’’

a comment for the card

add_pbeam(pid, mid, xxb, so, area, i1, i2, i12, j, nsm=None, c1=None, c2=None, d1=None, d2=None, e1=None, e2=None, f1=None, f2=None, k1=1.0, k2=1.0, s1=0.0, s2=0.0, nsia=0.0, nsib=None, cwa=0.0, cwb=None, m1a=0.0, m2a=0.0, m1b=None, m2b=None, n1a=0.0, n2a=0.0, n1b=None, n2b=None, comment='') → pyNastran.bdf.cards.properties.beam.PBEAM

Todo

fix 0th entry of self.so, self.xxb

Creates a PBEAM card

Parameters
pidint

property id

midint

material id

xxbList[float]

The percentage locations along the beam [0., …, 1.]

soList[str]

YES, YESA, NO

areaList[float]

area

i1, i2, i12, jList[float]

moments of inertia

nsmList[float]; default=None -> [0.]*nxxb

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2List[float]; default=None -> [0.]*nxxb

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2float; default=1.

Shear stiffness factor K in K*A*G for plane 1/2.

s1 / s2float; default=0.

Shear relief coefficient due to taper for plane 1/2.

nsia / nsiafloat; default=0. / nsia

non structural mass moment of inertia per unit length about nsm center of gravity at Point A/B.

cwa / cwbfloat; default=0. / cwa

warping coefficient for end A/B.

m1a / m2afloat; default=0. / 0.

y/z coordinate of center of gravity of nonstructural mass for end A.

m1b / m2bfloat; default=m1a / m2a

y/z coordinate of center of gravity of nonstructural mass for end B.

n1a / n2afloat; default=0. / 0.

y/z coordinate of neutral axis for end A.

n1b / n2bfloat; default=n1a / n2a

y/z coordinate of neutral axis for end B.

commentstr; default=’’

a comment for the card

add_pbeam3(pid, mid, A, iz, iy, iyz=0.0, j=None, nsm=0.0, cy=0.0, cz=0.0, dy=0.0, dz=0.0, ey=0.0, ez=0.0, fy=0.0, fz=0.0, comment='') → pyNastran.bdf.cards.properties.bars.PBEAM3

Creates a PBEAM3 card

add_pbeaml(pid: int, mid: int, beam_type: str, xxb: List[float], dims: List[List[float]], so=None, nsm=None, group: str = 'MSCBML0', comment: str = '') → pyNastran.bdf.cards.properties.beam.PBEAML

Creates a PBEAML card

Parameters
pidint

property id

midint

material id

beam_typestr

the section profile

xxbList[float]

The percentage locations along the beam [0., …, 1.]

dimsList[dim]
dimList[float]

The dimensions for each section

soList[str]; default=None

YES, YESA, NO None : [0.] * len(xxb)

nsmList[float]; default=None

nonstructural mass per unit length None : [0.] * len(xxb)

groupstr; default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

commentstr; default=’’

a comment for the card

add_pbend(pid, mid, beam_type, A, i1, i2, j, c1, c2, d1, d2, e1, e2, f1, f2, k1, k2, nsm, rc, zc, delta_n, fsi, rm, t, p, rb, theta_b, comment='') → pyNastran.bdf.cards.properties.bars.PBEND

Creates a PBEND card

add_pbmsect(pid, mid, form, options, comment='') → pyNastran.bdf.cards.properties.beam.PBMSECT

Creates a PBMSECT card

add_pbrsect(pid, mid, form, options, comment='') → pyNastran.bdf.cards.properties.bars.PBRSECT

Creates a PBRSECT card

add_pbush(pid, k, b, ge, rcv=None, mass=None, comment='') → pyNastran.bdf.cards.properties.bush.PBUSH

Creates a PBUSH card, which defines a property for a CBUSH

Parameters
pidint

property id

kList[float]

Nominal stiffness values in directions 1 through 6. len(k) = 6

bList[float]

Nominal damping coefficients in direction 1 through 6 in units of force per unit velocity len(b) = 6

geList[float]

Nominal structural damping constant in directions 1 through 6. len(ge) = 6

rcvList[float]; default=None -> (None, None, None, None)

[sa, st, ea, et] = rcv length(rcv) = 4

massfloat; default=None

lumped mass of the CBUSH This is an MSC only parameter.

commentstr; default=’’

a comment for the card

add_pbush1d(pid: int, k: float = 0.0, c: float = 0.0, m: float = 0.0, sa: float = 0.0, se: float = 0.0, optional_vars=None, comment: str = '') → pyNastran.bdf.cards.properties.bush.PBUSH1D

Creates a PBUSH1D card

add_pbusht(pid: int, k_tables: List[int], b_tables: List[int], ge_tables: List[int], kn_tables: List[int], comment: str = '') → pyNastran.bdf.cards.properties.bush.PBUSHT

Creates a PBUSHT card

add_pcomp(pid, mids, thicknesses, thetas=None, souts=None, nsm=0.0, sb=0.0, ft=None, tref=0.0, ge=0.0, lam=None, z0=None, comment='') → pyNastran.bdf.cards.properties.shell.PCOMP

Creates a PCOMP card

Parameters
pidint

property id

midsList[int, …, int]

material ids for each ply

thicknessesList[float, …, float]

thicknesses for each ply

thetasList[float, …, float]; default=None

ply angle None : [0.] * nplies

soutsList[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsmfloat; default=0.

nonstructural mass per unit area

sbfloat; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ftstr; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

treffloat; default=0.

reference temperature

gefloat; default=0.

structural damping

lamstr; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

commentstr; default=’’

a comment for the card

add_pcompg(pid, global_ply_ids, mids, thicknesses, thetas=None, souts=None, nsm=0.0, sb=0.0, ft=None, tref=0.0, ge=0.0, lam=None, z0=None, comment='') → pyNastran.bdf.cards.properties.shell.PCOMPG

Creates a PCOMPG card

Parameters
pidint

property id

global_ply_idsList[int]

the ply id

midsList[int, …, int]

material ids for each ply

thicknessesList[float, …, float]

thicknesses for each ply

thetasList[float, …, float]; default=None

ply angle None : [0.] * nplies

soutsList[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsmfloat; default=0.

nonstructural mass per unit area

sbfloat; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ftstr; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

treffloat; default=0.

reference temperature

gefloat; default=0.

structural damping

lamstr; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

commentstr; default=’’

a comment for the card

add_pcomps(pid, global_ply_ids, mids, thicknesses, thetas, cordm=0, psdir=13, sb=None, nb=None, tref=0.0, ge=0.0, failure_theories=None, interlaminar_failure_theories=None, souts=None, comment='') → pyNastran.bdf.cards.properties.solid.PCOMPS

Creates a PCOMPS card

add_pconeax(pid, mid1, t1=None, mid2=0, i=None, mid3=None, t2=None, nsm=0.0, z1=None, z2=None, phi=None, comment='') → pyNastran.bdf.cards.axisymmetric.axisymmetric.PCONEAX

Creates a PCONEAX card

add_pconv(pconid, mid=None, form=0, expf=0.0, ftype=0, tid=None, chlen=None, gidin=None, ce=0, e1=None, e2=None, e3=None, comment='') → pyNastran.bdf.cards.thermal.thermal.PCONV

Creates a PCONV card

Parameters
pconidint

Convection property ID

midint; default=None

Material ID

formint; default=0

Type of formula used for free convection Must be {0, 1, 10, 11, 20, or 21}

expffloat; default=0.0

Free convection exponent as implemented within the context of the particular form that is chosen

ftypeint; default=0

Formula type for various configurations of free convection

tidint; default=None

Identification number of a TABLEHT entry that specifies the two variable tabular function of the free convection heat transfer coefficient

chlenfloat; default=None

Characteristic length

gidinint; default=None

Grid ID of the referenced inlet point

ceint; default=0

Coordinate system for defining orientation vector.

e1 / e2 / e3List[float]; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1

commentstr; default=’’

a comment for the card

add_pconvm(pconid, mid, coef, form=0, flag=0, expr=0.0, exppi=0.0, exppo=0.0, comment='') → pyNastran.bdf.cards.thermal.thermal.PCONVM

Creates a PCONVM card

Parameters
pconidint

Convection property ID

mid: int

Material ID

coef: float

Constant coefficient used for forced convection

form: int; default=0

Type of formula used for free convection Must be {0, 1, 10, 11, 20, or 21}

flag: int; default=0

Flag for mass flow convection

expr: float; default=0.0

Reynolds number convection exponent

exppi: float; default=0.0

Prandtl number convection exponent for heat transfer into the working fluid

exppo: float; default=0.0

Prandtl number convection exponent for heat transfer out of the working fluid

commentstr; default=’’

a comment for the card

add_pdamp(pid: int, b: float, comment: str = '') → pyNastran.bdf.cards.properties.damper.PDAMP

Creates a PDAMP card

add_pdamp5(pid: int, mid: int, b: float, comment: str = '') → pyNastran.bdf.cards.properties.damper.PDAMP5

Creates a PDAMP5 card

add_pdampt(pid: int, tbid: int, comment: str = '') → pyNastran.bdf.cards.properties.damper.PDAMPT

Creates a PDAMPT card

add_pelas(pid: int, k: float, ge: float = 0.0, s: float = 0.0, comment: str = '') → pyNastran.bdf.cards.properties.springs.PELAS

Creates a PELAS card

Parameters
pidint

property id

kfloat

spring stiffness

geint; default=0.0

damping coefficient

sfloat; default=0.0

stress coefficient

commentstr; default=’’

a comment for the card

add_pelast(pid: int, tkid: int = 0, tgeid: int = 0, tknid: int = 0, comment: str = '') → pyNastran.bdf.cards.properties.springs.PELAST

Creates a PELAST card

Parameters
pidint

property id

tkidfloat

TABLEDx that defines k vs. frequency

tgeidint; default=0

TABLEDx that defines ge vs. frequency

sfloat; default=0.

TABLEDx that defines force vs. displacement

commentstr; default=’’

a comment for the card

add_pfast(pid, d, kt1, kt2, kt3, mcid=-1, mflag=0, kr1=0.0, kr2=0.0, kr3=0.0, mass=0.0, ge=0.0, comment='') → pyNastran.bdf.cards.properties.properties.PFAST

Creates a PAST card

Parameters
pidint

property id

dint

diameter of the fastener

kt1, kt2, kt3float

stiffness values in directions 1-3

mcidint; default=01

specifies the element stiffness coordinate system

mflagint; default=0

0-absolute; 1-relative

kr1, kr2, kr3float; default=0.0

rotational stiffness values in directions 1-3

massfloat; default=0.0

lumped mass of the fastener

gefloat; default=0.0

structural damping

commentstr; default=’’

a comment for the card

add_pgap(pid: int, u0: float = 0.0, f0: float = 0.0, ka: float = 100000000.0, kb: Optional[float] = None, mu1: float = 0.0, kt: Optional[float] = None, mu2: Optional[float] = None, tmax: float = 0.0, mar: float = 100.0, trmin: float = 0.001, comment: str = '') → pyNastran.bdf.cards.properties.properties.PGAP

Defines the properties of the gap element (CGAP entry).

Parameters
pidint

property id for a CGAP

u0float; default=0.

Initial gap opening

f0float; default=0.

Preload

kafloat; default=1.e8

Axial stiffness for the closed gap

kbfloat; default=None -> 1e-14 * ka

Axial stiffness for the open gap

mu1float; default=0.

Coefficient of static friction for the adaptive gap element or coefficient of friction in the y transverse direction for the nonadaptive gap element

ktfloat; default=None -> mu1*ka

Transverse stiffness when the gap is closed

mu2float; default=None -> mu1

Coefficient of kinetic friction for the adaptive gap element or coefficient of friction in the z transverse direction for the nonadaptive gap element

tmaxfloat; default=0.

Maximum allowable penetration used in the adjustment of penalty values. The positive value activates the penalty value adjustment

marfloat; default=100.

Maximum allowable adjustment ratio for adaptive penalty values KA and KT

trminfloat; default=0.001

Fraction of TMAX defining the lower bound for the allowable penetration

commentstr; default=’’

a comment for the card

add_phbdy(pid, af=None, d1=None, d2=None, comment='') → pyNastran.bdf.cards.thermal.thermal.PHBDY

Creates a PHBDY card

Parameters
eidint

element id

pidint

property id

afint

Area factor of the surface used only for CHBDYP element Must be {POINT, LINE, TUBE, ELCYL} TUBE : constant thickness of hollow tube

d1, d2float; default=None

Diameters associated with the surface Used with CHBDYP [ELCYL, TUBE, FTUBE] surface elements

commentstr; default=’’

a comment for the card

add_pihex(pid, mid, cordm=0, integ=None, stress=None, isop=None, fctn='SMECH', comment='') → pyNastran.bdf.cards.properties.solid.PIHEX

See also

PSOLID

add_pload(sid, pressure, nodes, comment='') → pyNastran.bdf.cards.loads.static_loads.PLOAD

Creates a PLOAD card, which defines a uniform pressure load on a shell/solid face or arbitrarily defined quad/tri face

Parameters
sidint

load id

pressurefloat

the pressure to apply

nodesList[int]

The nodes that are used to define the normal are defined using the same method as the CTRIA3/CQUAD4 normal. n = 3 or 4

commentstr; default=’’

a comment for the card

add_pload1(sid, eid, load_type, scale, x1, p1, x2=None, p2=None, comment='') → pyNastran.bdf.cards.loads.static_loads.PLOAD1

Creates a PLOAD1 card, which may be applied to a CBAR/CBEAM

Parameters
sidint

load id

eidint

element to apply the load to

load_typestr

type of load that’s applied valid_types = {FX, FY, FZ, FXE, FYE, FZE,

MX, MY, MZ, MXE, MYE, MZE}

scalestr

Determines scale factor for X1, X2. {LE, FR, LEPR, FRPR}

x1 / x2float / float

the starting/end position for the load application the default for x2 is x1

p1 / p2float / float

the magnitude of the load at x1 and x2 the default for p2 is p1

commentstr; default=’’

a comment for the card

Point Loadx1 == x2
Distributed Loadx1 != x2
add_pload2(sid, pressure, eids, comment='') → pyNastran.bdf.cards.loads.static_loads.PLOAD2

Creates a PLOAD2 card, which defines an applied load normal to the quad/tri face

Parameters
sidint

load id

pressurefloat

the pressure to apply to the elements

eidsList[int]

the elements to apply pressure to n < 6 or a continouus monotonic list of elements (e.g., [1, 2, …, 1000])

commentstr; default=’’

a comment for the card

add_pload4(sid, eids, pressures, g1=None, g34=None, cid=0, nvector=None, surf_or_line='SURF', line_load_dir='NORM', comment='') → pyNastran.bdf.cards.loads.static_loads.PLOAD4

Creates a PLOAD4 card

Parameters
sidint

the load id

eidsList[int, …]

shells : the range of element ids; must be sequential solids : must be length 1

pressuresList[float, float, float, float]

tri : must be length 4 (the last value should be the same as the 0th value) quad : must be length 4

g1int/None

only used for solid elements

g34int / None

only used for solid elements

cidint; default=0

the coordinate system for ???

nvector(3, ) float ndarray

blank : load acts normal to the face the local pressure vector

surf_or_linestr; default=’SURF’

SURF : surface load LINE : line load (only defined for QUADR, TRIAR) not supported

line_load_dirstr; default=’NORM’

direction of the line load (see surf_or_line); {X, Y, Z, TANG, NORM} not supported

commentstr; default=’’

a comment for the card

TODO: fix the way “pressures” works
add_ploadx1(sid, eid, pa, nids, pb=None, theta=0.0, comment='') → pyNastran.bdf.cards.axisymmetric.loads.PLOADX1

Creates a PLOADX1 card, which defines surface traction for axisymmetric elements.

Parameters
sidint

load id

eidint

element id (CQUADX, CTRIAX, or CTRIAX6)

nidsList[int, int]

Corner grid points. GA and GB are any two adjacent corner grid points of the element

pa / pbfloat / None

Surface traction at grid point GA or GB pb : default is None -> pa

thetafloat; default=0.0

Angle between surface traction and inward normal to the line segment.

commentstr; default=’’

a comment for the card

add_plotel(eid: int, nodes: List[int], comment: str = '') → pyNastran.bdf.cards.elements.elements.PLOTEL

Adds a PLOTEL card

Parameters
eidint

Element ID

nodesList[int, int]

Unique GRID point IDs

commentstr; default=’’

a comment for the card

add_plplane(pid, mid, cid=0, stress_strain_output_location='GRID', comment='') → pyNastran.bdf.cards.properties.shell.PLPLANE

Creates a PLPLANE card

add_plsolid(pid, mid, stress_strain='GRID', ge=0.0, comment='') → pyNastran.bdf.cards.properties.solid.PLSOLID

Creates a PLSOLID card

Parameters
pidint

property id

midint

material id

stress_strainstr

Location of stress and strain output valid types = {GRID, GAUSS}

gefloat; default=0.

damping coefficient

commentstr; default=’’

a comment for the card

add_pmass(pid: int, mass: float, comment: str = '') → pyNastran.bdf.cards.properties.mass.PMASS

Creates an PMASS card, which defines a mass applied to a single DOF

Parameters
pidint

Property id used by a CMASS1/CMASS3 card

massfloat

the mass to apply

commentstr; default=’’

a comment for the card

add_point(nid: int, xyz: Any, cp: int = 0, comment: str = '') → pyNastran.bdf.cards.nodes.POINT

Creates the POINT card

Parameters
nidint

node id

xyz(3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cpint; default=0

coordinate system for the xyz location

commentstr; default=’’

a comment for the card

add_pointax(nid, ringax, phi, comment='') → pyNastran.bdf.cards.axisymmetric.axisymmetric.POINTAX

Creates a POINTAX card

add_pplane(pid: int, mid: int, t: float = 0.0, nsm: float = 0.0, formulation_option: int = 0, comment: str = '') → pyNastran.bdf.cards.properties.shell.PPLANE

Creates a PPLANE card

add_prac2d(pid, mid, thick, iplane, nsm=0.0, gamma=0.5, phi=180.0, comment='') → pyNastran.bdf.cards.properties.properties.PRAC2D

Creates a PRAC2D card

add_prac3d(pid, mid, gamma=0.5, phi=180.0, comment='') → pyNastran.bdf.cards.properties.properties.PRAC3D

Creates a PRAC3D card

add_presax(sid, pressure, rid1, rid2, phi1=0.0, phi2=360.0, comment='') → pyNastran.bdf.cards.axisymmetric.loads.PRESAX

Creates a PRESAX card

add_prod(pid: int, mid: int, A: float, j: float = 0.0, c: float = 0.0, nsm: float = 0.0, comment: str = '') → pyNastran.bdf.cards.properties.rods.PROD

Creates a PROD card

Parameters
pidint

property id

midint

material id

Afloat

area

Jfloat; default=0.

polar moment of inertia

cfloat; default=0.

stress factor

nsmfloat; default=0.

nonstructural mass per unit length

commentstr; default=’’

a comment for the card

add_pset(idi, poly1, poly2, poly3, cid, typei, typeids, comment='') → pyNastran.bdf.cards.parametric.geometry.PSET

PSET ID POLY1 POLY2 POLY3 CID SETTYP ID

add_pshear(pid: int, mid: int, t: float, nsm: float = 0.0, f1: float = 0.0, f2: float = 0.0, comment: str = '') → pyNastran.bdf.cards.properties.shell.PSHEAR

Creates a PSHEAR card

Parameters
pidint

property id

midint

material id

tfloat

shear panel thickness

nsmfloat; default=0.

nonstructural mass per unit length

f1float; default=0.0

Effectiveness factor for extensional stiffness along edges 1-2 and 3-4

f2float; default=0.0

Effectiveness factor for extensional stiffness along edges 2-3 and 1-4

commentstr; default=’’

a comment for the card

add_pshell(pid, mid1=None, t=None, mid2=None, twelveIt3=1.0, mid3=None, tst=0.833333, nsm=0.0, z1=None, z2=None, mid4=None, comment='') → pyNastran.bdf.cards.properties.shell.PSHELL

Creates a PSHELL card

Parameters
pidint

property id

mid1int; default=None

defines membrane material defines element density (unless blank)

mid2int; default=None

defines bending material defines element density if mid1=None

mid3int; default=None

defines transverse shear material

mid4int; default=None

defines membrane-bending coupling material

twelveIt3float; default=1.0

Bending moment of inertia ratio, 12I/T^3. Ratio of the actual bending moment inertia of the shell, I, to the bending moment of inertia of a homogeneous shell, T^3/12. The default value is for a homogeneous shell.

nsmfloat; default=0.0

non-structural mass per unit area

z1 / z2float; default=None

fiber distance location 1/2 for stress/strain calculations z1 default : -t/2 if thickness is defined z2 default : t/2 if thickness is defined

commentstr; default=’’

a comment for the card

add_psolid(pid, mid, cordm=0, integ=None, stress=None, isop=None, fctn='SMECH', comment='') → pyNastran.bdf.cards.properties.solid.PSOLID

Creates a PSOLID card

Parameters
pidint

property id

midint

material id

cordmint; default=0

material coordinate system

integint; default=None

None-varies depending on element type 0, ‘BUBBLE’ 1, ‘GAUSS’ 2, ‘TWO’ 3, ‘THREE’ REDUCED FULL

stressint/str; default=None

None/GRID, 1-GAUSS

isopint/str; default=None

0-REDUCED 1-FULL

fctnstr; default=’SMECH’

PFLUID/SMECH

commentstr; default=’’

a comment for the card

add_ptube(pid, mid, OD1, t=None, nsm=0.0, OD2=None, comment='') → pyNastran.bdf.cards.properties.rods.PTUBE

Adds a PTUBE card

Parameters
pidint

property id

midint

material id

OD1float

outer diameter at End A

tfloat; default=None -> OD1/2.

thickness

nsmfloat; default=0.

non-structural mass per unit length

OD2float; default=None -> OD1

outer diameter at End B

commentstr; default=’’

a comment for the card

add_pval(idi, poly1, poly2, poly3, cid, typei, typeids, comment='') → pyNastran.bdf.cards.parametric.geometry.PVAL

PVAL ID POLY1 POLY2 POLY3 CID SETTYP ID

add_pvisc(pid, ce, cr, comment='') → pyNastran.bdf.cards.properties.damper.PVISC

Creates a PVISC card

Parameters
pidint

property id for a CVISC

cefloat

Viscous damping values for extension in units of force per unit velocity

crfloat

Viscous damping values for rotation in units of moment per unit velocity.

commentstr; default=’’

a comment for the card

add_qbdy1(sid, qflux, eids, comment='') → pyNastran.bdf.cards.thermal.loads.QBDY1

Creates a QBDY1 card

add_qbdy2(sid, eid, qfluxs, comment='') → pyNastran.bdf.cards.thermal.loads.QBDY2

Creates a QBDY1 card

add_qbdy3(sid, Q0, cntrlnd, eids, comment='') → pyNastran.bdf.cards.thermal.loads.QBDY3

Creates a QBDY3 card

Parameters
sidint

Load set identification number. (Integer > 0)

q0float; default=None

Magnitude of thermal flux vector into face

control_idint; default=0

Control point

eidsList[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

commentstr; default=’’

a comment for the card

add_qhbdy(sid, flag, q0, grids, af=None, comment='') → pyNastran.bdf.cards.thermal.loads.QHBDY

Creates a QHBDY card

Parameters
sidint

load id

flagstr

valid_flags = {POINT, LINE, REV, AREA3, AREA4, AREA6, AREA8}

q0float

Magnitude of thermal flux into face. Q0 is positive for heat into the surface

affloat; default=None

Area factor depends on type

gridsList[int]

Grid point identification of connected grid points

commentstr; default=’’

a comment for the card

add_qset(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.QSET, pyNastran.bdf.cards.bdf_sets.QSET1]

Creates a QSET/QSET1 card, which defines generalized degrees of freedom (q-set) to be used for dynamic reduction or component mode synthesis.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]; str

the degree of freedoms to be created (e.g., ‘1’, ‘123’) if a list is passed in, a QSET is made if a str is passed in, a QSET1 is made

commentstr; default=’’

a comment for the card

add_qset1(ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.QSET, pyNastran.bdf.cards.bdf_sets.QSET1]

See also

add_qset

add_qvect(sid, q0, eids, t_source=None, ce=0, vector_tableds=None, control_id=0, comment='') → pyNastran.bdf.cards.thermal.loads.QVECT

Creates a QVECT card

Parameters
sidint

Load set identification number. (Integer > 0)

q0float; default=None

Magnitude of thermal flux vector into face

t_sourcefloat; default=None

Temperature of the radiant source

ceint; default=0

Coordinate system identification number for thermal vector flux

vector_tabledsList[int/float, int/float, int/float]
vectorfloat; default=0.0

directional cosines in coordinate system CE) of the thermal vector flux

tabledint

TABLEDi entry identification numbers defining the components as a function of time

control_idint; default=0

Control point

eidsList[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

commentstr; default=’’

a comment for the card

add_qvol(sid, qvol, control_point, elements, comment='') → pyNastran.bdf.cards.thermal.loads.QVOL

Creates a QVOL card

add_radbc(nodamb, famb, cntrlnd, eids, comment='') → pyNastran.bdf.cards.thermal.radiation.RADBC

Creates a RADBC card

add_radm(radmid, absorb, emissivity, comment='') → pyNastran.bdf.cards.thermal.radiation.RADM

Creates a RADM card

add_randps(sid, j, k, x=0.0, y=0.0, tid=0, comment='') → pyNastran.bdf.cards.loads.random_loads.RANDPS

Creates a RANDPS card

Parameters
sidint

random analysis set id defined by RANDOM in the case control deck

jint

Subcase id of the excited load set

kint

Subcase id of the applied load set k > j

x / yfloat; default=0.0

Components of the complex number

tidint; default=0

TABRNDi id that defines G(F)

commentstr; default=’’

a comment for the card

add_randt1(sid, n, t0, tmax, comment='') → pyNastran.bdf.cards.loads.random_loads.RANDT1

Creates a RANDT1 card

Parameters
sidint

random analysis set id defined by RANDOM in the case control deck

nint

???

t0int

???

tmaxfloat

???

commentstr; default=’’

a comment for the card

add_rbar(eid, nids, cna, cnb, cma, cmb, alpha=0.0, comment='') → pyNastran.bdf.cards.elements.rigid.RBAR

Creates a RBAR element

Parameters
eidint

element id

nidsList[int, int]

node ids; connected grid points at ends A and B

cna / cnbstr

independent DOFs in ‘123456’

cma / cmbstr

dependent DOFs in ‘123456’

alphafloat; default=0.0

coefficient of thermal expansion

commentstr; default=’’

a comment for the card

add_rbar1(eid, nids, cb, alpha=0.0, comment='') → pyNastran.bdf.cards.elements.rigid.RBAR1

Creates an RBAR1 element

add_rbe1(eid, Gni, Cni, Gmi, Cmi, alpha=0.0, comment='') → pyNastran.bdf.cards.elements.rigid.RBE1

Creates an RBE1 element

Parameters
eidint

element id

GniList[int]

independent node ids

CniList[str]

the independent components (e.g., ‘123456’)

GmiList[int]

dependent node ids

CmiList[str]

the dependent components (e.g., ‘123456’)

alphafloat; default=0.

thermal expansion coefficient

commentstr; default=’’

a comment for the card

add_rbe2(eid, gn, cm, Gmi, alpha=0.0, comment='') → pyNastran.bdf.cards.elements.rigid.RBE2

Creates an RBE2 element

Parameters
eidint

element id

gnint

Identification number of grid point to which all six independent degrees-of-freedom for the element are assigned.

cmstr

Component numbers of the dependent degrees-of-freedom in the global coordinate system at grid points GMi.

GmiList[int]

dependent nodes

alphafloat; default=0.0

thermal expansion coefficient

add_rbe3(eid, refgrid, refc, weights, comps, Gijs, Gmi=None, Cmi=None, alpha=0.0, comment='') → pyNastran.bdf.cards.elements.rigid.RBE3

Creates an RBE3 element

Parameters
eidint

element id

refgridint

dependent node

refc - str

dependent components for refgrid???

GiJsList[int, …, int]

independent nodes

compsList[str, …, str]

independent components

weightsList[float, …, float]

independent weights for the importance of the DOF

GmiList[int, …, int]; default=None -> []

dependent nodes / UM Set

CmiList[str, …, str]; default=None -> []

dependent components / UM Set

alphafloat; default=0.0

thermal expansion coefficient

commentstr; default=’’

a comment for the card

add_rcross(sid, rtype1, id1, comp1, rtype2, id2, comp2, curid) → None
add_release(seid, comp, nids, comment='') → pyNastran.bdf.cards.superelements.RELEASE
add_rforce(sid, nid, scale, r123, cid=0, method=1, racc=0.0, mb=0, idrf=0, comment='') → pyNastran.bdf.cards.loads.loads.RFORCE

Creates an RFORCE card

add_rforce1(sid, nid, scale, group_id, cid=0, r123=None, racc=0.0, mb=0, method=2, comment='') → pyNastran.bdf.cards.loads.loads.RFORCE1

Creates an RFORCE1 card

Parameters
sidint

load set id

nidint

grid point through which the rotation vector acts

scalefloat

scale factor of the angular velocity in revolutions/time

r123List[float, float, float] / (3, ) float ndarray

rectangular components of the rotation vector R that passes through point G

raccint; default=0.0

???

mbint; default=0

Indicates whether the CID coordinate system is defined in the main Bulk Data Section (MB = -1) or the partitioned superelement Bulk Data Section (MB = 0). Coordinate systems referenced in the main Bulk Data Section are considered stationary with respect to the assembly basic coordinate system.

group_idint

Group identification number. The GROUP entry referenced in the GROUPID field selects the grid points to which the load is applied.

cidint; default=0

Coordinate system defining the components of the rotation vector.

methodint; default=2

Method used to compute centrifugal forces due to angular velocity.

commentstr; default=’’

a comment for the card

add_rgyro(sid, asynci, refrot, unit, speed_low, speed_high, speed, comment='') → None

Creates an RGYRO card

add_ringax(nid, R, z, ps=None, comment='') → pyNastran.bdf.cards.axisymmetric.axisymmetric.RINGAX

Creates a RINGAX card

add_rload1(sid, excite_id, delay=0, dphase=0, tc=0, td=0, Type='LOAD', comment='') → pyNastran.bdf.cards.loads.dloads.RLOAD1

Creates an RLOAD1 card, which defienes a frequency-dependent load based on TABLEDs.

Parameters
sidint

load id

excite_idint

node id where the load is applied

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

dphaseint/float; default=None

the dphase; if it’s 0/blank there is no phase lag float : delay in units of time int : delay id

tcint/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

tdint/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

commentstr; default=’’

a comment for the card

add_rload2(sid, excite_id, delay=0, dphase=0, tb=0, tp=0, Type='LOAD', comment='') → pyNastran.bdf.cards.loads.dloads.RLOAD2

Creates a nRLOAD2 card, which defienes a frequency-dependent load based on TABLEDs.

Parameters
sidint

load id

excite_idint

node id where the load is applied

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

dphaseint/float; default=None

the dphase; if it’s 0/blank there is no phase lag float : delay in units of time int : delay id

tbint/float; default=0

TABLEDi id that defines B(f) for all degrees of freedom in EXCITEID entry

tcint/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

tdint/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

tpint/float; default=0

TABLEDi id that defines phi(f) for all degrees of freedom in EXCITEID entry

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

commentstr; default=’’

a comment for the card

add_rotord(sid, rstart, rstep, numstep, rids, rsets, rspeeds, rcords, w3s, w4s, rforces, brgsets, refsys='ROT', cmout=0.0, runit='RPM', funit='RPM', zstein='NO', orbeps=1e-06, roprt=0, sync=1, etype=1, eorder=1.0, threshold=0.02, maxiter=10, comment='') → pyNastran.bdf.cards.dynamic.ROTORD

Creates a ROTORD card

add_rotorg(sid, nids, comment='') → pyNastran.bdf.cards.dynamic.ROTORG

Creates a ROTORG card

add_rrod(eid, nids, cma='', cmb='', alpha=0.0, comment='') → pyNastran.bdf.cards.elements.rigid.RROD

Creates a RROD element

Parameters
eidint

element id

nidsList[int, int]

node ids; connected grid points at ends A and B

cma / cmbstr; default=’’

dependent DOFs

alphafloat; default=0.0

coefficient of thermal expansion

commentstr; default=’’

a comment for the card

add_rspint(rid, grida, gridb, gr, unit, table_id, comment='') → None

Creates an RSPINT card

add_rspline(eid, independent_nid, dependent_nids, dependent_components, diameter_ratio=0.1, comment='') → pyNastran.bdf.cards.elements.rigid.RSPLINE

Creates an RSPLINE card, which uses multipoint constraints for the interpolation of displacements at grid points

Parameters
eidint

element id

independent_nidint

the independent node id

dependent_nidsList[int]

the dependent node ids

dependent_componentsList[str]

Components to be constrained

diameter_ratiofloat; default=0.1

Ratio of the diameter of the elastic tube to the sum of the lengths of all segments

commentstr; default=’’

a comment for the card

add_rsscon(eid, rigid_type, shell_eid=None, solid_eid=None, a_solid_grids=None, b_solid_grids=None, shell_grids=None, comment='') → pyNastran.bdf.cards.elements.rigid.RSSCON

Creates an RSSCON card, which defines multipoint constraints to model clamped connections of shell-to-solid elements.

Parameters
eidint

element id

rigid_typestr

GRID/ELEM

shell/solid_eidint; default=None

the shell/solid element id (if rigid_type=ELEM)

shell/solid_gridsList[int, int]; default=None

the shell/solid node ids (if rigid_type=GRID)

commentstr; default=’’

a comment for the card

add_sebndry(seid_a, seid_b, ids, comment='') → pyNastran.bdf.cards.superelements.SEBNDRY
add_sebset(seid, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.SEBSET, pyNastran.bdf.cards.bdf_sets.SEBSET1]

Creates an SEBSET/SEBSET1 card

add_sebset1(seid, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.SEBSET, pyNastran.bdf.cards.bdf_sets.SEBSET1]

See also

add_secset

add_sebulk(seid, superelement_type, rseid, method='AUTO', tol=1e-05, loc='YES', unitno=None, comment='') → pyNastran.bdf.cards.superelements.SEBULK
add_seconct(seid_a: int, seid_b: int, tol: float, loc: str, nodes_a: List[int], nodes_b: List[int], comment: str = '') → pyNastran.bdf.cards.superelements.SECONCT
add_secset(seid, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.SECSET, pyNastran.bdf.cards.bdf_sets.SECSET1]

Creates an SECSET/SECSET1 card

add_secset1(seid, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.SECSET, pyNastran.bdf.cards.bdf_sets.SECSET1]

See also

add_secset

add_seelt(seid, ids, comment='') → pyNastran.bdf.cards.superelements.SEELT
add_seexcld(seid_a, seid_b, nodes, comment='') → pyNastran.bdf.cards.superelements.SEEXCLD
add_selabel(seid, label, comment='') → pyNastran.bdf.cards.superelements.SELABEL
add_seload(lid_s0, seid, lid_se, comment='') → pyNastran.bdf.cards.superelements.SELOAD
add_seloc(seid, nodes_seid, nodes0, comment='') → pyNastran.bdf.cards.superelements.SELOC

Creates an SELOC card, which transforms the superelement SEID from PA to PB. Basically, define two CORD1Rs.

Parameters
seidint

the superelement to transform

nodes_seidList[int, int, int]

the nodes in the superelement than define the resulting coordinate system

nodes0List[int, int, int]

the nodes in the superelement than define the starting coordinate system

commentstr; default=’’

a comment for the card

add_sempln(seid, p1, p2, p3, comment='') → pyNastran.bdf.cards.superelements.SEMPLN
add_senqset(set_id, n, comment='') → pyNastran.bdf.cards.superelements.SENQSET
add_seqgp(nids: List[int], seqids: List[Union[int, float]], comment: str = '') → pyNastran.bdf.cards.nodes.SEQGP

Creates the SEQGP card

Parameters
nidsint

the node ids

seqidint/float

the superelement id

commentstr; default=’’

a comment for the card

add_seqset(seid, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.SEQSET, pyNastran.bdf.cards.bdf_sets.SEQSET1]

Creates an SEQSET card

add_seqset1(seid, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.SEQSET, pyNastran.bdf.cards.bdf_sets.SEQSET1]

See also

add_secset

add_seset(seid, ids, comment='') → pyNastran.bdf.cards.bdf_sets.SESET

Creates an SEUSET card

add_sesup(nodes, Cs, comment='') → pyNastran.bdf.cards.constraints.SESUP

Creates an SESUP card

add_set1(sid, ids, is_skin=False, comment='') → pyNastran.bdf.cards.bdf_sets.SET1

Creates a SET1 card, which defines a list of structural grid points or element identification numbers.

Parameters
sidint

set id

idsList[int, str]

AECOMP, SPLINEx, PANEL : all grid points must exist XYOUTPUT : missing grid points are ignored The only valid string is THRU ids = [1, 3, 5, THRU, 10]

is_skinbool; default=False

if is_skin is used; ids must be empty

commentstr; default=’’

a comment for the card

add_set2(sid: int, macro: int, sp1: float, sp2: float, ch1: float, ch2: float, zmax: float = 0.0, zmin: float = 0.0, comment: str = '') → pyNastran.bdf.cards.bdf_sets.SET2

Creates a SET2 card, which defines a list of structural grid points in terms of aerodynamic macro elements.

Parameters
sidint

set id

macroint

the aerodynamic macro element id

sp1 / sp2float

lower/higher span division point defining the prism containing the set

ch1 / ch2float

lower/higher chord division point defining the prism containing the set

zmax / zminfloat; default=0.0/0.0

z-coordinate of top/bottom of the prism containing the set a zero value implies a value of infinity

commentstr; default=’’

a comment for the card

add_set3(sid: int, desc: str, ids: List[int], comment: str = '') → pyNastran.bdf.cards.bdf_sets.SET3

Creates a SET3 card

add_setree(seid, seids, comment='') → pyNastran.bdf.cards.superelements.SETREE
add_sload(sid, nids, mags, comment='') → pyNastran.bdf.cards.loads.loads.SLOAD

Creates an SLOAD (GRID/SPOINT load)

Parameters
sidint

load id

nidsint; List[int]

the GRID/SPOINT ids

magsfloat; List[float]

the load magnitude

commentstr; default=’’

a comment for the card

add_snorm(nid: int, normal: List[float], cid: int = 0, comment: str = '') → pyNastran.bdf.cards.elements.shell.SNORM
add_spc(conid, nodes, components, enforced, comment='') → pyNastran.bdf.cards.constraints.SPC

Creates an SPC card, which defines the degree of freedoms to be constrained

Parameters
conidint

constraint id

nodesList[int]

GRID/SPOINT ids

componentsList[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforcedList[float]

the constrained value for the given node (typically 0.0)

commentstr; default=’’

a comment for the card

Notes

len(nodes) == len(components) == len(enforced)

Warning

non-zero enforced deflection requires an SPCD as well

add_spc1(conid, components, nodes, comment='') → pyNastran.bdf.cards.constraints.SPC1

Creates an SPC1 card, which defines the degree of freedoms to be constrained to a value of 0.0

Parameters
conidint

constraint id

componentsstr

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

nodesList[int]

GRID/SPOINT ids

commentstr; default=’’

a comment for the card

add_spcadd(conid, sets, comment='') → pyNastran.bdf.cards.constraints.SPCADD

Creates a SPCADD card

add_spcax(conid, ringax, hid, component, enforced, comment='') → pyNastran.bdf.cards.constraints.SPCAX

Creates an SPCAX card

add_spcd(sid, nodes, components, enforced, comment='') → pyNastran.bdf.cards.loads.loads.SPCD

Creates an SPCD card, which defines the degree of freedoms to be set during enforced motion

Parameters
conidint

constraint id

nodesList[int]

GRID/SPOINT ids

componentsList[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforcedList[float]

the constrained value for the given node (typically 0.0)

commentstr; default=’’

a comment for the card

Notes

len(nodes) == len(components) == len(enforced)

Warning

Non-zero enforced deflection requires an SPC/SPC1 as well. Yes, you really want to constrain the deflection to 0.0 with an SPC1 card and then reset the deflection using an SPCD card.

add_spline1(eid: int, caero: int, box1: int, box2: int, setg: int, dz: float = 0.0, method: str = 'IPS', usage: str = 'BOTH', nelements: int = 10, melements: int = 10, comment: str = '') → pyNastran.bdf.cards.aero.aero.SPLINE1

Creates a SPLINE1, which defines a surface spline.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box1 / box2int

First/last box id that is used by the spline

setgint

SETx id that defines the list of GRID points that are used by the surface spline

dzfloat; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

methodstr; default=IPS

method for spline fit valid_methods = {IPS, TPS, FPS} IPS : Harder-Desmarais Infinite Plate Spline TPS : Thin Plate Spline FPS : Finite Plate Spline

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

nelementsint; default=10

The number of FE elements along the local spline x-axis if using the FPS option

melementsint; default=10

The number of FE elements along the local spline y-axis if using the FPS option

commentstr; default=’’

a comment for the card

add_spline2(eid: int, caero: int, id1, id2, setg: int, dz: float = 0.0, dtor: float = 1.0, cid: int = 0, dthx: float = 0.0, dthy: float = 0.0, usage: str = 'BOTH', comment: str = '') → pyNastran.bdf.cards.aero.aero.SPLINE2

Creates a SPLINE2 card, which defines a beam spline.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

id1 / id2int

First/last box/body id that is used by the spline

setgint

SETx id that defines the list of GRID points that are used by the beam spline

dzfloat; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

dtorfloat; default=1.0

Torsional flexibility ratio (EI/GJ). Use 1.0 for bodies (CAERO2).

cidint; default=0

Rectangular coordinate system for which the y-axis defines the axis of the spline. Not used for bodies, CAERO2

dthxfloat; default=None

Rotational attachment flexibility. DTHX : Used for rotation about the spline’s x-axis (in-plane

bending rotations). It is not used for bodies (CAERO2).

DTHYUsed for rotation about the spline’s y-axis (torsion).

It is used for slope of bodies.

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

commentstr; default=’’

a comment for the card

add_spline3(eid: int, caero: int, box_id: int, components: int, nodes: List[int], displacement_components: List[int], coeffs: List[float], usage: str = 'BOTH', comment: str = '') → pyNastran.bdf.cards.aero.aero.SPLINE3

Creates a SPLINE3 card, which is useful for control surface constraints.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box_idint

Identification number of the aerodynamic box number.

componentsint

The component of motion to be interpolated. 3, 5 (CAERO1) 2, 3, 5, 6 (CAERO2) 3 (CAERO3) 3, 5, 6 (CAERO4) 3, 5, 6 (CAERO5) 1, 2, 3, 5, 6 (3D Geometry) 2-lateral displacement 3-transverse displacement 5-pitch angle 6-relative control angle for CAERO4/5; yaw angle for CAERO2

nodesList[int]

Grid point identification number of the independent grid point.

displacement_componentsList[int]

Component numbers in the displacement coordinate system. 1-6 (GRIDs) 0 (SPOINTs)

coeffsList[float]

Coefficient of the constraint relationship.

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

commentstr; default=’’

a comment for the card

add_spline4(eid: int, caero: int, aelist: int, setg: int, dz: float, method: str, usage: str, nelements: int, melements: int, comment: str = '') → pyNastran.bdf.cards.aero.aero.SPLINE4

Creates a SPLINE4 card, which defines a curved Infinite Plate, Thin Plate, or Finite Plate Spline.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box1 / box2int

First/last box id that is used by the spline

setgint

SETx id that defines the list of GRID points that are used by the surface spline

dzfloat; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

methodstr; default=IPS

method for spline fit valid_methods = {IPS, TPS, FPS} IPS : Harder-Desmarais Infinite Plate Spline TPS : Thin Plate Spline FPS : Finite Plate Spline

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

nelements / melementsint; default=10

The number of FE elements along the local spline x/y-axis if using the FPS option

commentstr; default=’’

a comment for the card

add_spline5(eid, caero, aelist, setg, thx, thy, dz=0.0, dtor=1.0, cid=0, usage='BOTH', method='BEAM', ftype='WF2', rcore=None, comment='') → pyNastran.bdf.cards.aero.aero.SPLINE5

Creates a SPLINE5 card

add_spoint(ids: Union[int, List[int]], comment: str = '') → pyNastran.bdf.cards.nodes.SPOINTs

Creates the SPOINTs card that contains many SPOINTs

Parameters
idsList[int]

SPOINT ids

commentstr; default=’’

a comment for the card

add_suport(nodes, Cs, comment='') → pyNastran.bdf.cards.constraints.SUPORT

Creates a SUPORT card, which defines free-body reaction points. This is always active.

Parameters
nodesList[int]

the nodes to release

CsList[str]

components to support at each node

commentstr; default=’’

a comment for the card

add_suport1(conid, nodes, Cs, comment='') → pyNastran.bdf.cards.constraints.SUPORT1

Creates a SUPORT card, which defines free-body reaction points.

Parameters
conidint

Case Control SUPORT id

nodesList[int]

the nodes to release

CsList[str]

components to support at each node

commentstr; default=’’

a comment for the card

add_tabdmp1(tid, x, y, Type='G', comment='') → pyNastran.bdf.cards.bdf_tables.TABDMP1

Creates a TABDMP1 card

add_tabled1(tid: int, x: numpy.ndarray, y: numpy.ndarray, xaxis: str = 'LINEAR', yaxis: str = 'LINEAR', extrap: int = 0, comment: str = '') → pyNastran.bdf.cards.bdf_tables.TABLED1

Creates a TABLED1, which is a dynamic load card that is applied by the DAREA card

Parameters
tidint

table id

xList[float]

nvalues

yList[float]

nvalues

xaxisstr

LINEAR, LOG

yaxisstr

LINEAR, LOG

extrapint; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

commentstr; default=’’

a comment for the card

add_tabled2(tid, x1, x, y, comment='') → pyNastran.bdf.cards.bdf_tables.TABLED2

Creates a TABLED2 card

add_tabled3(tid, x1, x2, x, y, comment='') → pyNastran.bdf.cards.bdf_tables.TABLED3

Creates a TABLED3 card

add_tabled4(tid, x1, x2, x3, x4, a, comment='') → pyNastran.bdf.cards.bdf_tables.TABLED4

Creates a TABLED4 card

add_tableh1(tid: int, x, y, comment: str = '') → pyNastran.bdf.cards.bdf_tables.TABLEH1
add_tableht(tid: int, x, y, comment: str = '') → pyNastran.bdf.cards.bdf_tables.TABLEHT
add_tablem1(tid, x, y, xaxis='LINEAR', yaxis='LINEAR', comment='') → pyNastran.bdf.cards.bdf_tables.TABLEM1

Creates a TABLEM1 card

add_tablem2(tid, x1, x, y, extrap=0, comment='') → pyNastran.bdf.cards.bdf_tables.TABLEM2

Creates a TABLEM2 card

add_tablem3(tid, x1, x2, x, y, extrap=0, comment='') → pyNastran.bdf.cards.bdf_tables.TABLEM3

Creates a TABLEM3 card

add_tablem4(tid, x1, x2, x3, x4, a, comment='') → pyNastran.bdf.cards.bdf_tables.TABLEM4

Creates a TABLEM4 card

add_tables1(tid: int, x: numpy.ndarray, y: numpy.ndarray, Type: int = 1, comment: str = '') → pyNastran.bdf.cards.bdf_tables.TABLES1

Adds a TABLES1 card, which defines a stress dependent material

Parameters
tidint

Table ID

Typeint; default=1

Type of stress-strain curve (1 or 2) 1 - Cauchy (true) stress vs. total true strain 2 - Cauchy (true) stress vs. plastic true strain (MSC only)

x, yList[float]

table values

commentstr; default=’’

a comment for the card

add_tablest(tid, x, y, comment='') → pyNastran.bdf.cards.bdf_tables.TABLEST

Creates an TABLEST card

add_tabrnd1(tid, x, y, xaxis='LINEAR', yaxis='LINEAR', comment='') → pyNastran.bdf.cards.bdf_tables.TABRND1

Creates an TABRND1 card

add_tabrndg(tid, Type, LU, WG, comment='') → pyNastran.bdf.cards.bdf_tables.TABRNDG

Creates a TABRNDG card

Parameters
tidint

table id

Typeint

PSD type 1 : von Karman 2 : Dryden

LUfloat

Scale of turbulence divided by velocity (units of time)

WGfloat

Root-mean-square gust velocity

commentstr; default=’’

a comment for the card

add_temp(sid, temperatures, comment='') → pyNastran.bdf.cards.thermal.loads.TEMP

Creates a TEMP card

Parameters
sidint

Load set identification number

temperaturesdict[nid]temperature
nidint

node id

temperaturefloat

the nodal temperature

commentstr; default=’’

a comment for the card

add_tempax(sid, ring, phi, temperature, comment='') → pyNastran.bdf.cards.axisymmetric.loads.TEMPAX

Creates a TEMPAX card

add_tempd(sid, temperature, comment='') → pyNastran.bdf.cards.thermal.loads.TEMPD

Creates a TEMPD card

Parameters
sidint

Load set identification number. (Integer > 0)

temperaturefloat

default temperature

commentstr; default=’’

a comment for the card

add_tf(sid, nid0, c, b0, b1, b2, nids, components, a, comment='') → pyNastran.bdf.cards.dynamic.TF

Creates a TF card

add_tic(sid, nodes, components, u0=0.0, v0=0.0, comment='') → pyNastran.bdf.cards.dynamic.TIC

Creates a TIC card

Parameters
sidint

Case Control IC id

nodesint / List[int]

the nodes to which apply the initial conditions

componentsint / List[int]

the DOFs to which apply the initial conditions

u0float / List[float]

Initial displacement.

v0float / List[float]

Initial velocity.

commentstr; default=’’

a comment for the card

add_tload1(sid, excite_id, tid, delay=0, Type='LOAD', us0=0.0, vs0=0.0, comment='') → pyNastran.bdf.cards.loads.dloads.TLOAD1

Creates a TLOAD1 card, which defienes a load based on a table

Parameters
sidint

load id

excite_idint

node id where the load is applied

tidint

TABLEDi id that defines F(t) for all degrees of freedom in EXCITEID entry float : MSC not supported

delayint/float; default=0

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

us0float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

commentstr; default=’’

a comment for the card

add_tload2(sid, excite_id, delay=0, Type='LOAD', T1=0.0, T2=None, frequency=0.0, phase=0.0, c=0.0, b=0.0, us0=0.0, vs0=0.0, comment='') → pyNastran.bdf.cards.loads.dloads.TLOAD2

Creates a TLOAD2 card, which defines a exponential time load

Parameters
sidint

load id

excite_idint

node id where the load is applied

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

T1float; default=0.

time constant (t1 > 0.0) times below this are ignored

T2float; default=None

time constant (t2 > t1) times above this are ignored

frequencyfloat; default=0.

Frequency in cycles per unit time.

phasefloat; default=0.

Phase angle in degrees.

cfloat; default=0.

Exponential coefficient.

bfloat; default=0.

Growth coefficient.

us0float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

commentstr; default=’’

a comment for the card

add_topvar(opt_id, label, ptype, xinit, pid, xlb=0.001, delxv=0.2, power=3.0) → pyNastran.bdf.cards.optimization.TOPVAR

adds a TOPVAR

add_trim(sid, mach, q, labels, uxs, aeqr=1.0, trim_type=1, comment='') → Union[pyNastran.bdf.cards.aero.static_loads.TRIM, pyNastran.bdf.cards.aero.static_loads.TRIM2]

Creates a TRIM/TRIM2 card for a static aero (144) analysis.

Parameters
sidint

the trim id; referenced by the Case Control TRIM field

machfloat

the mach number

qfloat

dynamic pressure

labelsList[str]

names of the fixed variables

uxsList[float]

values corresponding to labels

aeqrfloat

0.0 : rigid trim analysis 1.0 : elastic trim analysis (default)

trim_typeint

1 : creates a TRIM 2 : creates a TRIM2

commentstr; default=’’

a comment for the card

add_tstep(sid, N, DT, NO, comment='') → pyNastran.bdf.cards.dynamic.TSTEP

Creates a TSTEP card

add_tstep1(sid, tend, ninc, nout, comment='') → pyNastran.bdf.cards.dynamic.TSTEP1

Creates a TSTEP1 card

add_tstepnl(sid, ndt, dt, no, method='ADAPT', kstep=None, max_iter=10, conv='PW', eps_u=0.01, eps_p=0.001, eps_w=1e-06, max_div=2, max_qn=10, max_ls=2, fstress=0.2, max_bisect=5, adjust=5, mstep=None, rb=0.6, max_r=32.0, utol=0.1, rtol_b=20.0, min_iter=None, comment='') → pyNastran.bdf.cards.dynamic.TSTEPNL

Creates a TSTEPNL card

add_uset(name, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.USET, pyNastran.bdf.cards.bdf_sets.USET1]

Creates a USET card, which defines a degrees-of-freedom set.

Parameters
namestr

SNAME Set name. (One to four characters or the word ‘ZERO’ followed by the set name.)

idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms (e.g., ‘1’, ‘123’) if a list is passed in, a USET is made if a str is passed in, a USET1 is made

commentstr; default=’’

a comment for the card

add_uset1(name, ids, components, comment='') → Union[pyNastran.bdf.cards.bdf_sets.USET, pyNastran.bdf.cards.bdf_sets.USET1]

See also

add_uset

add_view(iview, icavity, shade='BOTH', nbeta=1, ngamma=1, dislin=0.0, comment='') → pyNastran.bdf.cards.thermal.radiation.VIEW

Creates a VIEW card

add_view3d(icavity, gitb=4, gips=4, cier=4, error_tol=0.1, zero_tol=1e-10, warp_tol=0.01, rad_check=3, comment='') → pyNastran.bdf.cards.thermal.radiation.VIEW3D

Creates a VIEW3D card

property caero_ids

gets the CAEROx ids

clear_attributes() → None

removes the attributes from the model

property coord_ids

gets the number of coordinate system ids

create_card_object(card_lines, card_name, is_list=True, has_none=True)

Creates a BDFCard object, which is really just a list that allows indexing past the last field

Parameters
card_lines: list[str]

the list of the card fields input is list of card_lines -> [‘GRID, 1, 2, 3.0, 4.0, 5.0’]

card_namestr

the card_name -> ‘GRID’

is_listbool; default=True

True : this is a list of fields False : this is a list of lines

has_nonebool; default=True

can there be trailing Nones in the card data (e.g. [‘GRID, 1, 2, 3.0, 4.0, 5.0, ‘])

Returns
card_objectBDFCard()

the card object representation of card

cardlist[str]

the card with empty fields removed

create_subcases(subcase_ids: Union[List[int], int, None] = None) → Dict[int, pyNastran.bdf.subcase.Subcase]

creates a series of subcases

cross_reference(xref: bool = True, xref_nodes: bool = True, xref_elements: bool = True, xref_nodes_with_elements: bool = False, xref_properties: bool = True, xref_masses: bool = True, xref_materials: bool = True, xref_loads: bool = True, xref_constraints: bool = True, xref_aero: bool = True, xref_sets: bool = True, xref_optimization: bool = True, word: str = '') → None

Links up all the cards to the cards they reference

Parameters
xrefbool; default=True

cross references the model

xref_nodesbool; default=True

set cross referencing of nodes/coords

xref_elementbool; default=True

set cross referencing of elements

xref_propertiesbool; default=True

set cross referencing of properties

xref_massesbool; default=True

set cross referencing of CMASS/PMASS

xref_materialsbool; default=True

set cross referencing of materials

xref_loadsbool; default=True

set cross referencing of loads

xref_constraintsbool; default=True

set cross referencing of constraints

xref_aerobool; default=True

set cross referencing of CAERO/SPLINEs

xref_setsbool; default=True

set cross referencing of SETx

wordstr; default=’’

model flag

To only cross-reference nodes:
.. code-block:: python

model = BDF() model.read_bdf(bdf_filename, xref=False) model.cross_reference(xref=True, xref_loads=False, xref_constraints=False,

xref_materials=False, xref_properties=False, xref_aero=False, xref_masses=False, xref_sets=False)

.. warning:: be careful if you call this method with False values
disable_cards(cards: Sequence[str]) → None

Method for removing broken cards from the reader

Parameters
cardsList[str]; Set[str]

a list/set of cards that should not be read

.. python:

bdf_model.disable_cards([‘DMIG’, ‘PCOMP’])

property dmigs
property dmijis
property dmijs
property dmiks
property dmis
property element_ids

gets the element ids

export_hdf5_file(hdf5_file, exporter=None) → None

Converts the BDF objects into hdf5 object

Parameters
hdf5_fileH5File()

an h5py object

exporterHDF5Exporter; default=None

unused

export_hdf5_filename(hdf5_filename: str) → None

Converts the BDF objects into hdf5 object

Parameters
hdf5_filenamestr

the path to the hdf5 file

TODO: doesn’t support:
  • BucklingEigenvalues

geom_check(geom_check: bool, xref: bool) → None

what about xref?

get_MPCx_node_ids(mpc_id: int, consider_mpcadd: bool = True, stop_on_failure: bool = True) → List[List[int]]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids(...)

get_MPCx_node_ids_c1(mpc_id: int, consider_mpcadd: bool = True, stop_on_failure: bool = True) → Tuple[Dict[str, List[int]], Dict[str, List[int]]]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids_c1(...)

get_SPCx_node_ids(spc_id: int, consider_spcadd: bool = True, stop_on_failure: bool = True) → List[int]

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters
spc_idint

the SPC id

stop_on_failurebool; default=True

errors if parsing something new

Returns
node_idsList[int]

the constrained associated node ids

get_SPCx_node_ids_c1(spc_id: int, stop_on_failure: bool = True) → Dict[str, List[int]]

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters
spc_idint

the SPC id

stop_on_failurebool; default=True

errors if parsing something new

Returns
node_ids_c1Dict[component] = node_ids
componentstr

the DOF to constrain

node_idsList[int]

the constrained node ids

get_area_breakdown(property_ids=None, stop_if_no_area=True, sum_bar_area=True)

gets a breakdown of the area by property region

TODO: What about CONRODs? #’PBRSECT’, #’PBCOMP’, #’PBMSECT’, #’PBEAM3’, #’PBEND’, #’PIHEX’, #’PCOMPS’,

sum_bar_areabool; default=True

sum the areas for CBAR/CBEAM/CROD/CONROD/CTUBE elements True : get the area of the model by property id False : only get the cross sectional properties

get_bdf_cards(bulk_data_lines: List[str], bulk_data_ilines: Optional[Any] = None) → Tuple[Any, Any, Any]

Parses the BDF lines into a list of card_lines

get_bdf_cards_dict(bulk_data_lines, bulk_data_ilines=None)

Parses the BDF lines into a list of card_lines

get_bdf_stats(return_type: str = 'string') → Union[str, List[str]]

Print statistics for the BDF

Parameters
return_typestr (default=’string’)
the output type (‘list’, ‘string’)

‘list’ : list of strings ‘string’ : single, joined string

Returns
return_datastr, optional

the output data

Note

if a card is not supported and not added to the proper lists, this method will fail

Todo

RBE3s from OP2s can show up as ???s ..

get_card_ids_by_card_types(card_types: Optional[List[str]] = None, reset_type_to_slot_map: bool = False, stop_on_missing_card: bool = False, combine: bool = False) → Dict[str, List[int]]
Parameters
card_typesstr / List[str] / default=None

the list of keys to consider (list of strings; string) None : all cards

reset_type_to_slot_mapbool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_cardbool

crashes if you request a card and it doesn’t exist

combinebool; default=False

change out_dict into out_list combine the list of cards

Returns
out_dict: dict[str]=List[ids]

the key=card_type, value=the ID of the card object

out_list: List[ids]

value=the ID of the card object useful

Examples

>>> out_dict = model.get_card_ids_by_card_types(
    card_types=['GRID', 'CTRIA3', 'CQUAD4'], combine=False)
>>> out_dict = {
    'GRID' : [1, 2, 10, 42, 1000],
    'CTRIA3' : [1, 2, 3, 5],
    'CQUAD4' : [4],
}

shell elements

>>> out_dict = model.get_card_ids_by_card_types(
    card_types=['CTRIA3', 'CQUAD4'], combine=True)
>>> out_dict = {
    [1, 2, 3, 4, 5],
}
get_cards_by_card_types(card_types: List[str], reset_type_to_slot_map: bool = False, stop_on_missing_card: bool = False) → None
Parameters
card_typesList[str]

the list of keys to consider

reset_type_to_slot_mapbool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_cardbool

crashes if you request a card and it doesn’t exist

Returns
out_dictdict[str] = List[BDFCard()]

the key=card_type, value=the card object

get_custom_types() → Dict[str, Any]

helper method for dict_to_h5py

get_dependent_nid_to_components(mpc_id=None, stop_on_failure=True)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_dependent_nid_to_components(...)

get_displacement_index() → Tuple[Any, Any, Dict[int, Any]]

Get index and transformation matricies for nodes with their output in coordinate systems other than the global. Used in combination with OP2.transform_displacements_to_global

Returns
nids_all(nnodes,) int ndarray

the GRID/SPOINT/EPOINT ids

nids_transformdict[cd](nnodesi,) int ndarray

the indicies in nids_all that correspond to cd > 0 cd : int

the CD coordinate system

nnodesiint

nnodesi <= nnodes

icd_transformdict{int cid(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their output (CD) in that coordinate system.

Examples

# assume GRID 1 has a CD=10 # assume GRID 2 has a CD=10 # assume GRID 5 has a CD=50 >>> model.point_ids [1, 2, 5] >>> icd_transform = model.get_displacement_index() >>> icd_transform[10] [0, 1]

>>> icd_transform[50]
[2]
get_displacement_index_xyz_cp_cd(fdtype: str = 'float64', idtype: str = 'int32', sort_ids: bool = True) → Any

Get index and transformation matricies for nodes with their output in coordinate systems other than the global. Used in combination with OP2.transform_displacements_to_global

Parameters
fdtypestr; default=’float64’

the type of xyz_cp

idtypestr; default=’int32’

the type of nid_cp_cd

sort_idsbool; default=True

sort the ids

Returns
icd_transformdict{int cd(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their output (CD) in that coordinate system.

icp_transformdict{int cp(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their input (CP) in that coordinate system.

xyz_cp(n, 3) float ndarray

points in the CP coordinate system

nid_cp_cd(n, 3) int ndarray

node id, CP, CD for each node

Examples

# assume GRID 1 has a CD=10, CP=0 # assume GRID 2 has a CD=10, CP=0 # assume GRID 5 has a CD=50, CP=0 >>> model.point_ids [1, 2, 5] >>> out = model.get_displacement_index_xyz_cp_cd() >>> icd_transform, icp_transform, xyz_cp, nid_cp_cd = out >>> nid_cp_cd [

[1, 0, 10], [2, 0, 10], [5, 0, 50],

] >>> icd_transform[10] [0, 1]

>>> icd_transform[50]
[2]
get_dload_entries(sid: int, msg: str = '') → Union[TLOAD1, TLOAD2, RLOAD1, RLOAD2]

gets the dload entries (e.g., TLOAD1, TLOAD2)

get_element_faces(element_ids: Optional[List[int]] = None, allow_blank_nids: bool = True) → Any

Gets the elements and faces that are skinned from solid elements. This includes internal faces, but not existing shells.

Parameters
element_idsList[int] / None

skin a subset of element faces default=None -> all elements

allow_blank_nidsbool; default=True

allows for nids to be None

Returns
eid_faces(int, List[(int, int, …)])

value1 : element id value2 : face

get_element_ids_dict_with_pids(pids: Union[List[int], int, None] = None, stop_if_no_eids: bool = True, msg: str = '') → Dict[int, List[int]]

Gets all the element IDs with a specific property ID.

Parameters
pidsList[int] / int

list of property ID

stop_if_no_eidsbool; default=True

prevents crashing if there are no elements setting this to False really doesn’t make sense for non-DMIG models

Returns
element_idsdict[pid] = List[eid]

dictionary of lists by property pid : int

property id

eidint

element id

For example, we want all the elements with pids=[4, 5, 6],
but we want them in separate groups

Notes

What happens with CONRODs?

get_element_ids_list_with_pids(pids: Optional[List[int]] = None) → List[int]

Gets all the element IDs with a specific property ID.

Parameters
pidsList[int]; default=None -> all

list of property ID

Returns
element_idsList[int]

the element ids

For example, we want to get all the element ids with pids=[1, 2, 3]
get_elements_nodes_by_property_type(dtype: str = 'int32', save_element_types: bool = False) → Tuple[Dict[Tuple[str, int], Tuple[List[int], List[int]]]]

Gets a dictionary of (etype, pid) to [eids, node_ids]

Parameters
dtypestr; default=’int32’

the type of the integers

save_element_typesbool; default=False

adds the etype_to_eids_pids_nids output

Returns
etype_pid_to_eids_nidsdict[(etype, pid)][eids, nids]
etypestr

the element type

pidint

the property id CONRODS have a pid of 0

eids(neids, ) int ndarray

the elements with the property id of pid

nids(neids, nnodes/element) int ndarray

the nodes corresponding to the element

etype_to_eids_pids_nidsdict[etype][eids, pids, nids]

Enabled by save_element_types; default=None etype : str

the element type

eids(neids, ) int ndarray

the elements with the property id of pid

pids(neids, ) int ndarray

the property ids CONRODS have a pid of 0

nids(neids, nnodes/element) int ndarray

the nodes corresponding to the element

get_elements_properties_nodes_by_element_type(dtype: str = 'int32', solids: Optional[Dict[str, Any]] = None, stop_if_no_eids: bool = True) → numpy.array

Gets a dictionary of element type to [eids, pids, node_ids]

Parameters
dtypestr; default=’int32’

the type of the integers

solidsdict[etype]value
etypestr

the element type should only be CTETRA, CHEXA, CPENTA, CPYRAM

valuevaries
(nnodes_min, nnodes_max)Tuple(int, int)

the min/max number of nodes for the element

(nnodes, )Tuple(int, )

the number of nodes useful if you only have CTETRA4s or only want CTETRA10s fails if you’re wrong (and too low)

Returns
etype_to_eids_pids_nidsdict[etype][eids, pids, nids]
etypestr

the element type

eids(neids, ) int ndarray

the elements with the property id of pid

pids(neids, ) int ndarray

the property ids CONRODS have a pid of 0

nids(neids, nnodes/element) int ndarray

the nodes corresponding to the element

get_encoding(encoding: Optional[str] = None) → str

gets the file encoding

get_h5attrs() → List[str]

helper method for dict_to_h5py

get_length_breakdown(property_ids=None, stop_if_no_length: bool = True)

gets a breakdown of the length by property region

TODO: What about CONRODs?

get_mass_breakdown(property_ids: Optional[int] = None, stop_if_no_mass: bool = True, detailed: bool = False) → Dict[int, float]

Gets a breakdown of the mass by property region.

Parameters
property_idsList[int] / int

list of property ID

stop_if_no_massbool; default=True

prevents crashing if there are no elements setting this to False really doesn’t make sense for non-DMIG models

detailedbool, optional, defaultFalse

Separates structural and nonstructural mass outputs.

Returns
pids_to_massdict {intfloat, …}

Map from property id to mass (structural mass only if detailed is True).

pids_to_mass_nonstructuraldict {intfloat, …}, optional

Map from property id to nonstructural mass (only if detailed is True).

mass_type_to_massdict {strfloat, …}

Map from mass id to mass for mass elements.

TODO: What about CONRODs, CONM2s?
#’PBCOMP’,
#’PBMSECT’,
#’PBEAM3’,
#’PBEND’,
#’PIHEX’,
#’PCOMPS’,
get_material_id_to_property_ids_map(msg: str = '') → Dict[int, List[int]]

Returns a dictionary that maps a material ID to a list of properties

Returns
mid_to_pids_mapdict[int] = int

the mapping

msgstr; default=’’

a message added to the error message

Note

all properties require an mid to be counted (except for PCOMP, which has multiple mids)

get_material_ids() → Iterable[int]

gets the material ids

get_mklist() → numpy.ndarray

gets the MKLIST vector from MKAERO1/MKAERO2

get_mpcs(mpc_id: int, consider_mpcadd: bool = True, stop_on_failure: bool = True) → Tuple[List[int], List[str]]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpcs(...)

get_nid_map(sort_ids: bool = True) → Dict[int, int]

Maps the GRID/SPOINT/EPOINT ids to a sorted/unsorted order.

Parameters
sort_idsbool; default=True

sort the ids

Returns
nid_mapDict[nid]i
nidint

the GRID/SPOINT/EPOINT id

iint

the index

..note: GRIDs, SPOINTs, & EPOINTs are stored in separate slots,

so they are unorganized.

get_node_id_to_element_ids_map() → Dict[int, List[int]]

Returns a dictionary that maps node IDs to a list of elemnent IDs

Todo

support 0d or 1d elements

Todo

support elements with missing nodes (e.g. CQUAD8 with missing nodes)

get_node_id_to_elements_map() → Dict[int, List[int]]

Returns a dictionary that maps node IDs to a list of elements.

Returns
nid_to_elements_mapDict[nid]=List[eid]

node id to a list of elements

Todo

support 0d or 1d elements ..

Todo

support elements with missing nodes (e.g. CQUAD8 with missing nodes)

get_node_ids_with_elements(eids: List[int], msg: str = '') → Set[int]

Get the node IDs associated with a list of element IDs

Parameters
eidsList[int]

list of element ID

msgstr

An additional message to print out if an element is not found

Returns
node_idsSet[int]

set of node IDs

For example::

eids = [1, 2, 3] # list of elements with pid=1 msg = ‘ which are required for pid=1’ node_ids = bdf.get_node_ids_with_elements(eids, msg=msg)

get_param(key: str, default: Union[int, float, str, List[float]]) → Union[int, float, str, List[float]]

gets a param card

get_pid_to_node_ids_and_elements_array(pids: Union[List[int], int, None] = None, etypes: Optional[List[str]] = None, idtype: str = 'int32', msg: str = '') → Tuple[Dict[int, str], numpy.ndarray]

a work in progress

Parameters
pidsList[int]

list of property ID

etypesList[str]

element types to consider

Returns
pid_to_eids_ieids_mapdict[(pid, etype)] = eid_ieid
eid_ieid(Nelements, 2) int ndarray

eid is the element id ieid is the index in the node_ids array

node_ids(nelements, nnodes) int ndarray
nelementsint

the number of elements in the property type

nnodesint

varies based on the element type

get_point_grids(nodes: List[Any], msg: str = '') → None

gets GRID, POINT cards

get_property_id_to_element_ids_map(msg: str = '') → Dict[int, List[int]]

Returns a dictionary that maps a property ID to a list of elements.

Returns
pid_to_eids_mapDict[pid]=List[eid]

property id to a list of elements

msgstr; default=’’

a message added to the error message

get_reduced_dloads(dload_id, scale=1.0, consider_dload_combinations=True, skip_scale_factor0=False, msg='')

Accounts for scale factors.

Parameters
dload_idint

the desired DLOAD id

consider_dload_combinationsbool; default=True

look at the DLOAD card

scalefloat; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0bool; default=False

Skip loads with scale factor=0.0. Nastran does not do this. Nastran will fail if referenced loads do not exist.

msgstr

debug message

Returns
dloadsList[loads]

a series of dload objects

scale_factorsList[float]

the associated scale factors

Warning

assumes xref=True ..

get_reduced_loads(load_case_id: int, scale: float = 1.0, consider_load_combinations: bool = True, skip_scale_factor0: bool = False, stop_on_failure: bool = True, msg: str = '')

Accounts for scale factors.

Parameters
load_case_idint

the desired LOAD id

consider_load_combinationsbool; default=True

look at the LOAD card

scalefloat; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0bool; default=False

Skip loads with scale factor=0.0. Nastran does not do this. Nastran will fail if referenced loads do not exist.

stop_on_failurebool; default=True

errors if parsing something new

msgstr

debug message

Returns
loadsList[loads]

a series of load objects

scale_factorsList[float]

the associated scale factors

is_gravbool

is there a gravity card

Warning

assumes xref=True ..

get_reduced_mpcs(mpc_id: int, consider_mpcadd: bool = False, stop_on_failure: bool = True) → List[Any]

Get all traced MPCs that are part of a set

Parameters
mpc_idint

the MPC id

consider_mpcaddbool

MPCADDs should not be considered when referenced from an MPCADD from a case control, True should be used.

stop_on_failurebool; default=True

errors if parsing something new

Returns
mpcsList[MPC]

the various MPCs

get_reduced_nsms(nsm_id: int, consider_nsmadd: bool = True, stop_on_failure: bool = True) → List[Any]

Get all traced NSMs that are part of a set

Parameters
nsm_idint

the NSM id

consider_nsmaddbool

NSMADDs should not be considered when referenced from an NSMADD from a case control, True should be used.

stop_on_failurebool; default=True

errors if parsing something new

Returns
mpcsList[NSM]

the various NSMs

get_reduced_spcs(spc_id: int, consider_spcadd: bool = True, stop_on_failure: bool = True) → List[Any]

Get all traced SPCs that are part of a set

Parameters
spc_idint

the SPC id

consider_spcaddbool

SPCADDs should not be considered when referenced from an SPCADD from a case control, True should be used.

stop_on_failurebool; default=True

errors if parsing something new

Returns
spcsList[SPC]

the various SPCs

get_rigid_elements_with_node_ids(node_ids)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_rigid_elements_with_node_ids(...)

get_rslot_map(reset_type_to_slot_map=False) → Dict[str, str]

gets the rslot_map

get_spcs(spc_id: int, consider_nodes: bool = False, stop_on_failure: bool = True) → Tuple[List[int], List[str]]

Gets the SPCs in a semi-usable form.

Parameters
spc_idint

the desired SPC ID

consider_nodesbool; default=False

True : consider the GRID card PS field False: consider the GRID card PS field

Returns
nidsList[int]

the constrained nodes

compsList[str]

the components that are constrained on each node

Considers:
  • SPC

  • SPC1

  • SPCADD

  • GRID

Doesn’t consider:
  • non-zero enforced value on SPC

  • GMSPC

get_structural_material_ids() → Iterable[int]
get_thermal_material_ids() → Iterable[int]

gets the thermal material ids

get_volume_breakdown(property_ids: Optional[int] = None, stop_if_no_volume: bool = True) → Dict[int, float]

gets a breakdown of the volume by property region

TODO: What about CONRODs? #’PBRSECT’, #’PBCOMP’, #’PBMSECT’, #’PBEAM3’, #’PBEND’, #’PIHEX’,

get_xyz_in_coord(cid=0, fdtype='float64', sort_ids=True)

Gets the xyz points (including SPOINTS) in the desired coordinate frame

Parameters
cidint; default=0

the desired coordinate system

fdtypestr; default=’float64’

the data type of the xyz coordinates

sort_idsbool; default=True

sort the ids

Returns
xyz(n, 3) ndarray

the xyz points in the cid coordinate frame

get_xyz_in_coord_array(cid: int = 0, fdtype: str = 'float64', idtype: str = 'int32') → Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, Dict[int, numpy.ndarray], Dict[int, numpy.ndarray]]

Gets the xyzs as an array in an arbitrary coordinate system

Parameters
fdtypestr; default=’float64’

the type of xyz_cp

idtypestr; default=’int32’

the type of nid_cp_cd

cidint; default=0

the coordinate system to get xyz in

Returns
nid_cp_cd(n, 3) int ndarray

node id, CP, CD for each node

xyz_cid(n, 3) float ndarray

points in the CID coordinate system

xyz_cp(n, 3) float ndarray

points in the CP coordinate system

icd_transformdict{int cd(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their output (CD) in that coordinate system.

icp_transformdict{int cp(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their input (CP) in that coordinate system.

Todo

how are SPOINTs/EPOINTs identified? ..

Examples

>>> out = model.get_xyz_in_coord_array(cid=0, fdtype='float64', idtype='int32')
>>> nid_cp_cd, xyz_cid, xyz_cp, icd_transform, icp_transform = out
get_xyz_in_coord_no_xref(cid=0, fdtype='float64', sort_ids=True)

see get_xyz_in_coord

include_zip(bdf_filename: Optional[str] = None, encoding: Optional[str] = None, make_ilines: bool = True) → Tuple[List[str], Any]

Read a bdf without perform any other operation, except (optionally) insert the INCLUDE files in the bdf

Parameters
bdf_filenamestr / None

the input bdf (default=None; popup a dialog)

encodingstr; default=None -> system default

the unicode encoding

make_ilinesbool; default=True

flag for ilines

Returns
all_linesList[str]

all the lines packed into a single line stream

ilines(nlines, 2) int ndarray
if make_ilines = True:

the [ifile, iline] pair for each line in the file

if make_ilines = False:

ilines = None

Note

Setting read_includes to False is kind of pointless if called directly; it’s useful for read_bdf

increase_card_count(card_name: str, count_num: int = 1) → None

Used for testing to check that the number of cards going in is the same as each time the model is read verifies proper writing of cards

Parameters
card_namestr

the card_name -> ‘GRID’

count_numint, optional

the amount to increment by (default=1)

>>> bdf.read_bdf(bdf_filename)
>>> bdf.card_count[‘GRID’]
50
property is_bdf_vectorized

Returns False for the BDF class

property is_long_ids
is_reject(card_name: str) → bool

Can the card be read.

If the card is rejected, it’s added to self.reject_count

Parameters
card_namestr

the card_name -> ‘GRID’

load(obj_filename: str = 'model.obj') → None

Loads a pickleable object

load_hdf5_file(h5_file) → None

Loads a BDF object from an hdf5 object

Parameters
hdf5_fileH5File()

an h5py object

exporterHDF5Exporter; default=None

unused

load_hdf5_filename(hdf5_filename: str) → None

Loads a BDF object from an hdf5 filename

Parameters
hdf5_filenamestr

the path to the hdf5 file

loads = None

stores LOAD, FORCE, FORCE1, FORCE2, MOMENT, MOMENT1, MOMENT2, PLOAD, PLOAD2, PLOAD4, SLOAD GMLOAD, SPCD, DEFORM, QVOL

mass_properties(element_ids=None, mass_ids=None, reference_point=None, sym_axis=None, scale=None, inertia_reference: str = 'cg')

Calculates mass properties in the global system about the reference point.

Parameters
element_idslist[int]; (n, ) ndarray, optional

An array of element ids.

mass_idslist[int]; (n, ) ndarray, optional

An array of mass ids.

reference_pointndarray/int, optional
typendarray

An array that defines the origin of the frame. default = <0,0,0>.

typeint

the node id

sym_axisstr, optional

The axis to which the model is symmetric. If AERO cards are used, this can be left blank. allowed_values = ‘no’, x’, ‘y’, ‘z’, ‘xy’, ‘yz’, ‘xz’, ‘xyz’

scalefloat, optional

The WTMASS scaling value. default=None -> PARAM, WTMASS is used float > 0.0

inertia_referencestr; default=’cg’

‘cg’ : inertia is taken about the cg ‘ref’ : inertia is about the reference point

Returns
massfloat

The mass of the model.

cgndarray

The cg of the model as an array.

inertiandarray

Moment of inertia array([Ixx, Iyy, Izz, Ixy, Ixz, Iyz]).

I = mass * centroid * centroid
\[I_{xx} = m (dy^2 + dz^2) ..\]
\[I_{yz} = -m * dy * dz ..\]
where:
\[dx = x_{element} - x_{ref} ..\]

Note

This doesn’t use the mass matrix formulation like Nastran. It assumes m*r^2 is the dominant term. If you’re trying to get the mass of a single element, it will be wrong, but for real models will be correct.

Examples

Mass properties of entire structure

>>> mass, cg, inertia = model.mass_properties()
>>> Ixx, Iyy, Izz, Ixy, Ixz, Iyz = inertia

Mass properties of model based on Property ID

>>> pids = list(model.pids.keys())
>>> pid_eids = self.get_element_ids_dict_with_pids(pids)
>>> for pid, eids in sorted(pid_eids.items()):
>>>     mass, cg, inertia = model.mass_properties(element_ids=eids)
mass_properties_no_xref(element_ids=None, mass_ids=None, reference_point=None, sym_axis=None, scale=None, inertia_reference='cg')

Calculates mass properties in the global system about the reference point.

Parameters
element_idslist[int]; (n, ) ndarray, optional

An array of element ids.

mass_idslist[int]; (n, ) ndarray, optional

An array of mass ids.

reference_pointndarray/int, optional
typendarray

An array that defines the origin of the frame. default = <0,0,0>.

typeint

the node id

sym_axisstr, optional

The axis to which the model is symmetric. If AERO cards are used, this can be left blank. allowed_values = ‘no’, x’, ‘y’, ‘z’, ‘xy’, ‘yz’, ‘xz’, ‘xyz’

scalefloat, optional

The WTMASS scaling value. default=None -> PARAM, WTMASS is used float > 0.0

inertia_referencestr; default=’cg’

‘cg’ : inertia is taken about the cg ‘ref’ : inertia is about the reference point

Returns
massfloat

The mass of the model.

cgndarray

The cg of the model as an array.

inertiandarray

Moment of inertia array([Ixx, Iyy, Izz, Ixy, Ixz, Iyz]).

I = mass * centroid * centroid
\[I_{xx} = m (dy^2 + dz^2) ..\]
\[I_{yz} = -m * dy * dz ..\]
where:
\[dx = x_{element} - x_{ref} ..\]

Note

This doesn’t use the mass matrix formulation like Nastran. It assumes m*r^2 is the dominant term. If you’re trying to get the mass of a single element, it will be wrong, but for real models will be correct.

Examples

mass properties of entire structure

>>> mass, cg, inertia = model.mass_properties()
>>> Ixx, Iyy, Izz, Ixy, Ixz, Iyz = inertia

mass properties of model based on Property ID

>>> pids = list(model.pids.keys())
>>> pid_eids = self.get_element_ids_dict_with_pids(pids)
>>> for pid, eids in sorted(pid_eids.items()):
>>>     mass, cg, inertia = model.mass_properties(element_ids=eids)
mass_properties_nsm(element_ids=None, mass_ids=None, nsm_id=None, reference_point=None, sym_axis=None, scale=None, inertia_reference='cg', xyz_cid0_dict=None, debug=False)

Calculates mass properties in the global system about the reference point. Considers NSM, NSM1, NSML, NSML1.

Parameters
modelBDF()

a BDF object

element_idslist[int]; (n, ) ndarray, optional

An array of element ids.

mass_idslist[int]; (n, ) ndarray, optional

An array of mass ids.

nsm_idint

the NSM id to consider

reference_pointndarray/int, optional
typendarray

An array that defines the origin of the frame. default = <0,0,0>.

typeint

the node id

sym_axisstr, optional

The axis to which the model is symmetric. If AERO cards are used, this can be left blank. allowed_values = ‘no’, x’, ‘y’, ‘z’, ‘xy’, ‘yz’, ‘xz’, ‘xyz’

scalefloat, optional

The WTMASS scaling value. default=None -> PARAM, WTMASS is used float > 0.0

inertia_referencestr; default=’cg’

‘cg’ : inertia is taken about the cg ‘ref’ : inertia is about the reference point

xyz_cid0_dictdict[nid]xyz; default=None -> auto-calculate

mapping of the node id to the global position

debugbool; default=False

developer debug; may be removed in the future

Returns
massfloat

The mass of the model.

cgndarray

The cg of the model as an array.

inertiandarray

Moment of inertia array([Ixx, Iyy, Izz, Ixy, Ixz, Iyz]).

I = mass * centroid * centroid
\[I_{xx} = m (dy^2 + dz^2) ..\]
\[I_{yz} = -m * dy * dz ..\]
where:
\[dx = x_{element} - x_{ref} ..\]

Note

This doesn’t use the mass matrix formulation like Nastran. It assumes m*r^2 is the dominant term. If you’re trying to get the mass of a single element, it will be wrong, but for real models will be correct.

Warning

  • If eids are requested, but don’t exist, no warning is thrown. Decide if this is the desired behavior.

  • If the NSMx ALL option is used, the mass from all elements will be considered, even if not included in the element set

Examples

mass properties of entire structure

>>> mass, cg, inertia = model.mass_properties()
>>> Ixx, Iyy, Izz, Ixy, Ixz, Iyz = inertia

mass properties of model based on Property ID >>> pids = list(model.pids.keys()) >>> pid_eids = model.get_element_ids_dict_with_pids(pids) >>> for pid, eids in sorted(pid_eids.items()): >>> mass, cg, inertia = mass_properties(model, element_ids=eids)

property material_ids

gets the material ids

property nastran_format
property ncaeros

gets the number of CAEROx panels

property ncoords

gets the number of coordinate systems

property nelements

gets the number of element

property nid_map

Gets the GRID/SPOINT/EPOINT ids to a sorted order.

Parameters
sort_idsbool; default=True

sort the ids

Returns
nid_mapDict[nid]i
nidint

the GRID/SPOINT/EPOINT id

iint

the index

..note: GRIDs, SPOINTs, & EPOINTs are stored in separate slots,

so they are unorganized.

..note: see self.get_nid_map(sort_ids=False) for the unsorted version
property nmaterials

gets the number of materials

property nnodes

gets the number of GRIDs

property node_ids

gets the GRID ids

nodes = None

stores SPOINT, GRID cards

property npoints

gets the number of GRID, SPOINT, EPOINT ids

property nproperties

gets the number of properties

object_attributes(mode: str = 'public', keys_to_skip: Optional[List[str]] = None, filter_properties: bool = False) → List[str]

List the names of attributes of a class as strings. Returns public attributes as default.

Parameters
modestr

defines what kind of attributes will be listed * ‘public’ - names that do not begin with underscore * ‘private’ - names that begin with single underscore * ‘both’ - private and public * ‘all’ - all attributes that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

filter_properties: bool: default=False

filters the @property objects

Returns
attribute_namesList[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

object_methods(mode: str = 'public', keys_to_skip: Optional[List[str]] = None) → List[str]

List the names of methods of a class as strings. Returns public methods as default.

Parameters
objinstance

the object for checking

modestr

defines what kind of methods will be listed * “public” - names that do not begin with underscore * “private” - names that begin with single underscore * “both” - private and public * “all” - all methods that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
methodList[str]

sorted list of the names of methods of a given type or None if the mode is wrong

property point_ids

gets the GRID, SPOINT, EPOINT ids

pop_parse_errors() → None

raises an error if there are parsing errors

pop_xref_errors() → None

raises an error if there are cross-reference errors

property property_ids

gets the property ids

read_bdf(bdf_filename: Optional[str] = None, validate: bool = True, xref: bool = True, punch: bool = False, read_includes: bool = True, save_file_structure: bool = False, encoding: Optional[str] = None) → None

Read method for the bdf files

Parameters
bdf_filenamestr / None

the input bdf (default=None; popup a dialog)

validatebool; default=True

runs various checks on the BDF

xrefbool; default=True

should the bdf be cross referenced

punchbool; default=False

indicates whether the file is a punch file

read_includesbool; default=True

indicates whether INCLUDE files should be read

save_file_structurebool; default=False

enables the write_bdfs method

encodingstr; default=None -> system default

the unicode encoding

.. code-block:: python
>>> bdf = BDF()
>>> bdf.read_bdf(bdf_filename, xref=True)
>>> g1 = bdf.Node(1)
>>> print(g1.get_position())
[10.0, 12.0, 42.0]
>>> bdf.write_card(bdf_filename2)
>>> print(bdf.card_stats())

—BDF Statistics— SOL 101 bdf.nodes = 20 bdf.elements = 10 etc.

reject_card_lines(card_name: str, card_lines: List[str], show_log: bool = True, comment: str = '') → None

rejects a card

replace_cards(replace_model) → None

Replaces the common cards from the current (self) model from the ones in the new replace_model. The intention is that you’re going to replace things like PSHELLs and DESVARs from a pch file in order to update your BDF with the optimized geometry.

Todo

only does a subset of cards.

Notes

loads/spcs (not supported) are tricky because you can’t replace cards one-to-one…not sure what to do

reset_errors() → None

removes the errors from the model

reset_rslot_map() → None

helper method for get_rslot_map

safe_acsid(msg: str = '') → Optional[Coord]

gets the aerodynamic coordinate system

safe_aefact(aefact_id, ref_id, xref_errors, msg='')

Gets an AEFACT card

Parameters
ref_idint

the referencing value (e.g., an CAERO eid references a AEFACT)

safe_aelist(aelist_id, ref_id, xref_errors, msg='')

Gets an AELIST card

Parameters
ref_idint

the referencing value (e.g., an AESURF eid references a AELIST)

safe_caero(caero_id, ref_id, xref_errors, msg='')
safe_coord(cid: int, ref_id: int, xref_errors: Dict[str, Tuple[int, int]], msg='')

Gets a CORDx card

Parameters
ref_idint

the referencing value (e.g., an node and element references a coord)

safe_cross_reference(xref=True, xref_nodes=True, xref_elements=True, xref_nodes_with_elements=False, xref_properties=True, xref_masses=True, xref_materials=True, xref_loads=True, xref_constraints=True, xref_aero=True, xref_sets=True, xref_optimization=True, create_superelement_geometry=False, debug=True, word='')

Performs cross referencing in a way that skips data gracefully.

Warning

not fully implemented

safe_element(eid, ref_id, xref_errors, msg='')

Gets an element card

Parameters
ref_idint

the referencing value (e.g., a load references an element)

ref_id = 10 # PLOAD4
pid = 42 # CQUAD4
xref_errors = {‘eid’[]}
self.safe_element(eid, ref_id, xref_errors)
safe_elements(eids, ref_id: int, xref_errors: Dict[str, Tuple[int, int]], msg='')

Gets an series of elements

Doesn’t get rigid (RROD, RBAR, RBE2, RBE3, RBAR, RBAR1, RSPLINE, RSSCON) or mass (CMASS1, CONM2)

Parameters
ref_id: int

typically a load_id

safe_empty_nodes(nids, msg='')

safe xref version of self.Nodes(nid, msg=’’)

safe_get_elements(eids, msg='')

safe xref version of self.Elements(eid, msg=’’)

safe_get_nodes(nids: List[int], msg: str = '') → Tuple[List[Any], str]

safe xref version of self.Nodes(nid, msg=’’)

safe_get_points(point_ids, msg='')

safe xref version of self.Points(point_ids, msg=’’)

safe_material(mid: int, ref_id: int, xref_errors, msg='')

Gets a material card

Parameters
midint

the material_id

ref_idint

the referencing value (e.g., an property references a material, so use self.pid)

safe_paero(paero_id, ref_id, xref_errors, msg='')

Gets a PAEROx card

Parameters
ref_idint

the referencing value (e.g., a load references an element)

ref_id = 10 # CAERO1
pid = 42 # PAERO1
xref_errors = {‘paero’[]}
self.safe_element(pid, ref_id, xref_errors)
safe_property(pid, ref_id, xref_errors, msg='')
Parameters
ref_idint

the referencing value (e.g., an element references a property)

ref_id = 10 # CQUAD4
pid = 42 # PSHELL
xref_errors = {‘pid’[]}
self.safe_property(pid, ref_id, xref_errors)
safe_property_mass(pid, ref_id, xref_errors, msg='')

Gets a mass_property card

Parameters
ref_idint

the referencing value (e.g., an element references a property)

safe_tabled(tabled_id, ref_id, xref_errors, msg='')
Parameters
ref_idint

the referencing value (e.g., an TLOAD1 eid references a TABLED1)

safe_tableh(tableh_id, ref_id, xref_errors, msg='')
Parameters
ref_idint

the referencing value (e.g., an MATT1 eid references a TABLEH1)

save(obj_filename: str = 'model.obj', unxref: bool = True) → None

Saves a pickleable object

saves(unxref: bool = True) → str

Saves a pickled string

set_as_msc()
set_as_nx()
set_as_zona()
set_cards(cards: Union[List[str], Set[str]]) → None

Method for setting the cards that will be processed

Parameters
cardsList[str]; Set[str]

a list/set of cards that should not be read

.. python:

bdf_model.set_cards([‘GRID’, ‘CTRIA3’])

set_dynamic_syntax(dict_of_vars: Dict[str, Union[int, float, str]]) → None

Uses the OpenMDAO syntax of %varName in an embedded BDF to update the values for an optimization study.

Parameters
dict_of_varsdict[str] = int/float/str

dictionary of 7 character variable names to map.

.. code-block:: python

GRID, 1, %xVar, %yVar, %zVar

>>> dict_of_vars = {'xVar': 1.0, 'yVar', 2.0, 'zVar':3.0}
>>> bdf = BDF()
>>> bdf.set_dynamic_syntax(dict_of_vars)
>>> bdf.read_bdf(bdf_filename, xref=True)

Notes

Case sensitivity is supported. Variables should be 7 characters or less to fit in an 8-character field.

Warning

Type matters!

set_error_storage(nparse_errors: int = 100, stop_on_parsing_error: bool = True, nxref_errors: int = 100, stop_on_xref_error: bool = True) → None

Catch parsing errors and store them up to print them out all at once (not all errors are caught).

Parameters
nparse_errorsint

how many parse errors should be stored (default=0; all=None; no storage=0)

stop_on_parsing_errorbool

should an error be raised if there are parsing errors (default=True)

nxref_errorsint

how many cross-reference errors should be stored (default=0; all=None; no storage=0)

stop_on_xref_errorbool

should an error be raised if there are cross-reference errors (default=True)

set_param(key: str, values: Union[int, float, str, List[float]], comment: str = '') → None

sets a param card; creates it if necessary

property sol

gets the solution (e.g. 101, 103)

property subcases

gets the subcases

sum_forces_moments(p0: int, loadcase_id: int, cid: int = 0, include_grav: bool = False, xyz_cid0: Union[None, Dict[int, Any]] = None) → Tuple[numpy.ndarray, numpy.ndarray]

Sums applied forces & moments about a reference point p0 for all load cases. Considers:

  • FORCE, FORCE1, FORCE2

  • MOMENT, MOMENT1, MOMENT2

  • PLOAD, PLOAD2, PLOAD4

  • LOAD

Parameters
p0NUMPY.NDARRAY shape=(3,) or integer (node ID)

the reference point

loadcase_idint

the LOAD=ID to analyze

cidint; default=0

the coordinate system for the summation

include_gravbool; default=False

includes gravity in the summation (not supported)

xyz_cid0None / Dict[int] = (3, ) ndarray

the nodes in the global coordinate system

Returns
forcesNUMPY.NDARRAY shape=(3,)

the forces

momentsNUMPY.NDARRAY shape=(3,)

the moments

Warning

not full validated ..

Todo

It’s super slow for cid != 0. We can speed this up a lot if we calculate the normal, area, centroid based on precomputed node locations.

Pressure acts in the normal direction per model/real/loads.bdf and loads.f06
sum_forces_moments_elements(p0: int, loadcase_id: int, eids: List[int], nids: List[int], cid: int = 0, include_grav: bool = False, xyz_cid0: Union[None, Dict[int, Any]] = None) → Tuple[Any, Any]

Sum the forces/moments based on a list of nodes and elements.

Parameters
p0int; (3,) ndarray

the point to sum moments about type = int

sum moments about the specified grid point

type = (3, ) ndarray/list (e.g. [10., 20., 30]):

the x, y, z location in the global frame

loadcase_idint

the LOAD=ID to analyze

eidsList[int]

the list of elements to include (e.g. the loads due to a PLOAD4)

nidsList[int]

the list of nodes to include (e.g. the loads due to a FORCE card)

cidint; default=0

the coordinate system for the summation

include_gravbool; default=False

includes gravity in the summation (not supported)

xyz_cid0None / Dict[int] = (3, ) ndarray

the nodes in the global coordinate system

Returns
forcesNUMPY.NDARRAY shape=(3,)

the forces

momentsNUMPY.NDARRAY shape=(3,)

the moments

Nodal TypesFORCE, FORCE1, FORCE2,

MOMENT, MOMENT1, MOMENT2, PLOAD

Element Types: PLOAD1, PLOAD2, PLOAD4, GRAV
If you have a CQUAD4 (eid=3) with a PLOAD4 (sid=3) and a FORCE
card (nid=5) acting on it, you can incldue the PLOAD4, but
not the FORCE card by using:
For just pressure:
For just force:
or both:

Notes

If you split the model into sections and sum the loads on each section, you may not get the same result as if you summed the loads on the total model. This is due to the fact that nodal loads on the boundary are double/triple/etc. counted depending on how many breaks you have.

Todo

not done…

superelement_nodes(seid: int, nodes: List[Any], msg: str = '') → None
tempbc(sid, Type, nodes, temps, comment='') → pyNastran.bdf.cards.thermal.thermal.TEMPBC
transform_xyzcp_to_xyz_cid(xyz_cp: numpy.ndarray, nids: numpy.ndarray, icp_transform: Dict[int, numpy.ndarray], cid: int = 0, in_place: bool = False, atol: float = 1e-06) → numpy.ndarray

Vectorized method for calculating node locations in an arbitrary coordinate system.

Parameters
xyz_cp(n, 3) float ndarray

points in the CP coordinate system

nids(n, ) int ndarray

the GRID/SPOINT/EPOINT ids corresponding to xyz_cp

icp_transformdict{int cp(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their input (CP) in that coordinate system.

cidint; default=0

the coordinate system to get xyz in

in_placebool, default=False

If true the original xyz_cp is modified, otherwise a new one is created.

Returns
xyz_cid(n, 3) float ndarray

points in the CID coordinate system

Examples

# assume GRID 1 has a CD=10, CP=0 # assume GRID 2 has a CD=10, CP=0 # assume GRID 5 has a CD=50, CP=1 >>> model.point_ids [1, 2, 5] >>> out = model.get_displacement_index_xyz_cp_cd() >>> icd_transform, icp_transform, xyz_cp, nid_cp_cd = out >>> nids = nid_cp_cd[:, 0] >>> xyz_cid0 = model.transform_xyzcp_to_xyz_cid(

xyz_cp, nids, icp_transform, cid=0)

>>> xyz_cid1 = model.transform_xyzcp_to_xyz_cid(
        xyz_cp, nids, icp_transform,
        cid=1)
property type_slot_str

helper method for printing supported cards

uncross_reference(word: str = '') → None

uncross references the model

update_card(card_name: str, icard: int, ifield: int, value: Union[int, float, str]) → None

Updates a Nastran card based on standard Nastran optimization names

Parameters
card_namestr

the name of the card (e.g. GRID)

icardint

the unique 1-based index identifier for the card (e.g. the GRID id)

ifieldint

the index on the card (e.g. X on GRID card as an integer representing the field number)

valuevaries

the value to assign

Returns
objvaries

the corresponding object (e.g. the GRID object)

# On GRID 100, set Cp (2) to 42
>>> model.update_card('GRID', 100, 2, 42)
    ..
# On GRID 100, set X (3) to 43.
>>> model.update_card('GRID', 100, 3, 43.)
    ..
update_model_by_desvars(xref=True, desvar_values=None)

doesn’t require cross referenceing

update_solution(sol: int, method: Optional[str], sol_iline: int) → None

Updates the overall solution type (e.g. 101,200,600)

Parameters
solint

the solution type (101, 103, etc)

methodstr

the solution method (only for SOL=600)

sol_ilineint

the line to put the SOL/method on

validate() → None

runs some checks on the input data beyond just type checking

write_bdf(out_filename: Union[str, _io.StringIO, None] = None, encoding: Optional[str] = None, size: int = 8, is_double: bool = False, interspersed: bool = False, enddata: Optional[bool] = None, write_header: bool = True, close: bool = True) → None

Writes the BDF.

Parameters
out_filenamevaries; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

encodingstr; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

sizeint; {8, 16}

the field size

is_doublebool; default=False

False : small field True : large field

interspersedbool; default=True

Writes a bdf with properties & elements interspersed like how Patran writes the bdf. This takes slightly longer than if interspersed=False, but makes it much easier to compare to a Patran-formatted bdf and is more clear.

enddatabool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

write_headerbool; default=True

flag for writing the pyNastran header

closebool; default=True

should the output file be closed

write_bdfs(out_filenames: Optional[Union[str, StringIO]], relative_dirname: Optional[str] = None, encoding: Optional[str] = None, size: int = 8, is_double: bool = False, enddata: Optional[bool] = None, close: bool = True, is_windows: Optional[bool] = None) → None

Writes the BDF.

Parameters
out_filenamevaries; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

relative_dirnamestr; default=None -> os.curdir

A relative path to reference INCLUDEs. ‘’ : relative to the main bdf None : use the current directory path : absolute path

encodingstr; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

sizeint; {8, 16}

the field size

is_doublebool; default=False

False : small field True : large field

enddatabool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

closebool; default=True

should the output file be closed

is_windowsbool; default=None
True/FalseWindows has a special format for writing INCLUDE

files, so the format for a BDF that will run on Linux and Windows is different.

None : Check the platform

write_bulk_data(bdf_file, size: int = 8, is_double: bool = False, interspersed: bool = False, enddata: Optional[bool] = None, close: bool = True, is_long_ids: bool = False) → None

Writes the BDF.

Parameters
bdf_filevaries

file - a file object StringIO() - a StringIO object

sizeint; {8, 16}

the field size

is_doublebool; default=False

False : small field True : large field

interspersedbool; default=True

Writes a bdf with properties & elements interspersed like how Patran writes the bdf. This takes slightly longer than if interspersed=False, but makes it much easier to compare to a Patran-formatted bdf and is more clear.

enddatabool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

closebool; default=True

should the output file be closed

.. note:: is_long_ids is only needed if you have ids longer

than 8 characters. It’s an internal parameter, but if you’re calling the new sub-function, you might need it. Chances are you won’t.

write_skin_solid_faces(skin_filename, write_solids=False, write_shells=True, size=8, is_double=False, encoding=None)

Writes the skinned elements

Parameters
skin_filenamestr

the file to write

write_solidsbool; default=False

write solid elements that have skinned faces

write_shellsbool; default=False

write newly created shell elements if there are shells in the model, doesn’t write these

sizeint; default=8

the field width

is_doublebool; default=False

double precision flag

encodingstr; default=None -> system default

the string encoding

property wtmass

Gets the PARAM,WTMASS value, which defines the weight to mass conversion factor

kg -> kg : 1.0 lb -> slug : 1/32.2 lb -> slinch : 1/(32.2*12)=1/386.4

pyNastran.bdf.bdf.load_bdf_object(obj_filename: str, xref: bool = True, log=None, debug: bool = True)[source]
pyNastran.bdf.bdf.main()[source]

shows off how unicode works because it’s overly complicated

pyNastran.bdf.bdf.read_bdf(bdf_filename: Optional[str] = None, validate: bool = True, xref: bool = True, punch: bool = False, save_file_structure: bool = False, skip_cards: Optional[List[str]] = None, read_cards: Optional[List[str]] = None, encoding: Optional[str] = None, log: Optional[cpylog.SimpleLogger] = None, debug: bool = True, mode: str = 'msc') → pyNastran.bdf.bdf.BDF[source]

Creates the BDF object

Parameters
bdf_filenamestr (default=None -> popup)

the bdf filename

debugbool/None
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

validatebool; default=True

runs various checks on the BDF

xrefbool; default=True

should the bdf be cross referenced

punchbool; default=False

indicates whether the file is a punch file

save_file_structurebool; default=False

enables the write_bdfs method

skip_cardsList[str]; default=None

None : include all cards list of cards to skip

read_cardsList[str]; default=None

None : include all cards list of cards to read (all the cards)

encodingstr; default=None -> system default

the unicode encoding

modestr; default=’msc’

the type of Nastran valid_modes = {‘msc’, ‘nx’}

Returns
modelBDF()

an BDF object

.. note: this method will change in order to return an object that

does not have so many methods

Todo

finish this ..

case_control_deck Module
Inheritance diagram of pyNastran.bdf.case_control_deck

CaseControlDeck parsing and extraction class

CaseControlDeck:

get_subcase_parameter(self, isubcase, param_name) has_subcase(self, isubcase) create_new_subcase(self, isubcase) delete_subcase(self, isubcase) copy_subcase(self, i_from_subcase, i_to_subcase, overwrite_subcase=True) get_subcase_list(self) get_local_subcase_list(self) update_solution(self, isubcase, sol) add_parameter_to_global_subcase(self, param) add_parameter_to_local_subcase(self, isubcase, param) finish_subcases(self) convert_to_sol_200(self, model)

class pyNastran.bdf.case_control_deck.CaseControlDeck(lines: List[str], log: Optional[Any] = None)[source]

Bases: object

CaseControlDeck parsing and extraction class

Creates the CaseControlDeck from a set of lines

Parameters
linesList[str]

list of lines that represent the case control deck ending with BEGIN BULK

loglog()

a :mod: logging object

add_parameter_to_global_subcase(param)[source]

Takes in a single-lined string and adds it to the global subcase.

Parameters
paramstr

the variable to add

Notes

dont worry about overbounding the line

Examples

>>> bdf = BDF()
>>> bdf.read_bdf(bdf_filename)
>>> bdf.case_control.add_parameter_to_global_subcase('DISP=ALL')
>>> bdf.case_control
TITLE = DUMMY LINE
DISP = ALL
add_parameter_to_local_subcase(isubcase: int, param: List[str]) → None[source]

Takes in a single-lined string and adds it to a single Subcase.

Parameters
isubcaseint

the subcase ID to add

param_nameList[str]

the parameter name to add

Notes

dont worry about overbounding the line

Examples

>>> bdf = BDF()
>>> bdf.read_bdf(bdf_filename)
>>> bdf.case_control.add_parameter_to_local_subcase(1, 'DISP=ALL')
>>> print(bdf.case_control)
TITLE = DUMMY LINE
SUBCASE 1
    DISP = ALL
>>>
convert_to_sol_200(model: BDF) → None[source]

Takes a case control deck and changes it from a SOL xxx to a SOL 200

Parameters
modelBDF()

the BDF object

.. todo:: not done…
copy_subcase(i_from_subcase: int, i_to_subcase: int, overwrite_subcase: bool = True) → pyNastran.bdf.subcase.Subcase[source]

Overwrites the parameters from one subcase to another.

Parameters
i_from_subcaseint

the Subcase to pull the data from

i_to_subcaseint

the Subcase to map the data to

overwrite_subcasebool; default=True

NULLs i_to_subcase before copying i_from_subcase

Returns
subcaseSubcase()

the new subcase

create_new_subcase(isubcase: int) → pyNastran.bdf.subcase.Subcase[source]

Method create_new_subcase:

Parameters
isubcaseint

the subcase ID

Returns
subcaseSubcase()

the new subcase

.. warning: be careful you dont add data to the global subcase

after running this…is this True???

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

delete_subcase(isubcase: int) → None[source]

Deletes a subcase.

Parameters
isubcaseint

the Subcase to delete

export_to_hdf5(hdf5_file, model: BDF, encoding: str) → None[source]

exports the case control deck section to an hdf5 file

finish_subcases()[source]

Removes any unwanted data in the subcase…specifically the SUBCASE data member. Otherwise it will print out after a key like stress.

get_local_subcase_list() → List[int][source]

Gets the list of subcases that aren’t the global subcase ID

get_op2_data() → Dict[int, Any][source]

Gets the relevant op2 parameters required for a given subcase

Todo

not done…

get_subcase_list() → List[int][source]

Gets the list of subcases including the global subcase ID (0)

get_subcase_parameter(isubcase: int, param_name: str, obj: bool = False) → Any[source]

Get the [value, options] of a subcase’s parameter. For example, for STRESS(PLOT,POST)=ALL:

param_name=STRESS value=ALL options=[‘PLOT’, ‘POST’]

Parameters
isubcaseint

the subcase ID to check

param_namestr

the parameter name to look for

objbool; default=False

should the object be returned

has_parameter(isubcase: int, *param_names: List[str]) → bool[source]

Checks to see if a parameter (e.g. STRESS) is defined in a certain subcase ID.

Parameters
isubcaseint

the subcase ID to check

param_namesList[str]

the parameter name to look for

Returns
has_parameterbool

does any subcase have a parameter

has_subcase(isubcase: int) → bool[source]

Checks to see if a subcase exists.

Parameters
isubcaseint

the subcase ID

Returns
valbool

does_subcase_exist (type = bool)

load_hdf5_file(hdf5_file, encoding: str) → None[source]

loads the case control deck section from a hdf5 file

reject_lines = None

stores a single copy of ‘BEGIN BULK’ or ‘BEGIN SUPER’

suppress_output() → None[source]

Replaces F06 printing with OP2 printing

Converts:

STRESS(PRINT,SORT1,REAL) FORCE(PRINT,PLOT,SORT1,REAL)

to:

STRESS(PLOT,SORT1,REAL) FORCE(PLOT,SORT1,REAL)

Warning

most case control types are not supported

type = 'CaseControlDeck'
update_solution(isubcase: int, sol: str) → None[source]

sol = STATICS, FLUTTER, MODAL, etc.

Parameters
isubcaseint

the subcase ID to update

solstr

the solution type to change the solution to

>>> bdf.case_control
SUBCASE 1

DISP = ALL

>>> bdf.case_control.update_solution(1, ‘FLUTTER’)
>>> bdf.case_control
SUBCASE 1

ANALYSIS FLUTTER DISP = ALL

>>>
write(write_begin_bulk: Optional[bool] = None) → str[source]

Writes the case control deck. Has an option to not write the begin bulk line

Parameters
write_begin_bulkbool; default=None

None: use the value in the original deck

Returns
msgstr

the deck as a string

pyNastran.bdf.case_control_deck.integer(str_value: str, line: str) → int[source]

casts the value as an integer

pyNastran.bdf.case_control_deck.split_equal_space(line: str, word: str, example: str) → str[source]

Splits a case insensitive line by an

reads:
  • ‘SUBCASE = 5’

  • ‘SUBCASE 5’

pyNastran.bdf.case_control_deck.verify_card(key: int, value: Any, options: Any, line: str) → None[source]

Make sure there are no obvious errors

pyNastran.bdf.case_control_deck.verify_card2(key, value, options, line)[source]

Make sure there are no obvious errors

subcase Module
Inheritance diagram of pyNastran.bdf.subcase

Subcase creation/extraction class

class pyNastran.bdf.subcase.Subcase(id=0)[source]

Bases: object

Subcase creation/extraction class

add(key: str, value: Any, options: List[Any], param_type: str)[source]
add_set_from_values(set_id: int, values: List[int])[source]

Simple way to add SET cards

allowed_param_types = ['SET-type', 'CSV-type', 'SUBCASE-type', 'KEY-type', 'STRESS-type', 'STRING-type', 'OBJ-type']
export_to_hdf5(hdf5_file, encoding: str) → None[source]
finish_subcase()[source]

Removes the subcase parameter from the subcase to avoid printing it in a funny spot

get_op2_data(sol, solmap_to_value)[source]
get_parameter(param_name: str, msg: str = '', obj: bool = False) → Tuple[Union[int, str], List[Any]][source]

Gets the [value, options] for a subcase.

Parameters
param_namestr

the case control parameters to get

objbool; default=False

should the object be returned

Returns
valuevaries

the value of the parameter ‘ALL’ in STRESS(PLOT,PRINT) = ALL

optionsList[varies]

the values in parentheses [‘PLOT’, ‘PRINT’] in STRESS(PLOT,PRINT) = ALL

has_parameter(*param_names) → List[bool][source]

Checks to see if one or more parameter names are in the subcase.

Parameters
param_namesstr; List[str]

the case control parameters to check for

Returns
existsList[bool]

do the parameters exist

load_hdf5_file(hdf5_file, encoding: str)[source]
print_param(key: str, param: Tuple[Any, Any, str]) → str[source]

Prints a single entry of the a subcase from the global or local subcase list.

solCodeMap = {1: 101, 21: 101, 24: 101, 26: 101, 61: 101, 64: 106, 66: 106, 68: 106, 76: 101, 99: 129, 144: 101, 187: 101}
subcase_sorted(lst)[source]

Does a “smart” sort on the keys such that SET cards increment in numerical order. Also puts the sets first.

Parameters
lstList[str]

the list of subcase list objects (list_a)

Returns
list_bList[str]

the sorted version of list_a

suppress_output(suppress_to: str = 'PLOT') → None[source]

Replaces F06 printing with OP2 printing

Converts:

STRESS(PRINT,SORT1,REAL) FORCE(PRINT,PLOT,SORT1,REAL)

to:

STRESS(PLOT,SORT1,REAL) FORCE(PLOT,SORT1,REAL)

Warning

needs more validation

update(key, value, options, param_type)[source]
write_subcase(subcase0)[source]

Internal method to print a subcase

Parameters
subcase0Subcase()

the global Subcase object

Returns
msgstr

the string of the current Subcase

pyNastran.bdf.subcase.get_analysis_code(sol)[source]

Maps the solution number to the OP2 analysis code.

  • 8 - post-buckling (maybe 7 depending on NLPARM???)

# not important
  • 3/4 - differential stiffness (obsolete)

  • 11 - old geometric nonlinear statics

  • 12 - contran (???)

Todo

verify

pyNastran.bdf.subcase.get_device_code(options: Any, unused_value: Any) → int[source]

Gets the device code of a given set of options and value

Parameters
optionslist[int/float/str]

the options for a parameter

unused_valueint/float/str

the value of the parameter

Returns
device_codeint

The OP2 device code

0 - No output 1 - PRINT 2 - PLOT 3 - PRINT, PLOT 4 - PUNCH 5 - PRINT, PUNCH 6 - PRINT, PLOT, PUNCH

pyNastran.bdf.subcase.get_format_code(options: Any, unused_value: Any) → int[source]

Gets the format code that will be used by the op2 based on the options.

Parameters
optionslist[int/float/str]

the options for a parameter

unused_valueint/float/str

the value of the parameter

.. todo:: not done…only supports REAL, IMAG, PHASE, not RANDOM
pyNastran.bdf.subcase.get_sort_code(options, unused_value)[source]

Gets the sort code of a given set of options and value

Parameters
optionsList[int/str]

the options for a parameter

unused_valueint; str

the value of the parameter

pyNastran.bdf.subcase.get_stress_code(key: str, options: Dict[str, Any], unused_value: Any) → int[source]

Method get_stress_code:

Note

the individual element must take the stress_code and reduce

it to what the element can return. For example, for an isotropic CQUAD4 the fiber field doesnt mean anything.

BAR - no von mises/fiber ISOTROPIC - no fiber

Todo

how does the MATERIAL bit get turned on? I’m assuming it’s element dependent…

pyNastran.bdf.subcase.get_table_code(sol, table_name, unused_options)[source]

Gets the table code of a given parameter. For example, the DISPLACMENT(PLOT,POST)=ALL makes an OUGV1 table and stores the displacement. This has an OP2 table code of 1, unless you’re running a modal solution, in which case it makes an OUGV1 table of eigenvectors and has a table code of 7.

Parameters
optionslist[int/float/str]

the options for a parameter

valueint/float/str

the value of the parameter

Returns
table_codeint

the OP2 table_code

pyNastran.bdf.subcase.update_param_name(param_name)[source]

Takes an abbreviated name and expands it so the user can type DISP or DISPLACEMENT and get the same answer

Parameters
param_namestr

the parameter name to be standardized (e.g. DISP vs. DIPLACEMENT)

.. todo:: not a complete list
bdf/field_writer Package

This is the pyNastran.bdf.field_writer.rst file.

field_writer Module

Defines legacy import functions

pyNastran.bdf.field_writer.print_card(fields, size=8, is_double=False)[source]

Prints a card in 8-character of 16-character Nastran format.

Parameters
fieldsList[int/float/str/None]

all the fields in the BDF card (no trailing Nones)

sizeint; default=8

the size of the field (8/16)

is_doublebool; default=False

is the card double precision? Double precision applies to specific cards and turns 1.234E+5 into 1.234D+5. Applies to GRID, CORDx only?

Returns
cardstr

string representation of the card

Note

be careful of using is_double on cards that aren’t GRID or CORDx

field_writer_8 Module

Defines functions for single precision 8 character field writing.

pyNastran.bdf.field_writer_8.is_same(value1: Any, value2: Any) → bool[source]

Checks to see if 2 values are the same

Note

this method is used by almost every card when printing

pyNastran.bdf.field_writer_8.print_card_8(fields: List[Union[int, float, str, None]]) → str[source]

Prints a nastran-style card with 8-character width fields.

Parameters
fieldsList[int/float/str/None]

all the fields in the BDF card (no trailing Nones)

Returns
cardstr

string representation of the card in small field format

Note

An internal field value of None or ‘’ will be treated as a blank field

Note

A small field format follows the 8-8-8-8-8-8-8-8 = 80 format where the first 8 is the card name or blank (continuation). The last 8-character field indicates an optional continuation, but because it’s a left-justified unnecessary field, print_card doesn’t use it.

pyNastran.bdf.field_writer_8.print_field_8(value: Union[int, float, str, None]) → str[source]

Prints a 8-character width field

Parameters
valueint/float/str

the value to print

Returns
fieldstr

an 8-character string

pyNastran.bdf.field_writer_8.print_float_8(value: float) → str[source]

Prints a float in nastran 8-character width syntax using the highest precision possbile.

pyNastran.bdf.field_writer_8.print_int_card(fields: List[Union[str, int]]) → str[source]

Prints a nastran-style card with 8-character width fields. All fields (other than the first field) must be integers. This is used to speed up SET cards.

Parameters
fieldsList[int/float/str/None]

The list of fields to write to a nastran card.

.. warning::

Blanks are not allowed! Floats and strings are not allowed.

.. code-block:: python

fields = [‘SET’, 1, 2, 3, 4, 5, 6, …, n] print_int_card(fields) >>> fields ‘SET1, 1, 2, 3, 4, 5, 6, …’ ‘ , n’

pyNastran.bdf.field_writer_8.print_int_card_blocks(fields_blocks: List[Any]) → str[source]

Prints a nastran-style card with 8-character width fields. All fields other than the card name must be written in “block” format. This is used to speed up SET cards.

Parameters
fields_blocksList[int]

The fields written in “block” notation.

Returns
msgstr

the field blocks as a 8-character width Nastran card

Note

Blanks are allowed in the False block.

fields_blocks = [
    'SET1',
    [['a', 1.0, 3], False], # these are not all integers
    [[1, 2, 3], True],      # these are all integers
]
msg = print_int_card_blocks(fields_blocks)
print(msg)
>>> 'SET1           a      1.       3       1       2       3
pyNastran.bdf.field_writer_8.print_scientific_8(value: float) → str[source]

Prints a value in 8-character scientific notation. This is a sub-method and shouldn’t typically be called

Notes

print_float_8 : a better float printing method

pyNastran.bdf.field_writer_8.set_blank_if_default(value: Any, default: Any) → Union[int, float, str, None][source]

Used when setting the output data of a card to clear default values

Parameters
valueint/float/str

the field value the may be set to None (blank) if value=default, the default value for the field

defaultint/float/str

the default value

.. note:: this method is used by almost every card when printing
pyNastran.bdf.field_writer_8.set_default_if_blank(value: Any, default: Any) → Union[int, float, str][source]

Used when initializing a card and the default value isn’t set Used on PBARL

pyNastran.bdf.field_writer_8.set_string8_blank_if_default(value: Any, default: Any) → str[source]

helper method for writing BDFs

field_writer_16 Module

Defines functions for single precision 16 character field writing.

pyNastran.bdf.field_writer_16.print_card_16(fields: List[Union[int, float, str, None]], wipe_fields: bool = True) → str[source]

Prints a nastran-style card with 16-character width fields.

Parameters
fieldsList[varies]

all the fields in the BDF card (no trailing Nones)

wipe_fieldsbool; default=True

some cards (e.g. PBEAM) have ending fields that need to be there, others cannot have them.

Returns
cardstr

string representation of the card in small field format

Note

An internal field value of None or ‘’ will be treated as a blank field

Note

A large field format follows the 8-16-16-16-16-8 = 80 format where the first 8 is the card name or blank (continuation). The last 8-character field indicates an optional continuation, but because it’s a left-justified unnecessary field, print_card doesn’t use it.

pyNastran.bdf.field_writer_16.print_field_16(value: Union[int, float, str, None]) → str[source]

Prints a 16-character width field

Parameters
valueint / float / str / None

the value to print

Returns
fieldstr

an 16-character string

pyNastran.bdf.field_writer_16.print_float_16(value: float) → str[source]

Prints a float in nastran 16-character width syntax using the highest precision possbile. .. seealso:: print_float_8

pyNastran.bdf.field_writer_16.print_scientific_16(value: float) → str[source]

Prints a value in 16-character scientific notation. This is a sub-method and shouldn’t typically be called

See also

print_float_16 for a better method

pyNastran.bdf.field_writer_16.set_string16_blank_if_default(value: Any, default: Any) → str[source]

helper method for writing BDFs

field_writer_double Module

Defines functions for double precision 16 character field writing.

pyNastran.bdf.field_writer_double.print_card_double(fields: List[Union[int, float, str, None]], wipe_fields: bool = True) → str[source]

Prints a nastran-style card with 16-character width fields.

Parameters
fieldsList[varies]

all the fields in the BDF card (no trailing Nones)

wipe_fieldsbool; default=True

some cards (e.g. PBEAM) have ending fields that need to be there, others cannot have them.

Returns
cardstr

string representation of the card in small field format

Note

An internal field value of None or ‘’ will be treated as a blank field

Note

A large field format follows the 8-16-16-16-16-8 = 80 format where the first 8 is the card name or blank (continuation). The last 8-character field indicates an optional continuation, but because it’s a left-justified unnecessary field, print_card doesnt use it.

pyNastran.bdf.field_writer_double.print_field_double(value: Union[int, float, str, None]) → str[source]

Prints a 16-character width field

Parameters

value – the value to print

Returns field

an 16-character string

pyNastran.bdf.field_writer_double.print_scientific_double(value: float) → str[source]

Prints a value in 16-character scientific double precision.

Scientific Notation: 5.0E+1 Double Precision Scientific Notation: 5.0D+1

patran_rpt Module
pyNastran.bdf.patran_utils.patran_rpt.csv_simplify(csv_filename, x0, ix, iname, tol=0.05)[source]
pyNastran.bdf.patran_utils.patran_rpt.main()[source]
pyNastran.bdf.patran_utils.patran_rpt.rpt_read()[source]
bdf/utils Package

This is the pyNastran.bdf.rst file.

utils Module
Defines various utilities including:
  • parse_patran_syntax

  • parse_patran_syntax_dict

  • Position

  • PositionWRT

  • transform_load

pyNastran.bdf.utils.Position(xyz: NDArray3float, cid: int, model: BDF) → np.ndarray[source]

Gets the point in the global XYZ coordinate system.

Parameters
xyz(3,) ndarray

the position of the GRID in an arbitrary coordinate system

cidint

the coordinate ID for xyz

modelBDF()

the BDF model object

Returns
xyz2(3,) ndarray

the position of the GRID in an arbitrary coordinate system

pyNastran.bdf.utils.PositionWRT(xyz: NDArray3float, cid: int, cid_new: int, model: BDF) → NDArray3float[source]

Gets the location of the GRID which started in some arbitrary system and returns it in the desired coordinate system

Parameters
xyz(3, ) float ndarray

the position of the GRID in an arbitrary coordinate system

cidint

the coordinate ID for xyz

cid_newint

the desired coordinate ID

modelBDF()

the BDF model object

Returns
xyz_local(3, ) float ndarray

the position of the GRID in an arbitrary coordinate system

pyNastran.bdf.utils.TransformLoadWRT(F, M, cid, cid_new, model)[source]
pyNastran.bdf.utils.get_xyz_cid0_dict(model: BDF, xyz_cid0: Dict[int, NDArray3float] = None) → Dict[int, NDArray3float][source]

helper method

Parameters
modelBDF()

a BDF object

xyz_cid0None / Dict[int] = (3, ) ndarray

the nodes in the global coordinate system

Returns
xyz_cid0_dict
pyNastran.bdf.utils.split_eids_along_nids(model: BDF, eids: List[int], nids: List[int]) → None[source]

Disassociate a list of elements along a list of nodes.

The expected use of this function is that you have two bodies that are incorrectly equivalenced and you would like to create duplicate nodes at the same location and associate the new nodes with one half of the elements.

Pick the nodes along the line and the elements along one side of the line.

Parameters
modelBDF()

the BDF model

eidslist/tuple

element ids to disassociate

nidslist/tuple

node ids to disassociate

Implicitly returns model with additional nodes.

Notes

xref should be set to False for this function.

pyNastran.bdf.utils.transform_load(F, M, cid: int, cid_new: int, model: BDF) → Tuple[np.ndarray, np.ndarray][source]

Transforms a force/moment from an arbitrary coordinate system to another coordinate system.

Parameters
Fxyz(3, ) float ndarray

the force in an arbitrary coordinate system

Mxyz(3, ) float ndarray

the moment in an arbitrary coordinate system

cidint

the coordinate ID for xyz

cid_newint

the desired coordinate ID

modelBDF()

the BDF model object

Returns
Fxyz_local(3, ) float ndarray

the force in an arbitrary coordinate system

Mxyz_local(3, ) float ndarray

the force in an arbitrary coordinate system

write_path Module
Defines following useful methods:
  • write_include(filename, is_windows=True)

pyNastran.bdf.write_path._split_path(abspath: str, is_windows: bool) → Tuple[str, ...][source]

Takes a path and splits it into the various components.

This is a helper method for write_include

pyNastran.bdf.write_path.write_include(filename: str, is_windows: bool = None) → str[source]

Writes a bdf INCLUDE file line given an imported filename.

Parameters
filenamestr

the filename to write

is_windowsbool; default=None
True/FalseWindows has a special format for writing INCLUDE

files, so the format for a BDF that will run on Linux and Windows is different.

None : Check the platform

For a model that will run on Linux:
..code-block:: python

fname = r’/opt/NASA/test1/test2/test3/ test4/formats/pynastran_v0.6/pyNastran/bdf/model.inc’ write_include(fname, is_windows=False)

We want:
..code-block:: python
INCLUDE /opt/NASA/test1/test2/test3/test4/formats/pynastran_v0.6/

pyNastran/bdf/model.inc

cards Package
base_card Package
base_card Module
Inheritance diagram of pyNastran.bdf.cards.base_card
defines:
  • BaseCard()

  • Element()

  • Property()

  • Material()

  • word, num = break_word_by_trailing_integer(pname_fid)

  • word, num = break_word_by_trailing_parentheses_integer_ab(pname_fid)

class pyNastran.bdf.cards.base_card.BaseCard[source]

Bases: object

Defines a series of base methods for every card class (e.g., GRID, CTRIA3) including:

  • deepcopy()

  • get_stats()

  • validate()

  • object_attributes(mode=’public’, keys_to_skip=None)

  • object_methods(self, mode=’public’, keys_to_skip=None)

  • comment

  • update_field(self, n, value)

_is_same_fields_long(fields1, fields2)[source]

helper for __eq__

abstract classmethod add_card(card, comment='')[source]
property comment

accesses the comment

get_field(n: int) → Union[int, float, str, None][source]

Gets a field based on it’s field number

Parameters
nint

the field number

Returns
valueint/float/str/None

the value of the field

get_stats() → str[source]

Prints out an easy to read summary of the card

object_attributes(mode: str = 'public', keys_to_skip: Optional[List[str]] = None, filter_properties: bool = False) → List[str][source]

See also

pyNastran.utils.object_attributes(…)

object_methods(mode: str = 'public', keys_to_skip: Optional[List[str]] = None) → List[str][source]

See also

pyNastran.utils.object_methods(…)

print_card(size: int = 8, is_double: bool = False) → str[source]

prints the card in 8/16/16-double format

abstract raw_fields()[source]
repr_fields() → List[Union[int, float, str, None]][source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

rstrip() → str[source]
abstract property type
update_field(n: int, value: Union[int, float, str, None]) → None[source]

Updates a field based on it’s field number.

Parameters
nint

the field number

valueint/float/str/None

the value to update the field to

.. note::

This is dynamic if the card length changes.

update_field can be used as follows to change the z coordinate
of a node::
>>> nid = 1
>>> node = model.nodes[nid]
>>> node.update_field(3, 0.1)
validate() → None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double: bool = False) → str[source]
class pyNastran.bdf.cards.base_card.Element[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

defines the Element class

dummy init

Pid() → int[source]

Gets the Property ID of an element

Returns
pidint

the Property ID

_verify_unique_node_ids(required_node_ids, non_required_node_ids=None) → None[source]
get_node_positions(nodes: Optional[Any] = None) → numpy.ndarray[source]

returns the positions of multiple node objects

get_node_positions_no_xref(model: BDF, nodes: List[Any] = None) → np.ndarray[source]

returns the positions of multiple node objects

pid = 0
prepare_node_ids(nids: List[int], allow_empty_nodes: bool = False) → None[source]

Verifies all node IDs exist and that they’re integers

validate_node_ids(nodes: List[int], allow_empty_nodes: bool = False) → None[source]
verify_unique_node_ids() → None[source]
class pyNastran.bdf.cards.base_card.Material[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Base Material Class

dummy init

Mid() → Any[source]

returns the material ID of an element

Returns
midint

the Material ID

property TRef
cross_reference(model: BDF) → None[source]

dummy cross reference method for a Material

class pyNastran.bdf.cards.base_card.Property[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Base Property Class

dummy init

Mid() → int[source]

returns the material ID of an element

Returns
midint

the Material ID

Pid() → int[source]

returns the property ID of an property

Returns
pidint

the Property ID

write_card_16(is_double: bool = False) → str[source]
write_card_8() → str[source]
pyNastran.bdf.cards.base_card.break_word_by_trailing_integer(pname_fid: str) → Tuple[str, str][source]

Splits a word that has a value that is an integer

Parameters
pname_fidstr

the DVPRELx term (e.g., A(11), NSM(5))

Returns
wordstr

the value not in parentheses

valueint

the value in parentheses

Examples

>>> break_word_by_trailing_integer('T11')
('T', '11')
>>> break_word_by_trailing_integer('THETA11')
('THETA', '11')
pyNastran.bdf.cards.base_card.break_word_by_trailing_parentheses_integer_ab(pname_fid: str) → Tuple[str, str][source]

Splits a word that has a value that can be A/B as well as an integer

Parameters
pname_fidstr

the DVPRELx term; A(11), NSM(5), NSM(B)

Returns
wordstr

the value not in parentheses

valueint/str

the value in parentheses

Examples

>>> break_word_by_trailing_parentheses_integer('A(11)')
('A', '11')
>>> break_word_by_trailing_parentheses_integer('NSM(11)')
('NSM', '11')
>>> break_word_by_trailing_parentheses_integer('NSM(B)')
('NSM', 'B')
bdf_sets Module
Inheritance diagram of pyNastran.bdf.cards.bdf_sets

All set cards are defined in this file. This includes:

  • sets * SET1, SET2, SET3, RADSET # ??? RADSET

  • asets - aset, aset1

  • omits - omit, omit1

  • bsets - bset, bset1

  • csets - cset, cset1

  • qsets - qset, qset1

  • usets - uset, uset1 # USET 1 is not supported

The superelement sets start with SE: * se_bsets - sebset, sebset1 * se_csets - secset, secset1 * se_qsets - seqset, seqset1 * se_usets - seuset, seuset1 *se_sets

  • SESET

  • SEQSEP

#* Set #* SetSuper

Entry Type

Equivalent Type

SEQSETi

QSETi

SESUP

SUPORT

SECSETi

CSETi

SEBSETi

BSETi

class pyNastran.bdf.cards.bdf_sets.ABCQSet(ids: List[int], components: List[int], comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Generic Class ASET, BSET, CSET, QSET cards inherit from.

Defines degrees-of-freedom in the analysis set (A-set)

1

2

3

4

5

6

7

8

9

ASET

ID1

C1

ID2

C2

ID3

C3

ID4

C4

ASET

16

2

23

3516

1

4

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'ABCQSet'
uncross_reference() → None[source]

Removes cross-reference links

validate() → None[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.bdf_sets.ABQSet1(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Generic Class ASET1, BSET1, QSET1 cards inherit from.

Defines degrees-of-freedom in the analysis set (a-set).

1

2

3

4

5

6

7

8

9

xSET1

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

ID9

xSET1

C

ID1

THRU

ID2

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]
components = None

Component number. (Integer zero or blank for scalar points or any unique combination of the Integers 1 through 6 for grid points with no embedded blanks.)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'ABQSet1'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.bdf_sets.ASET(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABCQSet

Defines degrees-of-freedom in the analysis set (A-set).

1

2

3

4

5

6

7

8

9

ASET

ID1

C1

ID2

C2

ID3

C3

ID4

C4

ASET

16

2

23

3516

1

4

Creates an ASET card, which defines the degree of freedoms that will be retained during an ASET modal reduction.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms to be retained (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

..note: the length of components and ids must be the same
classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'ASET'
class pyNastran.bdf.cards.bdf_sets.ASET1(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABQSet1

Defines degrees-of-freedom in the analysis set (a-set)

1

2

3

4

5

6

7

8

9

ASET1

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

ID9

ASET1

C

ID1

THRU

ID2

Creates an ASET1 card, which defines the degree of freedoms that will be retained during an ASET modal reduction.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms to be retained (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'ASET1'
class pyNastran.bdf.cards.bdf_sets.BSET(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABCQSet

Defines analysis set (a-set) degrees-of-freedom to be fixed (b-set) during generalized dynamic reduction or component mode synthesis calculations.

1

2

3

4

5

6

7

8

9

BSET

ID1

C1

ID2

C2

ID3

C3

ID4

C4

BSET

16

2

23

3516

1

4

Creates an BSET card, which defines the degree of freedoms that will be fixed during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

..note: the length of components and ids must be the same
classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'BSET'
class pyNastran.bdf.cards.bdf_sets.BSET1(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABQSet1

Defines analysis set (a-set) degrees-of-freedom to be fixed (b-set) during generalized dynamic reduction or component mode synthesis calculations.

1

2

3

4

5

6

7

8

9

BSET1

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

ID9

BSET1

C

ID1

THRU

ID2

Creates an BSET1 card, which defines the degree of freedoms that will be fixed during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'BSET1'
class pyNastran.bdf.cards.bdf_sets.CSET(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABCQSet

Defines the degree of freedoms that will be free during a generalized dynamic reduction or component model synthesis calculation.

1

2

3

4

5

6

7

8

9

CSET

ID1

C1

ID2

C2

ID3

C3

ID4

C4

CSET

16

2

23

3516

1

4

Creates an CSET card, which defines the degree of freedoms that will be free during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms to be free (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

..note: the length of components and ids must be the same
classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'CSET'
class pyNastran.bdf.cards.bdf_sets.CSET1(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Defines the degree of freedoms that will be free during a generalized dynamic reduction or component model synthesis calculation.

1

2

3

4

5

6

7

8

9

CSET1

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

ID9

CSET1

C

ID1

THRU

ID2

CSET1

,,

ALL

Creates an CSET1 card, which defines the degree of freedoms that will be free during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms to be free (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CSET1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'CSET1'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.bdf_sets.OMIT(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABCQSet

Defines analysis set (a-set) degrees-of-freedom to be fixed (b-set) during generalized dynamic reduction or component mode synthesis calculations.

1

2

3

4

5

6

7

8

9

OMIT

ID1

C1

ID2

C2

ID3

C3

ID4

C4

OMIT

16

2

23

3516

1

4

Creates an BSET card, which defines the degree of freedoms that will be fixed during a generalized dynamic reduction or component model synthesis calculation.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

..note: the length of components and ids must be the same
classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'OMIT'
class pyNastran.bdf.cards.bdf_sets.OMIT1(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABQSet1

Defines degrees-of-freedom to be excluded (o-set) from the analysis set (a-set).

1

2

3

4

5

6

7

8

9

OMIT

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

ID9

OMIT1

C

ID1

THRU

ID2

Creates an OMIT1 card, which defines the degree of freedoms that will be excluded (o-set) from the analysis set (a-set).

Parameters
idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms to be omitted (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'OMIT1'
class pyNastran.bdf.cards.bdf_sets.QSET(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABCQSet

Defines generalized degrees-of-freedom (q-set) to be used for dynamic reduction or component mode synthesis.

1

2

3

4

5

6

7

8

9

QSET

ID1

C1

ID2

C2

ID3

C3

ID4

C4

QSET

16

2

23

3516

1

4

Creates a QSET card, which defines generalized degrees of freedom (q-set) to be used for dynamic reduction or component mode synthesis.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms to be created (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'QSET'
class pyNastran.bdf.cards.bdf_sets.QSET1(ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABQSet1

Defines generalized degrees-of-freedom (q-set) to be used for dynamic reduction or component mode synthesis.

Creates a QSET1 card, which defines generalized degrees of freedom (q-set) to be used for dynamic reduction or component mode synthesis.

Parameters
idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms to be created (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'QSET1'
class pyNastran.bdf.cards.bdf_sets.RADSET(cavities, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABQSet1

Specifies which radiation cavities are to be included for radiation enclosure analysis.

1

2

3

4

5

6

7

8

9

RADSET

ICAVITY1

ICAVITY2

ICAVITY3

ICAVITY4

ICAVITY5

ICAVITY6

ICAVITY7

ICAVITY8

ICAVITY9

RADSET

1

2

3

4

Creates a RADSET card

Parameters
cavitiesList[int]

the RADCAV ids

commentstr; default=’’

a comment for the card

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a USET1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'RADSET'
class pyNastran.bdf.cards.bdf_sets.SEBSET(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SuperABCQSet

Defines boundary degrees-of-freedom to be fixed (b-set) during generalized dynamic reduction or component mode calculations.

1

2

3

4

5

6

7

8

SEBSET

SEID

ID1

C1

ID2

C2

ID3

C3

SEBSET

C

ID1

THRU

ID2

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'SEBSET'
class pyNastran.bdf.cards.bdf_sets.SEBSET1(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SuperABQSet1

Defines boundary degrees-of-freedom to be fixed (b-set) during generalized dynamic reduction or component mode synthesis calculations.

1

2

3

4

5

6

7

8

9

SEBSET1

SEID

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID9

SEBSET1

SEID

C

ID1

THRU

ID2

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'SEBSET1'
class pyNastran.bdf.cards.bdf_sets.SECSET(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SuperABCQSet

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'SECSET'
class pyNastran.bdf.cards.bdf_sets.SECSET1(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SuperABQSet1

Defines SECSET1

1

2

3

4

5

6

7

8

9

SECSET1

SEID

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID9

SECSET1

SEID

C

ID1

THRU

ID2

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'SECSET1'
class pyNastran.bdf.cards.bdf_sets.SEQSEP(ssid, psid, ids, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SetSuper

Used with the CSUPER entry to define the correspondence of the exterior grid points between an identical or mirror-image superelement and its primary superelement.

classmethod add_card(card, comment='')[source]

Adds a SEQSEP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

get_ids() → List[int][source]

gets the ids

ids = None

Exterior grid point identification numbers for the primary superelement. (Integer > 0)

psid = None

Identification number for the primary superelement. (Integer >= 0).

raw_fields()[source]

gets the “raw” card without any processing as a list for printing

ssid = None

Identification number for secondary superelement. (Integer >= 0).

type = 'SEQSEP'
class pyNastran.bdf.cards.bdf_sets.SEQSET(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SuperABCQSet

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'SEQSET'
class pyNastran.bdf.cards.bdf_sets.SEQSET1(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SuperABQSet1

classmethod _init_from_empty()[source]
_properties = ['node_ids']
type = 'SEQSET1'
class pyNastran.bdf.cards.bdf_sets.SESET(seid, ids, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.SetSuper

Defines interior grid points for a superelement.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SESET card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

add_seset(seset)[source]
cross_reference(model: BDF) → None[source]
ids = None

Grid or scalar point identification number. (0 < Integer < 1000000; G1 < G2)

raw_fields()[source]
type = 'SESET'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.bdf_sets.SET1(sid, ids, is_skin=False, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Defines a list of structural grid points or element identification numbers.

1

2

3

4

5

6

7

8

9

SET1

SID

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

etc.

SET1

3

31

62

93

124

16

17

18

19

SET1

6

29

32

THRU

50

61

THRU

70

17

57

Creates a SET1 card, which defines a list of structural grid points or element identification numbers.

Parameters
sidint

set id

idsList[int, str]

AECOMP, SPLINEx, PANEL : all grid points must exist XYOUTPUT : missing grid points are ignored The only valid string is THRU ids = [1, 3, 5, THRU, 10]

is_skinbool; default=False

if is_skin is used; ids must be empty

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SET1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

add_set(set1)[source]
cross_reference_set(model, xref_type, msg='', allow_empty_nodes=False)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

xref_typestr

{‘Node’, ‘Point’}

allow_empty_nodesbool; default=False

do all nodes need to exist?

SPLINEx, ACMODL, PANEL, AECOMP, XYOUTPUT
- nodes
  • SPLINEx (all nodes must exist)

  • PANEL (all nodes must exist)

  • XYOUTPUT (missing nodes ignored)

  • AECOMP

  • ACMODL (optional)

- elements
  • ACMODL (optional)

get_ids()[source]
ids = None

List of structural grid point or element identification numbers. (Integer > 0 or ‘THRU’; for the ‘THRU’ option, ID1 < ID2 or ‘SKIN’; in field 3)

raw_fields()[source]
safe_cross_reference(model: BDF, xref_type, msg='', allow_empty_nodes=False)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

xref_typestr

{‘Node’}

allow_empty_nodesbool; default=False

do all nodes need to exist?

SPLINEx, ACMODL, PANEL, AECOMP, XYOUTPUT
- nodes
  • SPLINEx (all nodes must exist)

  • PANEL (all nodes must exist)

  • XYOUTPUT (missing nodes ignored)

  • AECOMP

  • ACMODL (optional)

- elements
  • ACMODL (optional)

sid = None

Unique identification number. (Integer > 0)

symmetric_difference(set1)[source]
type = 'SET1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.bdf_sets.SET2(sid: int, macro: int, sp1: float, sp2: float, ch1: float, ch2: float, zmax: float = 0.0, zmin: float = 0.0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Defines a list of structural grid points in terms of aerodynamic macro elements.

1

2

3

4

5

6

7

8

9

SET2

SID

MACRO

SP1

SP2

CH1

CH2

ZMAX

ZMIN

SET2

3

111

0.0

0.75

0.0

0.667

3.51

SET2

6

222

0.0

0.75

0.0

0.667

3.51

-1.0

SET2 entries are referenced by: - SPLINEi

Creates a SET2 card, which sefines a list of structural grid points in terms of aerodynamic macro elements.

Remarks:

  • Points exactly on the boundary may be missed; therefore, to get all the grid points within the area of the macro element, SP1=-0.01, SP2=1.01, etc. should be used.

  • Use DIAG 18 to print the internal grid Ids found.

Parameters
sidint

set id

macroint

the aerodynamic macro element id

sp1 / sp2float

lower/higher span division point defining the prism containing the set

ch1 / ch2float

lower/higher chord division point defining the prism containing the set

zmax / zminfloat; default=0.0/0.0

z-coordinate of top/bottom of the prism containing the set a zero value implies a value of infinity

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SET2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference_set(model, xref_type: str, msg='')[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

xref_typestr

{‘MACRO’} i.e. the CAEROi elements

get_ids()[source]
macro = None

Aerodynamic Macro Element ID. (Integer > 0)

raw_fields()[source]
safe_cross_reference(model: BDF, xref_type: str, msg='')[source]
sid = None

Unique identification number. (Integer > 0)

sp1 = None

Division Points spanwise and chordwise for the selection prism. (Real)

type = 'SET2'
uncross_reference()[source]
zmax = None

Height limits for the selection prism. (Real)

class pyNastran.bdf.cards.bdf_sets.SET3(sid: int, desc: str, ids: List[int], comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Defines a list of grids, elements or points.

SET3 entries are referenced by: - NX

  • ACMODL

  • PANEL

  • MSC - PBMSECT - PBRSECT - RFORCE

    • ELEM only (SOL 600)

    • DEACTEL - ELEM only (SOL 400)

    • RBAR, RBAR1, RBE1, RBE2, RBE2GS, RBE3, RROD, RSPLINE, RSSCON, RTRPLT and RTRPLT1

      • RBEin / RBEex only

    • ELSIDi / XELSIDi
      • ELEM only

    • NDSIDi
      • GRID only

1

2

3

4

5

6

7

8

9

SET3

SID

DES

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID8

etc

SET3

1

POINT

11

12

SetIDs(collapse=True)[source]

gets the IDs of the SETx

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SET3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

add_set(set3)[source]
cross_reference_set(model, xref_type, msg='')[source]
get_ids()[source]
ids = None

Identifiers of grids points, elements, points or properties. (Integer > 0)

is_element()[source]
is_grid()[source]
is_point()[source]
is_property()[source]
raw_fields()[source]

Gets the “raw” card without any processing as a list for printing

sid = None

Unique identification number. (Integer > 0)

symmetric_difference(set3)[source]
type = 'SET3'
union(set3)[source]
valid_descs = ['GRID', 'POINT', 'ELEMENT', 'PROP', 'RBEin', 'RBEex']
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.bdf_sets.Set[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Generic Class all SETx cards inherit from

clean_ids() → None[source]

eliminates duplicate IDs from self.IDs and sorts self.IDs

ids = None

list of IDs in the SETx

repr_fields() → List[Union[int, float, str, None]][source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.bdf_sets.SetSuper[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Generic Class all Superelement SETx cards inherit from.

ids = None

list of IDs in the SESETx

seid = None

Superelement identification number. Must be a primary superelement. (Integer >= 0)

class pyNastran.bdf.cards.bdf_sets.SuperABCQSet(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Generic Class ASET, BSET, CSET, QSET cards inherit from.

Defines degrees-of-freedom in the analysis set (A-set)

1

2

3

4

5

6

7

8

9

SEBSET

SEID

ID1

C1

ID2

C2

ID3

C3

SEBSET

100

16

2

23

3516

1

4

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'SuperABCQSet'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.bdf_sets.SuperABQSet1(seid, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Generic Class SEBSET1, SEQSET1 cards inherit from.

Defines degrees-of-freedom in the analysis set (a-set).

1

2

3

4

5

6

7

8

9

SEBSET1

SEID

C

ID1

ID2

ID3

ID4

ID5

ID6

ID7

ID9

SEBSET1

SEID

C

ID1

THRU

ID2

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]
components = None

Component number. (Integer zero or blank for scalar points or any unique combination of the Integers 1 through 6 for grid points with no embedded blanks.)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'SuperABQSet1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.bdf_sets.USET(name, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.Set

Defines a degrees-of-freedom set.

1

2

3

4

5

6

7

8

USET

SNAME

ID1

C1

ID2

C2

ID3

C3

USET

JUNK

ID1

THRU

ID2

Creates a USET card, which defines a degrees-of-freedom set.

Parameters
namestr

SNAME Set name. (One to four characters or the word ‘ZERO’ followed by the set name.)

idsList[int]

the GRID/SPOINT ids

componentsList[str]

the degree of freedoms (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a USET card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

components = None

Identifiers of grids points. (Integer > 0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'USET'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.bdf_sets.USET1(name, ids, components, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_sets.ABQSet1

Defines a degree-of-freedom set.

1

2

3

4

5

6

7

8

9

USET1

SNAME

C

ID2

ID3

ID4

ID5

ID6

ID7

ID9

USET1

SNAME

C

ID1

THRU

ID2

Creates a USET1 card, which defines a degrees-of-freedom set.

Parameters
namestr

SNAME Set name. (One to four characters or the word ‘ZERO’ followed by the set name.)

idsList[int]

the GRID/SPOINT ids

componentsstr

the degree of freedoms (e.g., ‘1’, ‘123’)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a USET1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]

gets the “raw” card without any processing as a list for printing

type = 'USET1'
uncross_reference() → None[source]

Removes cross-reference links

bdf_tables Module
Inheritance diagram of pyNastran.bdf.cards.bdf_tables

All table cards are defined in this file. This includes:

  • table_d

  • TABLED1 - Dynamic Table = f(Time, Frequency)

  • TABLED2

  • TABLED3

  • table_m

  • TABLEM1 - Material table = f(Temperature)

  • TABLEM2

  • TABLEM3

  • TABLEM4

*tables
  • TABLEST - Material table = f(Stress)

  • TABLES1

  • TABLEHT - Material table = f(Temperature)

  • TABLEH1

*random_tables
  • TABRND1

  • TABRNDG

class pyNastran.bdf.cards.bdf_tables.DTABLE(default_values, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Creates a DTABLE card

Parameters
default_valuesdict
keystr

the parameter name

valuefloat

the value

commentstr; default=’’

a comment for the card

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DTABLE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'DTABLE'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.bdf_tables.TABDMP1(tid: int, x: Any, y: Any, Type: str = 'G', comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABDMP1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABDMP1'
class pyNastran.bdf.cards.bdf_tables.TABLED1(tid: int, x: numpy.ndarray, y: numpy.ndarray, xaxis: str = 'LINEAR', yaxis: str = 'LINEAR', extrap: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

Dynamic Load Tabular Function, Form 1 Defines a tabular function for use in generating frequency-dependent and time-dependent dynamic loads.

1

2

3

4

5

6

7

8

9

TABLED1

TID

XAXIS

YAXIS

EXTRAP

x1

y1

x2

y2

x3

y3

etc.

ENDT

TABLED1

32

-3.0

6.9

2.0

5.6

3.0

5.6

ENDT

..note:: EXTRAP is NX specific

Creates a TABLED1, which is a dynamic load card that is applied by the DAREA card

Parameters
tidint

table id

xList[float]

nvalues

yList[float]

nvalues

xaxisstr

LINEAR, LOG

yaxisstr

LINEAR, LOG

extrapint; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLED1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

interpolate(x)[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLED1'
class pyNastran.bdf.cards.bdf_tables.TABLED2(tid: int, x1: float, x: numpy.ndarray, y: numpy.ndarray, extrap: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

Dynamic Load Tabular Function, Form 2 Defines a tabular function for use in generating frequency-dependent and time-dependent dynamic loads. Also contains parametric data for use with the table.

Parameters
tidint

table id

x1float

y = yT(x - x1)

xList[float]

the x values

yList[float]

the y values

extrapint; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLED2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

interpolate(x)[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLED2'
class pyNastran.bdf.cards.bdf_tables.TABLED3(tid: int, x1: float, x2: float, x: numpy.ndarray, y: numpy.ndarray, extrap: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

Dynamic Load Tabular Function, Form 3 Defines a tabular function for use in generating frequency-dependent and time-dependent dynamic loads. Also contains parametric data for use with the table.

Parameters
tidint

table id

x1float

y = yT(x - x1)

x2???

???

xList[float]

the x values

yList[float]

the y values

extrapint; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLED3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLED3'
class pyNastran.bdf.cards.bdf_tables.TABLED4(tid: int, x1: float, x2: float, x3: float, x4: float, a: List[float], comment: str = '')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

Dynamic Load Tabular Function, Form 4 Defines the coefficients of a power series for use in generating frequency-dependent and time-dependent dynamic loads. Also contains parametric data for use with the table.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLED4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

interpolate(x)[source]

y = sum_{i=0}^N Ai * ((x-x1)/x2))^i

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLED4'
class pyNastran.bdf.cards.bdf_tables.TABLED5(tid, xs, table_ids, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

Dynamic Load Tabular Function, Form 5 Defines a value as a function of two variables for use in generating frequency-dependent and time-dependent dynamic loads.

classmethod add_card(card, comment='')[source]

Adds a TABLED5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLED5'
class pyNastran.bdf.cards.bdf_tables.TABLEH1(tid, x, y, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6

7

8

9

TABLEH1

TID

x1

y1

x2

y2

x3

y3

etc.

ENDT

TABLEH1

32

0.0

0.0

0.01

0.2

ENDT

Adds a TABLEH1 card, which defines convection heat transfer coefficient. It’s referenced by a TABLEHT.

Parameters
tidint

Table ID

x, yList[float]

table values

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLEH1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEH1'
class pyNastran.bdf.cards.bdf_tables.TABLEHT(tid: int, x, y, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6 | 7

8

9

TABLEHT

TID


x1

tid1

x2

tid2

x3

tid3

etc.

ENDT

TABLEHT

32

10

11

ENDT

Adds a TABLEHT card, which a function of two variables for convection heat transfer coefficient.

Parameters
tidint

Table ID

x, yList[float]

table values

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLEHT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEHT'
class pyNastran.bdf.cards.bdf_tables.TABLEM1(tid, x, y, xaxis='LINEAR', yaxis='LINEAR', comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLEM1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEM1'
class pyNastran.bdf.cards.bdf_tables.TABLEM2(tid, x1, x, y, extrap=0, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6

7

8

9

TABLEM2

TID

X1

EXTRAP

x1

y1

x2

y2

x3

y3

etc.

ENDT

TABLEM2

32

-10.5

-3.0

6.9

2.0

5.6

3.0

5.6

ENDT

..note:: EXTRAP is NX specific

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLEM2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEM2'
class pyNastran.bdf.cards.bdf_tables.TABLEM3(tid, x1, x2, x, y, extrap=0, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6

7

8

9

TABLEM3

TID

X1

X2

EXTRAP

x1

y1

x2

y2

x3

y3

etc.

ENDT

TABLEM3

32

126.9

30.0

-3.0

6.9

2.0

5.6

3.0

5.6

ENDT

..note:: EXTRAP is NX specific

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLEM3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEM3'
class pyNastran.bdf.cards.bdf_tables.TABLEM4(tid, x1, x2, x3, x4, a, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6

7

8

TABLEM4

TID

X1

X2

X3

X4

A1

A2

A3

A4

A5

etc.

ENDT

TABLEM4

32

0.0

1.0

0.0

2.91

-0.0329

6.51-5

0.0

-3.4-7

ENDT

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLEM4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEM4'
class pyNastran.bdf.cards.bdf_tables.TABLES1(tid, x, y, Type=1, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6

7

8

9

TABLES1

TID

TYPE

x1

y1

x2

y2

x3

y3

etc.

ENDT

TABLES1

32

0.0

0.0

0.01

0.2

ENDT

Adds a TABLES1 card, which defines a stress dependent material

Parameters
tidint

Table ID

Typeint; default=1

Type of stress-strain curve (1 or 2) 1 - Cauchy (true) stress vs. total true strain 2 - Cauchy (true) stress vs. plastic true strain (MSC only) Type is MSC-specific and was added somewhere between 2006 and 2016.

x, yList[float]

table values

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABLES1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLES1'
class pyNastran.bdf.cards.bdf_tables.TABLEST(tid, x, y, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

1

2

3

4

5

6 | 7

8

9

TABLEST

TID


x1

y1

x2

y2

x3

y3

etc.

ENDT

TABLEST

32

150.0

10.0

175.0

ENDT

classmethod add_card(card, comment='')[source]

Adds a TABLEST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABLEST'
class pyNastran.bdf.cards.bdf_tables.TABRND1(tid, x, y, xaxis='LINEAR', yaxis='LINEAR', comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABRND1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TABRND1'
class pyNastran.bdf.cards.bdf_tables.TABRNDG(tid, Type, LU, WG, comment='')[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

Gust Power Spectral Density

Defines the power spectral density (PSD) of a gust for aeroelastic response analysis.

Creates a TABRNDG card

Parameters
tidint

table id

Typeint

PSD type 1 : von Karman 2 : Dryden

LUfloat

Scale of turbulence divided by velocity (units of time)

WGfloat

Root-mean-square gust velocity

commentstr; default=’’

a comment for the card

LU = None

Scale of turbulence divided by velocity (units of time; Real)

Type = None

PSD Type: 1. von Karman; 2. Dryden

WG = None

Root-mean-square gust velocity. (Real)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABRNDG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

tid = None

Table identification number. (Integer >0)

type = 'TABRNDG'
class pyNastran.bdf.cards.bdf_tables.Table[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.bdf_tables._map_axis(axis)[source]
pyNastran.bdf.cards.bdf_tables.make_xy(table_id, table_type, xy)[source]
pyNastran.bdf.cards.bdf_tables.read_table(card, table_id, table_type)[source]

common method for reading tables that handles SKIP

pyNastran.bdf.cards.bdf_tables.read_table_float_int(card, table_id, table_type)[source]

common method for reading tables that handles SKIP

collpase_card Module
defines:
  • collapse_thru_by(fields, get_packs=False)

  • collapse_thru_by_float(fields)

  • collapse_thru(fields, nthru=None)

  • collapse_thru_packs(fields)

  • collapse_colon_packs(fields, thru_split=3)

  • condense(value_list)

  • build_thru_packs(packs, max_dv=1, thru_split=3)

  • build_thru(packs, max_dv=None, nthru=None)

  • build_thru_float(packs, max_dv=None)

pyNastran.bdf.cards.collpase_card._check_sort_fields(fields)[source]
pyNastran.bdf.cards.collpase_card.build_thru(packs, max_dv: Optional[int] = None, nthru: Optional[int] = None)[source]

Takes a pack [1,7,2] and converts it into fields used by a SET card. The values correspond to the first value, last value, and delta in the list. This means that [1,1001,2] represents 500 values. [1,1001,1] represents 1001 values and will be written as [1,THRU,1001]..

Parameters
packsList[pack]
packList[int first, int last, int delta]

the first, last, delta id values

max_dvint; default=None -> no limit

defines the max allowable delta between two values

nthruint; default=None

don’t use this; it will crash

Returns
valuevaries

the value of the field

pyNastran.bdf.cards.collpase_card.build_thru_float(packs: List[List[int]], max_dv: Optional[int] = None) → List[Union[str, int]][source]

Takes a pack [1,7,2] and converts it into fields used by a SET card. The values correspond to the first value, last value, and delta in the list. This means that [1,1001,2] represents 500 values. [1,1001,1] represents 1001 values and will be written as [1,THRU,1001].

Parameters
packsList[pack]

pack : List[first, last, delta] first, last, delta are integers

max_dvint; default=None -> no limit

integer defining the max allowable delta between two values (default=None; no limit)

pyNastran.bdf.cards.collpase_card.build_thru_packs(packs, max_dv=1, thru_split=3)[source]

Applies THRU and BY to packs to shorten output as Nastran does on cards like the SPOINT

Parameters
packsList[pack]
packList[id_low, id_high, delta_id]

a list representation of the min/max/delta id values

max_dvint; default=1

maximum allowed delta between two values

thru_splitint; default=3

the length to not write THRU 3 : [10, 11, 12] will write as ‘10 THRU 12’ 4 : [10, 11, 12] will write as ‘10 11 12’

Returns
singlesList[int]

the list of singles

doublesList[pack]
packList[varies]

[3, THRU, 13] [3, THRU, 13, BY, 5]

the double packs

# invalid
SET1,4000, 1, 3, THRU, 10, 20, THRU, 30
# valid
SET1,4000, 1
SET1,4000, 3, THRU, 10
SET1,4000, 20, THRU, 30
returns

singles = [1] doubles = [[3, ‘THRU’, 10], [20, ‘THRU’, 30]]

pyNastran.bdf.cards.collpase_card.collapse_colon_packs(fields, thru_split=3)[source]

Applies colons (:) to packs to represent THRU and BY as is used by Patran.

Parameters
fieldsList[int]

the values to collapse

thru_splitint; default=3

the length to not write THRU 3 : [10, 11, 12] will write as ‘10 THRU 12’ 4 : [10, 11, 12] will write as ‘10 11 12’

Returns
singlesList[int]

the list of singles

doublesList[pack]
packList[varies]

[3, :, 13] [3, :, 13, :, 5]

the double packs

# invalid
SET1,4000, 1, 3,, 10, 20, :, 30
# valid
SET1,4000, 1
SET1,4000, 3,, 10
SET1,4000, 20,, 30
# output
singles = [1]
doubles = [[3, ‘:’, 10], [20, ‘:’, 30]]
pyNastran.bdf.cards.collpase_card.collapse_thru(fields, nthru: Optional[int] = None) → List[Tuple[int, int, int]][source]

Collapses fields into a set of packs

Parameters
fieldslist[int, int, …]

the list of integers to compress

nthruint; default=1

currently unused

Returns
packs = list[pack]

pack = list[int first_val, int last_val, int_by]

pyNastran.bdf.cards.collpase_card.collapse_thru_by(fields: List[int], get_packs: bool = False) → List[List[int]][source]
Parameters
fieldsList[int]

the list of fields to collapse

get_packsbool; default=False

get the list of packs so “special” formatting can be done

fields packs
[1, 2, 3…150] -> [1, 150, 1]
[1, 3, 5…150] -> [1, 150, 2]
pyNastran.bdf.cards.collpase_card.collapse_thru_by_float(fields: List) → List[Union[str, int]][source]
pyNastran.bdf.cards.collpase_card.collapse_thru_packs(fields)[source]
pyNastran.bdf.cards.collpase_card.condense(value_list)[source]

Builds a list of packs (list of 3 values representing the first, last, and delta values for condensing a SET card.

Parameters
value_listList[int]

list of values to pack

Returns
packsList[pack]
packList[id_low, id_high, delta_id]

a list representation of the min/max/delta id values

See also

build_thru ..

constraints Module
Inheritance diagram of pyNastran.bdf.cards.constraints

All constraint cards are defined in this file. This includes:

  • Constraint

  • SUPORT

  • SUPORT1

  • SPC

  • SPC1

  • SPCAX

  • MPC

  • GMSPC

  • ConstraintADD

  • SPCADD

  • MPCADD

The ConstraintObject contain multiple constraints.

class pyNastran.bdf.cards.constraints.Constraint[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

common class for:
  • SUPORT / SUPORT1 / SESUP

  • GMSPC

  • MPC

  • SPC / SPC1

  • SPCAX

  • SPCOFF / SPCOFF1

class pyNastran.bdf.cards.constraints.ConstraintAdd[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

common class for SPCADD, MPCADD

class pyNastran.bdf.cards.constraints.GMSPC(conid, component, entity, entity_id, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GMSPC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

TODO: xref

raw_fields()[source]
safe_cross_reference(model)[source]

TODO: xref

type = 'GMSPC'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.constraints.MPC(conid: int, nodes: List[int], components: List[str], coefficients: List[float], comment: str = '')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

Multipoint Constraint Defines a multipoint constraint equation of the form:

sum(A_j * u_j) = 0

where:

uj represents degree-of-freedom Cj at grid or scalar point Gj. Aj represents the scale factor

1

2

3

4

5

6

7

8

9

MPC

SID

G1

C1

A1

G2

C2

A2

G3

C3

A3

Creates an MPC card

Parameters
conidint

Case Control MPC id

nodesList[int]

GRID/SPOINT ids

componentsList[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

coefficientsList[float]

the scaling coefficients

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card: BDFCard, comment='')[source]

Adds an MPC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

coefficients = None

Coefficient. (Real; Default = 0.0 except A1 must be nonzero.)

components = None

Component number. (Any one of the Integers 1 through 6 for grid points; blank or zero for scalar points.)

conid = None

Set identification number. (Integer > 0)

property constraints
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property enforced
property gids
property gids_ref
property node_ids
nodes = None

Identification number of grid or scalar point. (Integer > 0)

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

object_methods(mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'MPC'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

see BaseCard.write_card``

write_card_16(is_double=False)[source]
write_card_8()[source]
class pyNastran.bdf.cards.constraints.MPCADD(conid, sets, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.ConstraintAdd

Defines a multipoint constraint equation of the form \(\Sigma_j A_j u_j =0\) where \(u_j\) represents degree-of-freedom \(C_j\) at grid or scalar point \(G_j\).

1

2

3

4

MPCADD

2

1

3

classmethod _init_from_empty()[source]
_properties = ['ids', 'mpc_ids']
classmethod add_card(card, comment='')[source]

Adds a MPCADD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property ids
property mpc_ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'MPCADD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.constraints.SESUP(nodes, Cs, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.SUPORT

Creates a SUPORT card, which defines free-body reaction points. This is always active.

Parameters
nodesList[int]

the nodes to release

CsList[str]

components to support at each node

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
type = 'SESUP'
class pyNastran.bdf.cards.constraints.SPC(conid: int, nodes: List[int], components: List[str], enforced: List[float], comment: str = '')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

Defines enforced displacement/temperature (static analysis) velocity/acceleration (dynamic analysis).

1

2

3

4

5

6

7

8

SPC

SID

G1

C1

D1

G2

C2

D2

SPC

2

32

3

-2.6

5

Creates an SPC card, which defines the degree of freedoms to be constrained

Parameters
conidint

constraint id

nodesList[int]

GRID/SPOINT ids

componentsList[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforcedList[float]

the constrained value for the given node (typically 0.0)

commentstr; default=’’

a comment for the card

.. note:: len(nodes) == len(components) == len(enforced)
.. warning:: non-zero enforced deflection requires an SPCD as well
classmethod _init_from_empty()[source]
_properties = ['node_ids', 'constraints', 'gids_ref', 'gids']
classmethod add_card(card, comment='')[source]

Adds an SPC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property constraints
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property gids
property gids_ref
property node_ids
object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

object_methods(mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'SPC'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.constraints.SPC1(conid: int, components: str, nodes: List[int], comment: str = '')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

1

2

3

4

5

6

7

8

9

SPC1

SID

C

G1

G2

G3

G4

G5

G6

G7

G8

G9

etc.

SPC1

3

246

209075

209096

209512

209513

209516

SPC1

3

2

1

3

10

9

6

5

2

8

SPC1

SID

C

G1

THRU

G2

SPC1

313

12456

6

THRU

32

Creates an SPC1 card, which defines the degree of freedoms to be constrained to a value of 0.0

Parameters
conidint

constraint id

componentsstr

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

nodesList[int]

GRID/SPOINT ids

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SPC1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property constraints
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'SPC1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.constraints.SPCADD(conid, sets, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.ConstraintAdd

Defines a single-point constraint set as a union of single-point constraint sets defined on SPC or SPC1 entries.

1

2

3

4

SPCADD

2

1

3

classmethod _init_from_empty()[source]
_properties = ['ids', 'spc_ids']
classmethod add_card(card, comment='')[source]

Adds a SPCADD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
property spc_ids
type = 'SPCADD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.constraints.SPCAX(conid, ringax, hid, component, enforced, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

Defines a set of single-point constraints or enforced displacements for conical shell coordinates.

1

2

3

4

5

6

SPCAX

SID

RID

HID

C

D

SPCAX

2

3

4

13

6.0

Creates an SPCAX card

Parameters
conidint

Identification number of a single-point constraint set.

ringaxint

Ring identification number. See RINGAX entry.

hidint

Harmonic identification number. (Integer >= 0)

componentint

Component identification number. (Any unique combination of the Integers 1 through 6.)

enforcedfloat

Enforced displacement value

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SPCAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

component = None

Component identification number. (Any unique combination of the Integers 1 through 6.)

conid = None

Identification number of a single-point constraint set.

cross_reference(model: BDF) → None[source]
enforced = None

Enforced displacement value

hid = None

Harmonic identification number. (Integer >= 0)

raw_fields()[source]
ringax = None

Ring identification number. See RINGAX entry.

safe_cross_reference(model)[source]
type = 'SPCAX'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.constraints.SPCOFF(nodes, components, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

1

2

3

4

5

6

7

8

9

SPC

G1

C1

G2

C2

G3

C3

G4

C4

SPC

32

3

5

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SPCOFF card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property constraints
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'SPCOFF'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.constraints.SPCOFF1(components, nodes, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SPCOFF1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property constraints
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'SPCOFF1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.constraints.SUPORT(nodes, Cs, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

Defines determinate reaction degrees-of-freedom in a free body.

1

2

3

4

5

6

7

8

9

SUPORT

ID1

C1

ID2

C2

ID3

C3

ID4

C4

Creates a SUPORT card, which defines free-body reaction points. This is always active.

Parameters
nodesList[int]

the nodes to release

CsList[str]

components to support at each node

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SUPORT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'SUPORT'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.constraints.SUPORT1(conid, nodes, Cs, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.Constraint

Defines determinate reaction degrees-of-freedom (r-set) in a free body-analysis. SUPORT1 must be requested by the SUPORT1 Case Control command.

1

2

3

4

5

6

7

8

SUPORT1

SID

ID1

C1

ID2

C2

ID3

C3

SUPORT1

1

2

23

4

15

5

0

Creates a SUPORT card, which defines free-body reaction points.

Parameters
conidint

Case Control SUPORT id

nodesList[int]

the nodes to release

CsList[str]

components to support at each node

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SUPORT1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

add_suport1_to_set(suport1)[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'SUPORT1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

contact Module
Inheritance diagram of pyNastran.bdf.cards.contact

Defines the following contact cards:

  • BCONP

  • BLSEG

  • BCRPARA

  • BCTPARA

  • BCTADD

  • BCTSET

  • BSURF

  • BSURFS

  • BFRIC

class pyNastran.bdf.cards.contact.BCONP(contact_id, slave, master, sfac, friction_id, ptype, cid, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

3D Contact Region Definition by Shell Elements (SOLs 101, 601 and 701)

Defines a 3D contact region by shell element IDs.

1

2

3

4

5

6

7

8

9

BCONP

ID

SLAVE

MASTER

SFAC

FRICID

PTYPE

CID

BCONP

95

10

15

1.0

33

1

Cid() → int[source]
FrictionId() → int[source]
Master() → int[source]
Slave() → int[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BCONP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
type = 'BCONP'
uncross_reference() → None[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BCRPARA(crid, offset=None, surf='TOP', Type='FLEX', grid_point=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

10

BCRPARA

CRID

SURF

OFFSET

TYPE

GP

Creates a BCRPARA card

Parameters
cridint

CRID Contact region ID.

offsetfloat; default=None

Offset distance for the contact region (Real > 0.0). None : OFFSET value in BCTPARA entry

surfstr; default=’TOP’

SURF Indicates the contact side. See Remark 1. {‘TOP’, ‘BOT’; )

Typestr; default=’FLEX’

Indicates whether a contact region is a rigid surface if it is used as a target region. {‘RIGID’, ‘FLEX’}. This is not supported for SOL 101.

grid_pointint; default=0

Control grid point for a target contact region with TYPE=RIGID or when the rigid-target algorithm is used. The grid point may be used to control the motion of a rigid surface. (Integer > 0). This is not supported for SOL 101.

commentstr; default=’’

a comment for the card

Type = None

Indicates whether a contact region is a rigid surface if it is used as a target region. See Remarks 3 and 4. (Character = “RIGID” or “FLEX”, Default = “FLEX”). This is not supported for SOL 101.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BCRPARA card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

crid = None

CRID Contact region ID. (Integer > 0)

grid_point = None

Control grid point for a target contact region with TYPE=RIGID or when the rigid-target algorithm is used. The grid point may be used to control the motion of a rigid surface. (Integer > 0) This is not supported for SOL 101.

offset = None

Offset distance for the contact region. See Remark 2. (Real > 0.0, Default =OFFSET value in BCTPARA entry)

raw_fields()[source]
surf = None

SURF Indicates the contact side. See Remark 1. (Character = “TOP” or “BOT”; Default = “TOP”)

type = 'BCRPARA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BCTADD(csid, contact_sets, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

BCTADD

CSID

SI

S2

S3

S4

S5

S6

S7

S8

S9

etc.

Remarks: 1. To include several contact sets defined via BCTSET entries in a model,

BCTADD must be used to combine the contact sets. CSID in BCTADD is then selected with the Case Control command BCSET.

  1. Si must be unique and may not be the identification of this or any other BCTADD entry.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BCTADD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

contact_sets = None

Identification numbers of contact sets defined via BCTSET entries. (Integer > 0)

csid = None

Contact set identification number. (Integer > 0)

raw_fields()[source]
type = 'BCTADD'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BCTPARA(csid, params, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines parameters for a surface-to-surface contact region.

1

2

3

4

5

6

7

8

BCTPARA

CSID

Param1

Value1

Param2

Value2

Param3

Value3

Param4

Value4

Param5

Value5

etc.

BCTPARA

1

TYPE

0

NSIDE

2

SEGNORM

-1

CSTIFF

1

OFFSET

0.015

Creates a BCTPARA card

Parameters
csidint

Contact set ID. Parameters defined in this command apply to contact set CSID defined by a BCTSET entry. (Integer > 0)

paramsdict[key]value

the optional parameters

commentstr; default=’’

a comment for the card

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BCTPARA card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

csid = None

Contact set ID. Parameters defined in this command apply to contact set CSID defined by a BCTSET entry. (Integer > 0)

raw_fields()[source]
type = 'BCTPARA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BCTSET(csid, sids, tids, frictions, min_distances, max_distances, comment='', sol=101)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

3D Contact Set Definition (SOLs 101, 601 and 701 only) Defines contact pairs of a 3D contact set.

1

2

3

4

5

6

7

BCTSET

CSID

SID1

TID1

FRIC1

MIND1

MAXD1

SID2 | TID2

FRIC2

MIND2

MAXD2

etc.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='', sol=101)[source]
csid = None

CSID Contact set identification number. (Integer > 0)

frictions = None

FRICi Static coefficient of friction for contact pair i. (Real; Default=0.0)

max_distances = None

MAXDi Maximum search distance for contact. (Real) (Sol 101 only)

min_distances = None

MINDi Minimum search distance for contact. (Real) (Sol 101 only)

raw_fields()[source]
sids = None

SIDi Source region (contactor) identification number for contact pair i. (Integer > 0)

tids = None

TIDi Target region identification number for contact pair i. (Integer > 0)

type = 'BCTSET'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BFRIC(friction_id: int, mu1: float, fstiff=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Slideline Contact Friction Defines frictional properties between two bodies in contact.

1

2

3

4

5

BFRIC

FID

FSTIF

MU1

Creates a BFRIC card, which defines a frictional contact.

Parameters
friction_idint

Friction identification number.

mu1float

Coefficient of static friction.

fstifffloat; default=None

Frictional stiffness in stick. See Remarks 2 and 3 Default=automatically selected by the program.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
raw_fields()[source]
type = 'BFRIC'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BLSEG(line_id, nodes, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

3D Contact Region Definition by Shell Elements (SOLs 101, 601 and 701)

Defines a 3D contact region by shell element IDs.

+=======+====+====+======+====+====+=====+====+====+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +——-+—-+—-+——+—-+—-+—–+—-+—-+ | BLSEG | ID | G1 | G2 | G3 | G4 | G5 | G6 | G7 | +——-+—-+—-+——+—-+—-+—–+—-+—-+ | BLSEG | ID | G1 | THRU | G2 | BY | INC | | | +——-+—-+—-+——+—-+—-+—–+—-+—-+

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BLSEG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property node_ids

returns nodeIDs for repr functions

raw_fields()[source]
type = 'BLSEG'
uncross_reference() → None[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BSURF(sid, eids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

3D Contact Region Definition by Shell Elements (SOLs 101, 601 and 701)

Defines a 3D contact region by shell element IDs.

1

2

3

4

5

6

7

8

9

BSURF

ID

EID1

EID2

EID3

EID4

EID5

EID6

EID7

EID8

EID9

EID10

etc.

BSURF

ID

EID1

THRU

EID2

BY

INC

EID8

EID9

EID10

EID11

etc.

EID8

THRU

EID9

BY

INC

BSURF

15

5

THRU

21

BY

4

27

30

32

33

35

THRU

44

67

68

70

85

92

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BSURF card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

eids = None

Element identification numbers of shell elements. (Integer > 0)

raw_fields()[source]
sid = None

Set identification number. (Unique Integer > 0)

type = 'BSURF'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.contact.BSURFS(bsurfs_id, eids, g1s, g2s, g3s, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a 3D contact region by the faces of the CHEXA, CPENTA or CTETRA elements.

Notes

  1. The continuation field is optional.

  2. BSURFS is a collection of one or more element faces on solid elements. BSURFS defines a contact region which may act as a contact source (contactor) or target.

  3. The ID must be unique with respect to all other BSURFS, BSURF, and BCPROP entries.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BSURFS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

eids = None

Element identification numbers of solid elements. (Integer > 0)

g1s = None

Identification numbers of 3 corner grid points on the face (triangular or quadrilateral) of the solid element. (Integer > 0)

id = None

Identification number of a contact region. See Remarks 2 and 3. (Integer > 0)

raw_fields()[source]
type = 'BSURFS'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

coordinate_systems Module
Inheritance diagram of pyNastran.bdf.cards.coordinate_systems

All coordinate cards are defined in this file. This includes:

  • CORD1R

  • CORD1C

  • CORD1S

  • CORD2R

  • CORD2C

  • CORD2S

{ug} = [Tgb]{ub} {ub} = [Tbg]{ug}

class pyNastran.bdf.cards.coordinate_systems.CORD1C(cid, g1, g2, g3, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Cord1x, pyNastran.bdf.cards.coordinate_systems.CylindricalCoord

Intilizes the CORD1C

1

2

3

4

5

6

7

8

CORD1C

CIDA

G1A

G2A

CIDB

G1B

G2B

G3B

Creates the CORD1C card, which defines a cylindrical coordinate system using 3 GRID points.

Parameters
cidint

the coordinate id

g1, g2, g3int

grid point 1, 2, 3

commentstr; default=’’

a comment for the card

Type = 'C'
raw_fields()[source]
type = 'CORD1C'
class pyNastran.bdf.cards.coordinate_systems.CORD1R(cid, g1, g2, g3, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Cord1x, pyNastran.bdf.cards.coordinate_systems.RectangularCoord

Intilizes the CORD1R

1

2

3

4

5

6

7

8

CORD1R

CIDA

G1A

G2A

CIDB

G1B

G2B

G3B

Creates the CORD1R card, which defines a rectangular coordinate system using 3 GRID points.

Parameters
cidint

the coordinate id

g1, g2, g3int

grid point 1, 2, 3

commentstr; default=’’

a comment for the card

Type = 'R'
int_type = 0
raw_fields()[source]
type = 'CORD1R'
class pyNastran.bdf.cards.coordinate_systems.CORD1S(cid, g1, g2, g3, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Cord1x, pyNastran.bdf.cards.coordinate_systems.SphericalCoord

Intilizes the CORD1S

1

2

3

4

5

6

7

8

CORD1S

CIDA

G1A

G2A

CIDB

G1B

G2B

G3B

Creates the CORD1S card, which defines a spherical coordinate system using 3 GRID points.

Parameters
cidint

the coordinate id

g1, g2, g3int

grid point 1, 2, 3

commentstr; default=’’

a comment for the card

Type = 'S'
raw_fields()[source]
type = 'CORD1S'
class pyNastran.bdf.cards.coordinate_systems.CORD2C(cid, origin, zaxis, xzplane, rid=0, setup=True, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Cord2x, pyNastran.bdf.cards.coordinate_systems.CylindricalCoord

Intilizes the CORD2C

1

2

3

4

5

6

7

8

CORD2C

CID

RID

A1

A2

A3

B1

B2

B3

C1

C2

C3

Creates the CORD2C card, which defines a cylindrical coordinate system using 3 vectors.

Parameters
cidint

coordinate system id

originList[float, float, float]

the origin of the coordinate system

zaxisList[float, float, float]

the z-axis of the coordinate system

xzplaneList[float, float, float]

a point on the xz plane

ridint; default=0

the referenced coordinate system that defines the system the vectors

commentstr; default=’’

a comment for the card

Type = 'C'
raw_fields()[source]
type = 'CORD2C'
class pyNastran.bdf.cards.coordinate_systems.CORD2R(cid: int, origin, zaxis, xzplane, rid: int = 0, setup: bool = True, comment: str = '')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Cord2x, pyNastran.bdf.cards.coordinate_systems.RectangularCoord

Intilizes the CORD2R

1

2

3

4

5

6

7

8

CORD2R

CID

RID

A1

A2

A3

B1

B2

B3

C1

C2

C3

Note

no type checking

Creates the CORD2R card, which defines a rectangular coordinate system using 3 vectors.

Parameters
cidint

coordinate system id

originList[float, float, float]

the origin of the coordinate system

zaxisList[float, float, float]

the z-axis of the coordinate system

xzplaneList[float, float, float]

a point on the xz plane

ridint; default=0

the referenced coordinate system that defines the system the vectors

commentstr; default=’’

a comment for the card

Type = 'R'
raw_fields()[source]
type = 'CORD2R'
class pyNastran.bdf.cards.coordinate_systems.CORD2S(cid, origin, zaxis, xzplane, rid=0, setup=True, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Cord2x, pyNastran.bdf.cards.coordinate_systems.SphericalCoord

Intilizes the CORD2S

1

2

3

4

5

6

7

8

CORD2S

CID

RID

A1

A2

A3

B1

B2

B3

C1

C2

C3

Creates the CORD2C card, which defines a spherical coordinate system using 3 vectors.

Parameters
cidint

coordinate system id

originList[float, float, float]

the origin of the coordinate system

zaxisList[float, float, float]

the z-axis of the coordinate system

xzplaneList[float, float, float]

a point on the xz plane

ridint; default=0

the referenced coordinate system that defines the system the vectors

commentstr; default=’’

a comment for the card

Type = 'S'
raw_fields()[source]
type = 'CORD2S'
class pyNastran.bdf.cards.coordinate_systems.CORD3G(cid, method_es, method_int, form, thetas, rid, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Coord

Defines a general coordinate system using three rotational angles as functions of coordinate values in the reference coordinate system. The CORD3G entry is used with the MAT9 entry to orient material principal axes for 3-D composite analysis.

1

2

3

4

5

6

7

8

CORD3G

CID

METHOD

FORM

THETAID1

THETAID2

THETAID3

CIDREF

CORD3G

100

E313

EQN

110

111

112

0

Defines the CORD3G card

Parameters
cidint

coordinate system id

method_esstr

flag for coordinate system type E : Eularian? S : Space?

method_intint

0-1000 E1000 = ‘E’ + 1000

formstr

EQN

thetasList[int]

???

ridint

the referenced coordinate system that defines the system the vectors???

commentstr; default=’’

a comment for the card

Rid()[source]
classmethod add_card(card, comment='')[source]

Adds a CORD3G card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

coord3g_transform_to_global(p)[source]
Parameters
p(3,) float ndarray

the point to transform

.. warning:: not done, just setting up how you’d do this
.. note:: per http://en.wikipedia.org/wiki/Euler_angles

“This means for example that a convention named (YXZ) is the result of performing first an intrinsic Z rotation, followed by X and Y rotations, in the moving axes (Note: the order of multiplication of matrices is the opposite of the order in which they’re applied to a vector).”

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
rotation_x(ct, st)[source]
rotation_y(ct, st)[source]
rotation_z(ct, st)[source]
type = 'CORD3G'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.coordinate_systems.Coord[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a general CORDxx object

Cid()[source]

Gets the coordinate ID

beta()[source]

Gets the 3 x 3 transformation

\[[\lambda] = [B_{ij}]\]
beta_n(n: int)[source]

Gets the 3n x 3n transformation

\[[\lambda] = [B_{ij}]\]
property global_to_local

Gets the 3 x 3 global to local transform

is_resolved = None

have all the transformation matricies been determined

property local_to_global

Gets the 3 x 3 local to global transform

move_origin(xyz: NDArray3float, maintain_rid: bool = False) → None[source]

Move the coordinate system to a new origin while maintaining the orientation

Parameters
xyzthe new origin point to move the coordinate to in

the global coordinate system

maintain_ridbool; default=False

set the rid to cid=0 if False

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

resolve()[source]
setup()[source]
\[e_{13} = e_3 - e_1\]
\[e_{12} = e_2 - e_1\]
\[k = \frac{e_{12}}{\lvert e_{12} \rvert}\]
\[j_{dir} = k \times e_{13}\]
\[j = \frac{j_{dir}}{\lvert j_{dir} \rvert}\]
\[i = j \times k\]
setup_global_cord2x()[source]

Sets up a global CORD2R, CORD2S, CORD2C

setup_no_xref(model: BDF)[source]
\[e_{13} = e_3 - e_1\]
\[e_{12} = e_2 - e_1\]
\[k = \frac{e_{12}}{\lvert e_{12} \rvert}\]
\[j_{dir} = k \times e_{13}\]
\[j = \frac{j_{dir}}{\lvert j_{dir} \rvert}\]
\[i = j \times k\]
transform_matrix_to_global(matrix)[source]
transform_matrix_to_global_from_element_coord(matrix, n: int, i, j, k)[source]
type = 'COORD'
class pyNastran.bdf.cards.coordinate_systems.Cord1x(cid, g1, g2, g3, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Coord

Parent class for:
  • CORD1R

  • CORD1C

  • CORD1S

Initializes the CORD1R, CORD1C, CORD1S card

Parameters
cidint

the coordinate id

g1, g2, g3int

grid point 1, 2, 3

commentstr; default=’’

a comment for the card

G1()[source]
G2()[source]
G3()[source]
Rid()[source]

Gets the reference coordinate system self.rid

classmethod add_card(card, icard=0, comment='')[source]
Parameters
cardBDF()

a BDFCard object

icardint

the coordinate location on the line (there are possibly 2 coordinates on 1 card)

commentstr; default=’’

a comment for the card

cid = None

the coordinate ID

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, cids)[source]

exports the coords in a vectorized way

g1 = None

a Node at the origin

g2 = None

a Node on the z-axis

g3 = None

a Node on the xz-plane

property node_ids

Gets the integers for the node [g1,g2,g3]

rid = 0
setup()[source]

Finds the position of the nodes used define the coordinate system and sets the ijk vectors

to_cord2x(model, rid=0)[source]

Converts a coordinate system from a CORD1x to a CORD2x

Parameters
modelBDF()

a BDF model

ridint; default=0

The relative coordinate system

uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double: bool = False) → str[source]

Writes a CORD1x card in 16-field format

class pyNastran.bdf.cards.coordinate_systems.Cord2x(cid: int, origin, zaxis, xzplane, rid: int = 0, setup: bool = True, comment: str = '')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Coord

Parent class for:
  • CORD2R

  • CORD2C

  • CORD2S

This method emulates the CORD2x card.

Parameters
cidint

coord id

originndarray/None

the origin None -> [0., 0., 0.]

zaxisndarray/None

a point on the z-axis None -> [0., 0., 1.]

xzplanendarray/None

a point on the xz-plane None -> [1., 0., 0.]

ridint; default=0

reference coord id

.. note: no type checking
Rid()[source]

Gets the reference coordinate system self.rid

classmethod _add(cid, origin, zaxis, xzplane, rid=0, comment='')[source]
_finish_setup()[source]
classmethod add_axes(cid, rid=0, origin=None, xaxis=None, yaxis=None, zaxis=None, xyplane=None, yzplane=None, xzplane=None, comment='')[source]

Create a coordinate system based on a defined axis and point on the plane. This is the generalized version of the CORD2x card.

Parameters
cidint

the new coordinate system id

ridint; default=0

the new reference coordinate system id

origin(3,) ndarray

defines the location of the origin in the global coordinate frame

xaxis(3,) ndarray

defines the x axis (default=None)

yaxis(3,) ndarray

defines the y axis (default=None)

zaxis(3,) ndarray

defines the z axis (default=None)

Notes

One axis (xaxis, yaxis, zaxis) and one plane (xyplane, yzplane, xz plane) must be defined; the others must be None

The axes and planes are defined in the rid coordinate system

classmethod add_card(card, comment='')[source]

Defines the CORD2x class

classmethod add_ijk(cid, origin=None, i=None, j=None, k=None, rid=0, comment='')[source]

Create a coordinate system based on 2 or 3 perpendicular unit vectors

Parameters
cidint

the new coordinate system id

origin(3,) float ndarray

defines the location of the origin in the global coordinate frame

ridint; default=0

the new reference coordinate system id

i(3,) float ndarray

defines the i unit vector

j(3,) float ndarray

defines the j unit vector

k(3,) float ndarray

defines the k unit vector

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

.. warning:: Doesn’t set rid to the coordinate system if it’s in the

global. This isn’t a problem. It’s meant to speed up the code in order to resolve extra coordinate systems.

classmethod export_to_hdf5(h5_file, model, cids)[source]

exports the coords in a vectorized way

classmethod init_from_empty()[source]
uncross_reference() → None[source]

Removes cross-reference links

update(unused_nid_map, cid_map)[source]
maps = {

‘node’ : nid_map, ‘coord’ : cid_map,

}

update_e123(maintain_rid: bool = False) → None[source]

If you move the coordinate frame, e1, e2, e3 does not update. This updates the coordinate system.

Parameters
maintain_ridbool; default=False

set the rid to cid=0 if False

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double: bool = False) → str[source]

Writes a CORD2x card in 16-field format

class pyNastran.bdf.cards.coordinate_systems.CylindricalCoord[source]

Bases: object

defines common methods for cylindrical coordinate systems

\[r = \sqrt(x^2+y^2)\]
\[\theta = tan^{-1}\left(\frac{y}{x}\right)\]
\[z = z\]
\[x = r cos(\theta)\]
\[y = r sin(\theta)\]
\[z = z\]
\[p = [x,y,z] + e_1\]

http://en.wikipedia.org/wiki/Cylindrical_coordinate_system

static coord_to_cylindrical(p)[source]
static coord_to_spherical(rtz)[source]

R-theta-z to rho-theta-phi transform

static coord_to_xyz(p)[source]
y       R
|     /
|   /
| / theta
*------------x
\[x = R \cos(\theta)\]
\[y = R \sin(\theta)\]
Returns
xyz(3,) float ndarray

the point in the local coordinate system

static coord_to_xyz_array(p)[source]
y       R
|     /
|   /
| / theta
*------------x
\[x = R \cos(\theta)\]
\[y = R \sin(\theta)\]
Returns
xyz(3,) float ndarray

the point in the local coordinate system

global_to_basic(xyz_global)[source]
static xyz_to_coord(xyz: NDArray3float)[source]
Returns
xyz(3,) float ndarray

the delta xyz point in the local coordinate system

static xyz_to_coord_array(p)[source]
y       R
|     /
|   /
| / theta
*------------x
\[x = R \cos(\theta)\]
\[y = R \sin(\theta)\]
Returns
rtp(3,) float ndarray

the point in the local coordinate system

class pyNastran.bdf.cards.coordinate_systems.GMCORD(cid, entity, gm_ids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

defines the GMCOORD class

GMCORD | CID | ENTITY | ID1 | ID2 | GMCORD | 101 | GMCURV | 26 | 44 |

Creates a GMCOORD

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GMCORD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

static cross_reference(model: BDF) → None[source]
raw_fields()[source]
setup()[source]
type = 'GMCORD'
static uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.coordinate_systems.RectangularCoord[source]

Bases: object

defines common methods for rectangular coordinate systems

static coord_to_xyz(p)[source]
Returns
xyz(3,) ndarray

the point in the local coordinate system

static coord_to_xyz_array(p)[source]
Returns
xyz(n, 3) ndarray

the point in the local coordinate system

global_to_basic(xyz_global)[source]
static xyz_to_coord(p)[source]
Returns
xyz(3,) ndarray

the delta xyz point in the local coordinate system

static xyz_to_coord_array(p)[source]
Returns
xyz(n, 3) ndarray

the delta xyz point in the local coordinate system

class pyNastran.bdf.cards.coordinate_systems.SphericalCoord[source]

Bases: object

defines common methods for spherical coordinate systems

\[r = \rho = \sqrt(x^2+y^2+z^2)\]
\[\theta = \cos^{-1}\left(\frac{z}{r}\right)\]
\[\phi = \tan^{-1}\left(\frac{y}{x}\right)\]
\[x = r \sin(\theta)\cos(\phi)\]
\[y = r \sin(\theta)\sin(\phi)\]
\[z = r \cos(\theta)\]
\[p = [x,y,z]\]
static coord_to_cylindrical(p)[source]

hasn’t been tested

static coord_to_spherical(p)[source]
static coord_to_xyz(p)[source]
Returns
xyz(3,) float ndarray

the R, theta, phi in the local coordinate system

static coord_to_xyz_array(p)[source]
Returns
xyz(3,) float ndarray

the R, theta, phi in the local coordinate system

global_to_basic(xyz_global)[source]
static xyz_to_coord(p)[source]
Returns
xyz(3, ) float ndarray

the local XYZ point in the R, theta, phi coordinate system

static xyz_to_coord_array(p)[source]
Returns
xyz(3, ) float ndarray

the local XYZ point in the R, theta, phi coordinate system

pyNastran.bdf.cards.coordinate_systems._check_square(matrix: numpy.ndarray)[source]
pyNastran.bdf.cards.coordinate_systems._fix_xyz_shape(xyz: NDArray3float, name: str = 'xyz') → NDArray3float[source]

Checks the shape of a grid point location and fixes it if possible

Parameters
xyz(N, 3) float ndarray

the xyz locations

namestr; default=’xyz’

the name in case of an error

pyNastran.bdf.cards.coordinate_systems._primary_axes(coord)[source]

gets the i,j,k axes from the ???

pyNastran.bdf.cards.coordinate_systems.create_coords_along_line(model, p1, p2, percents, cid=0, axis=1)[source]

Creates a series of coordinate systems

Parameters
modelBDF()

the model

p1(3,) float ndarray

the start point

p2(3,) float ndarray

the end point

percents(ncoords, ) float ndarray

the location of the coords (0. to 1.; inclusive)

cidint; default=0

the reference coordinate system

axisint; default=1

the axis normal to the plane; defines the “x” axis

Returns
xyz_cid0(nnodes, 3) float ndarray

the xyz locations the global (basic) coordinate system

nid_cp_cd(nnodes, 3) int ndarray

the node_id, cp coord, cd coord

icd_transform???

a mapping of the cid to nids???

cidsList[int]

the created coordinate system ids

originsList[(ox, oy, oz)]

the origin of each coordinate system

cid_to_inidsDict[cid] -> inids

maps the coord id to the index of the nodes along the axis cid : int

the coord id

inids : (nnodes_in_cid)

Warning

  • requires at least 1 node

pyNastran.bdf.cards.coordinate_systems.define_coord_e123(model: BDF, cord2_type: str, cid: int, origin: NDArray3float, rid: int = 0, xaxis=None, yaxis=None, zaxis=None, xyplane=None, yzplane=None, xzplane=None, add=True)[source]

Create a coordinate system based on a defined axis and point on the plane. This is the generalized version of the CORDx card.

Parameters
modelBDF()

a BDF object

cord2_typestr

‘CORD2R’, ‘CORD2C’, ‘CORD2S’

cidint

the new coordinate system id

origin(3,) ndarray

defines the location of the origin in the global coordinate frame

ridint; default=0

the new reference coordinate system id

xaxis(3,) ndarray

defines the x axis (default=None)

yaxis(3,) ndarray

defines the y axis (default=None)

zaxis(3,) ndarray

defines the z axis (default=None)

addbool; default=True

adds the coordinate system to the model

Returns
coordCORD2R, CORD2C, CORD2S

the coordinate system

Notes

One axis (xaxis, yaxis, zaxis) and one plane (xyplane, yzplane, xz plane) must be defined; the others must be None.

The axes and planes are defined in the rid coordinate system

Todo

hasn’t been tested…

pyNastran.bdf.cards.coordinate_systems.define_coord_ijk(model, cord2_type, cid, origin, rid=0, i=None, j=None, k=None, add=True)[source]

Create a coordinate system based on 2 or 3 perpendicular unit vectors

Parameters
modelBDF()

a BDF object

cord2_typestr

‘CORD2R’, ‘CORD2C’, ‘CORD2S’

cidint

the new coordinate system id

origin(3,) ndarray

defines the location of the origin in the global coordinate frame

ridint; default=0

the new reference coordinate system id

i(3,) ndarray

defines the i unit vector

j(3,) ndarray

defines the j unit vector

k(3,) ndarray

defines the k unit vector

addbool; default=True

adds the coordinate system to the model

Returns
coordCORD2R, CORD2C, CORD2S

the coordinate system

pyNastran.bdf.cards.coordinate_systems.define_spherical_cutting_plane(model: BDF, origin: NDArray3float, rid: int, cids: List[int], thetas: List[float], phis: List[float])[source]

Creates a series of coordinate systems defined as constant origin, with a series of theta and phi angles, which are defined about the aerodynamic axis <1, 0, 0>. This is intended to be with a supersonic mach plane for calculating wave drag where:

\[\theta = \mu = \frac{1}{\sqrt(Mach^2 - 1)}\]
\[\phi = [-\pi, \pi]\]
Parameters
modelBDF()

a BDF object

origin(3, ) float ndarray

defines the location of the origin in the global coordinate frame

ridint

the new spherical reference coordinate system id

cidsList[int, …]

list of new coordinate system ids

thetasList[float, …]

list of thetas (in radians)

phis: List[float, …]

list of phis (in radians)

Notes

creates 1 CORD2S and ncid CORD2R coordinate systems

Todo

hasn’t been tested…

pyNastran.bdf.cards.coordinate_systems.get_nodes_along_axis_in_coords(model, nids, xyz_cp, icp_transform, cids)[source]
Parameters
modelBDF()

the model

nids(nnodes, ) ndarray

the nodes of the model

xyz_cp(nnodes, 3) float ndarray

the xyz locations in a representative local coordinate system for example, for cid=0, use xyz_cid0

icp_transformDict[cp cid] -> inids

a mapping of the CP coord to the node indices

icd_transformDict[cd cid] -> inids

a mapping of the CD coord to the node indices

cidsList[int]

the created coordinate system ids

Returns
#originsList[(ox, oy, oz)]

#the origin of each coordinate system

cid_to_inidsDict[cid] -> inids

maps the coord id to the index of the nodes along the axis cid : int

the coord id

inids : (nnodes_in_cid)

pyNastran.bdf.cards.coordinate_systems.global_to_basic_cylindrical(coord, xyz_global, dtype='float64')[source]
pyNastran.bdf.cards.coordinate_systems.global_to_basic_rectangular(coord, unused_xyz_global, dtype='float64')[source]
pyNastran.bdf.cards.coordinate_systems.global_to_basic_spherical(coord, xyz_global, dtype='float64')[source]
pyNastran.bdf.cards.coordinate_systems.normalize(v)[source]

Normalizes v into a unit vector.

Parameters
v(3, ) float ndarray

the vector to normalize

Returns
vn(3, ) float ndarray

normalized v

\[v_{norm} = \frac{v}{\lvert v \lvert} ..\]
pyNastran.bdf.cards.coordinate_systems.transform_coords_vectorized(cps_to_check0, icp_transform, nids, xyz_cp, xyz_cid0, xyz_cid0_correct, coords, do_checks)[source]

Transforms coordinates in a vectorized way

Parameters
cps_to_check0List[int]

the Cps to check

icp_transformdict{int cp(n,) int ndarray}

Dictionary from coordinate id to index of the nodes in self.point_ids that their input (CP) in that coordinate system.

nids(n, ) int ndarray

the GRID/SPOINT/EPOINT ids corresponding to xyz_cp

xyz_cp(n, 3) float ndarray

points in the CP coordinate system

xyz_cid(n, 3) float ndarray

points in the CID coordinate system

xyz_cid_correct(n, 3) float ndarray

points in the CID coordinate system

unused_in_placebool, default=False

If true the original xyz_cp is modified, otherwise a new one is created.

do_checksbool; default=False

internal value for testing True : makes use of xyz_cid_correct False : xyz_cid_correct is unused

Returns
nids_checked(nnodes_checked,) int ndarray

the node ids that were checked

cps_checkedList[int]

the Cps that were checked

cps_to_checkList[int]

the Cps that are unreferenceable given the current information

dmig Module
Inheritance diagram of pyNastran.bdf.cards.dmig
class pyNastran.bdf.cards.dmig.DMI(name: str, matrix_form: int, tin: int, tout: int, nrows: int, ncols: int, GCj, GCi, Real, Complex=None, comment='', finalize=True)[source]

Bases: pyNastran.bdf.cards.dmig.NastranMatrix

1

2

3

4

5

6

7

8

9

DMI

NAME

0

FORM

TIN

TOUT

M

N

DMI

NAME

J

I1

A(I1,J)

A(I1,J)

A(I1+1,J)

A(I1+2,J)

etc.

I2

etc.

Creates a NastranMatrix

Parameters
namestr

the name of the matrix

matrix_formint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]

the jnode, jDOFs

GCiList[(node, dof)]

the inode, iDOFs

RealList[float]

The real values

ComplexList[float]; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

_get_complex_fields(func)[source]
_get_real_fields(func)[source]
classmethod _init_from_empty()[source]
_properties = ['shape', 'ifo', 'is_real', 'is_complex', 'is_polar', 'matrix_type', 'tin_dtype', 'tout_dtype']
_read_complex(card)[source]

reads a complex DMI column

_read_real(card)[source]

reads a real DMI column

_write_card(func)[source]

writes the card in single/double precision

classmethod add_card(card, comment='')[source]

Adds a DMI card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

classmethod export_to_hdf5(h5_file, model, encoding)[source]
finalize()[source]

converts the lists into numpy arrays

get_matrix(is_sparse: bool = False, apply_symmetry: bool = True) → Tuple[numpy.array, None, None][source]

Builds the Matrix

Parameters
is_sparsebool; default=False

should the matrix be returned as a sparse matrix. Slower for dense matrices.

apply_symmetrybool; default=True

If the matrix is symmetric (ifo=6), returns a symmetric matrix. Supported as there are symmetric matrix routines.

Returns
Mnumpy.ndarray or scipy.coomatrix

the matrix

rowsdict[int] = [int, int]

dictionary of keys=rowID, values=(Grid,Component) for the matrix

cols: dict[int] = [int, int]

dictionary of keys=columnID, values=(Grid,Component) for the matrix

Warning

is_sparse=True WILL fail ..

property ifo

#: 4-Lower Triangular; 5=Upper Triangular; 6=Symmetric; 8=Identity (m=nRows, n=m)

#: Form of the matrix: 1=Square (not symmetric); 2=Rectangular; #: 3=Diagonal (m=nRows,n=1); 4=Lower Triangular; 5=Upper Triangular; #: 6=Symmetric; 8=Identity (m=nRows, n=m) self.matrix_form = integer(card, 3, ‘matrix_form’)

property is_complex

real vs. complex attribute

property is_polar
Used by:
  • DMIG

  • DMIJ

  • DMIJI

  • DMIK

Not used by:
  • DMI

  • DMIAX

  • DMIG, UACCEL

  • DMIGOUT

  • DMIGROT

property is_real

real vs. complex attribute

property matrix_type

gets the matrix type

1 Square matrix (not symmetric) 2 General rectangular matrix 3 Diagonal matrix (M=number of rows, N = 1) #4 Lower triangular factor #5 Upper triangular factor 6 Symmetric matrix 8 Identity matrix (M=number of rows, N = M)

raw_fields()[source]

Warning

All the writers are bad because Nastran insists on making columns a single DMI card. This makes writing a card much harder, so there are a lot of NotImplementedErrors floating about.

This is an invalid method, but is not disabled because it’s currently needed for checking results

property shape

gets the matrix shape

type = 'DMI'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16()[source]

writes the card in single precision

write_card_8()[source]

writes the card in single precision

write_card_double()[source]

writes the card in double precision

class pyNastran.bdf.cards.dmig.DMIAX(name, matrix_form, tin, tout, ncols, GCNj, GCNi, Real, Complex=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Direct Matrix Input for Axisymmetric Analysis

Defines axisymmetric (fluid or structure) related direct input matrix terms. The matrix is defined by a single header entry and one or more column entries. Only one header entry is required. A column entry is required for each column with nonzero elements.

1

2

3

4

5

6

7

8

9

DMIAX

NAME

0

IFO

TIN

TOUT

1

2

3

4

5

6

7

8

9

DMIAX

NAME

GJ

CJ

NJ

G1

C1

N1

A1

B1

G2

C2

etc.

1

2

3

4

5

6

7

8

9

DMIAX

B2PP

0

1

3

DMIAX

B2PP

32

1027

3

4.25+6

2.27+3

Creates a DMIAX card

Parameters
namestr

the name of the matrix

matrix_formint

matrix shape 1=Square 2=General Rectangular 6=Symmetric

tinint

matrix input precision 1=Real, Single Precision 3=Complex, Single Precision

toutint

matrix output precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

GCNjList[(node, dof, harmonic_number)]???

the jnode, jDOFs

GCNiList[(node, dof, harmonic_number)]???

the inode, iDOFs

RealList[float]???

The real values

ComplexList[float]???; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

_write_card(func)[source]

writes the card

classmethod add_card(card, comment='')[source]

Adds a NastranMatrix (DMIAX) card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

classmethod export_to_hdf5(h5_file, model, encoding)[source]
finalize()[source]

converts the lists into numpy arrays

property is_complex

is the matrix complex

property is_polar

is the matrix polar (vs real/imag)?

property is_real

is the matrix real?

matrix_form = None

ifo/4-Lower Triangular; 5=Upper Triangular; 6=Symmetric; 8=Identity (m=nRows, n=m)

property matrix_type

gets the matrix type

raw_fields()[source]
property tin_dtype

gets the input dtype

tout = None

0-Set by cell precision

property tout_dtype

gets the output dtype

type = 'DMIAX'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16()[source]

writes the card in small large format

write_card_8()[source]

writes the card in small field format

class pyNastran.bdf.cards.dmig.DMIG(name, ifo, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='', finalize=True)[source]

Bases: pyNastran.bdf.cards.dmig.NastranMatrix

Defines direct input matrices related to grid, extra, and/or scalar points. The matrix is defined by a single header entry and one or more column entries. A column entry is required for each column with nonzero elements.

1

2

3

4

5

6

7

8

9

DMIG

NAME

0

IFO

TIN

TOUT

POLAR

NCOL

DMIG

NAME

GJ

CJ

G1

C1

A1

B1

G2

C2

A2

B2

Creates a DMIG card

Parameters
namestr

the name of the matrix

ifoint

matrix shape 2/9=Rectangular 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]

the [jnode, jDOFs] columns

GCiList[(node, dof)]

the [inode, iDOFs] rows

RealList[float]

The real values

ComplexList[float]; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

_properties = ['is_real', 'is_complex', 'is_polar', 'matrix_type', 'shape', 'tin_dtype', 'tout_dtype']
classmethod export_to_hdf5(h5_file, model, encoding)[source]
type = 'DMIG'
class pyNastran.bdf.cards.dmig.DMIG_UACCEL(tin, ncol, load_sequences, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Direct Matrix Input of Enforced Static Acceleration Defines rigid body accelerations in the basic coordinate system.

1

2

3

4

5

6

7

8

DMIG

UACCEL

“0”

“9”

TIN

NCOL

DMIG

UACCEL

L

G1

C1

X1

G2

C2

X2

G3

C3

X3

DMIG

UACCEL

0

9

1

4

DMIG

UACCEL

2

2

3

386.4

DMIG

UACCEL

3

2

4

3.0

DMIG

UACCEL

4

2

6

1.0

_write_card(func) → str[source]

writes the card

classmethod add_card(card, comment='')[source]

Adds a DMIG,UACCEL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

classmethod export_to_hdf5(h5_file, model, encoding)[source]
static finalize()[source]

a passer method

name = 'UACCEL'
raw_fields()[source]
type = 'DMIG'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16() → str[source]

writes the card in small large format

write_card_8() → str[source]

writes the card in small field format

class pyNastran.bdf.cards.dmig.DMIJ(name, matrix_form, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='', finalize=True)[source]

Bases: pyNastran.bdf.cards.dmig.NastranMatrix

Direct Matrix Input at js-Set of the Aerodynamic Mesh Defines direct input matrices related to collation degrees-of-freedom (js-set) of aerodynamic mesh points for CAERO1, CAERO3, CAERO4 and CAERO5 and for the slender body elements of CAERO2. These include W2GJ, FA2J and input pressures and downwashes associated with AEPRESS and AEDW entries. The matrix is described by a single header entry and one or more column entries. A column entry is required for each column with nonzero elements. For entering data for the interference elements of a CAERO2, use DMIJI or DMI.

Creates a DMIJ card

Parameters
namestr

the name of the matrix

matrix_formint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]???

the jnode, jDOFs

GCiList[(node, dof)]???

the inode, iDOFs

RealList[float]???

The real values

ComplexList[float]???; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['shape', 'ifo', 'is_real', 'is_complex', 'is_polar', 'matrix_type', 'tin_dtype', 'tout_dtype']
classmethod export_to_hdf5(h5_file, model, encoding)[source]
type = 'DMIJ'
class pyNastran.bdf.cards.dmig.DMIJI(name: str, ifo: int, tin: int, tout: int, polar: int, ncols: int, GCj, GCi, Real, Complex=None, comment: str = '', finalize: bool = True)[source]

Bases: pyNastran.bdf.cards.dmig.NastranMatrix

Direct Matrix Input at js-Set of the Interference Body Defines direct input matrices related to collation degrees-of-freedom (js-set) of aerodynamic mesh points for the interference elements of CAERO2. These include W2GJ, FA2J and input pressures and downwashes associated with AEPRESS and AEDW entries. The matrix is described by a single header entry and one or more column entries. A column entry is required for each column with nonzero elements. For entering data for the slender elements of a CAERO2, or a CAERO1, 3, 4 or 5 use DMIJ or DMI.

Creates a DMIJI card

Parameters
namestr

the name of the matrix

ifoint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]???

the jnode, jDOFs

GCiList[(node, dof)]???

the inode, iDOFs

RealList[float]???

The real values

ComplexList[float]???; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

_properties = ['shape', 'ifo', 'is_real', 'is_complex', 'is_polar', 'matrix_type', 'tin_dtype', 'tout_dtype']
classmethod export_to_hdf5(h5_file, model, encoding)[source]
type = 'DMIJI'
class pyNastran.bdf.cards.dmig.DMIK(name, ifo, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='', finalize=True)[source]

Bases: pyNastran.bdf.cards.dmig.NastranMatrix

Direct Matrix Input at ks-Set of the Aerodynamic Mesh Defines direct input matrices related to physical (displacement) degrees-of-freedom (ks-set) of aerodynamic grid points. These include WKK, WTFACT and input forces associated with AEFORCE entries. The matrix is described by a single header entry and one or more column entries. A column entry is required for each column with nonzero elements.

1

2

3

4

5

6

7

8

9

DMIK

NAME

0

IFO

TIN

TOUT

POLAR

NCOL

DMIK

NAME

GJ

CJ

G1

C1

A1

B1

G2

C2

A2

B2

DMIK

ALPH1

0

9

2

0

1

DMIK

ALPH1

1

1

1

1

1.0

2

1

1.0

Creates a DMIK card

Parameters
namestr

the name of the matrix

ifoint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]

the jnode, jDOFs

GCiList[(node, dof)]

the inode, iDOFs

RealList[float]

The real values

ComplexList[float]; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

_properties = ['shape', 'ifo', 'is_real', 'is_complex', 'is_polar', 'matrix_type', 'tin_dtype', 'tout_dtype']
classmethod export_to_hdf5(h5_file, model, encoding)[source]
type = 'DMIK'
class pyNastran.bdf.cards.dmig.DTI(name, fields, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

DTI

UNITS

“1”

MASS

FORCE

LENGTH

TIME

STRESS

MSC

1

2

3

4

5

6

7

8

DTI

UNITS

“1”

MASS

FORCE

LENGTH

TIME

TEMPERATURE

NX

Creates a DTI card

Parameters
namestr

UNITS

fieldsList[varies]

the fields

commentstr; default=’’

a comment for the card

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
classmethod add_card(card, comment)[source]

Adds a DTI card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the elements in a vectorized way

raw_fields()[source]
type = 'DTI'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dmig.NastranMatrix(name, matrix_form, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='', finalize=True)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Base class for the DMIG, DMIJ, DMIJI, DMIK matrices

Creates a NastranMatrix

Parameters
namestr

the name of the matrix

matrix_formint

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tinint

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

toutint

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polarint; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncolsint

???

GCjList[(node, dof)]

the jnode, jDOFs

GCiList[(node, dof)]

the inode, iDOFs

RealList[float]

The real values

ComplexList[float]; default=None

The complex values (if the matrix is complex)

commentstr; default=’’

a comment for the card

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]

Adds a NastranMatrix (DMIG, DMIJ, DMIK, DMIJI) card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

fill_in_default_components(model: BDF) → None[source]
finalize()[source]

converts the lists into numpy arrays

get_matrix(is_sparse: bool = False, apply_symmetry: bool = True)[source]

Builds the Matrix

Parameters
is_sparsebool; default=False

should the matrix be returned as a sparse matrix. Slower for dense matrices.

apply_symmetrybool; default=True

If the matrix is symmetric (ifo=6), returns a symmetric matrix. Supported as there are symmetric matrix routines.

Returns
Mnumpy.ndarray or scipy.coomatrix

the matrix

rowsdict[int] = [int, int]

dictionary of keys=rowID, values=(Grid,Component) for the matrix

cols: dict[int] = [int, int]

dictionary of keys=columnID, values=(Grid,Component) for the matrix

Warning

is_sparse=True WILL fail ..

property is_complex

real vs. complex attribute

property is_polar
Used by:
  • DMIG

  • DMIJ

  • DMIJI

  • DMIK

Not used by:
  • DMI

  • DMIAX

  • DMIG, UACCEL

  • DMIGOUT

  • DMIGROT

property is_real

real vs. complex attribute

matrix_form = None

4-Lower Triangular; 5=Upper Triangular; 6=Symmetric; 8=Identity (m=nRows, n=m)

property matrix_type

gets the matrix type

polar = None

Input format of Ai, Bi. (Integer=blank or 0 indicates real, imaginary format; Integer > 0 indicates amplitude, phase format.)

property shape

gets the matrix shape

property tin_dtype

gets the input dtype

tout = None

0-Set by cell precision

property tout_dtype

gets the output dtype

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.dmig._determine_size_double_from_tin(tin: int, size: int, is_double: bool) → Tuple[int, bool][source]

we ignore the requested is_double flag because otherwise Nastran can’t read in the matrix

pyNastran.bdf.cards.dmig._export_dmiax_to_hdf5(h5_file, model, dict_obj, encoding: str) → None[source]

export dmiax

pyNastran.bdf.cards.dmig._export_dmig_to_hdf5(h5_file, model: BDF, dict_obj, encoding: str) → None[source]

export dmigs, dmij, dmiji, dmik, dmi

pyNastran.bdf.cards.dmig._fill_dense_column_matrix(self, nrows, ncols, ndim, rows, cols, apply_symmetry)[source]

helper method for get_matrix

pyNastran.bdf.cards.dmig._fill_dense_rectangular_matrix(self, nrows, ncols, ndim, rows, cols, apply_symmetry)[source]

helper method for get_matrix

pyNastran.bdf.cards.dmig._fill_sparse_matrix(matrix: pyNastran.bdf.cards.dmig.DMIG, nrows: int, ncols: int)[source]

helper method for get_matrix

pyNastran.bdf.cards.dmig._get_real_dtype(type_flag: int) → str[source]

A complex64 array is made up of two float32 arrays.

pyNastran.bdf.cards.dmig._get_row_col_map_1d(matrix, GCi, GCj, ifo: int)[source]

helper for get_row_col_map

pyNastran.bdf.cards.dmig._get_row_col_map_2d(matrix, GCi, GCj, ifo)[source]

helper for get_row_col_map

pyNastran.bdf.cards.dmig._set_polar(polar) → int[source]
pyNastran.bdf.cards.dmig.get_dmi_matrix(matrix: pyNastran.bdf.cards.dmig.DMI, is_sparse: bool = False, apply_symmetry: bool = True) → Tuple[numpy.array, None, None][source]

Builds the Matrix

Parameters
is_sparsebool

should the matrix be returned as a sparse matrix (default=True). Slower for dense matrices.

apply_symmetry: bool

If the matrix is symmetric (matrix_form=6), returns a symmetric matrix. Supported as there are symmetric matrix routines. TODO: unused…

Returns
Mndarray

the matrix

rowsNone

unused

colsNone

unused

Warning

is_sparse=True WILL fail ..

pyNastran.bdf.cards.dmig.get_matrix(self: pyNastran.bdf.cards.dmig.DMIG, is_sparse: bool = False, apply_symmetry: bool = False) → Tuple[Any, Dict[int, Any], Dict[int, Any]][source]

Builds the Matrix

Parameters
is_sparsebool; default=False

should the matrix be returned as a sparse matrix. Slower for dense matrices.

apply_symmetry: bool; default=False

If the matrix is symmetric (matrix_form=6), returns a symmetric matrix. Supported as there are symmetric matrix routines. TODO: unused…

Returns
Mndarray

the matrix

rowsDict[(nid, nid)] = float

dictionary of keys=rowID, values=(Grid,Component) for the matrix

colsDict[(int, int)] = float

dictionary of keys=columnID, values=(Grid,Component) for the matrix

Warning

is_sparse=True WILL fail ..

pyNastran.bdf.cards.dmig.get_row_col_map(matrix: pyNastran.bdf.cards.dmig.DMIG, GCi: numpy.ndarray, GCj: numpy.ndarray, ifo: int) → Tuple[int, int, int, numpy.ndarray, numpy.ndarray, Dict[int, Any], Dict[int, Any]][source]
dynamic Module
Inheritance diagram of pyNastran.bdf.cards.dynamic

All dynamic control cards are defined in this file. This includes:

  • FREQ

  • FREQ1

  • FREQ2

  • FREQ3

  • FREQ4

  • FREQ5

  • NLPCI

  • NLPARM

  • TSTEP

  • TSTEP1

  • TSTEPNL

  • ROTORG

  • ROTORD

  • TIC

  • TF

All cards are BaseCard objects.

class pyNastran.bdf.cards.dynamic.DELAY(sid, nodes, components, delays, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

DELAY

SID

POINT ID1

C1

T1

P2

C2

T2

Creates a DELAY card

Parameters
sidint

DELAY id that is referenced by a TLOADx, RLOADx or ACSRCE card

nodesList[int]

list of nodes that see the delay len(nodes) = 1 or 2

componentsList[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

delaysList[float]

Time delay (tau) for designated point Pi and component Ci len(nodes) = len(delays)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_id1', 'node_id2', 'node_ids']
add(delay)[source]
classmethod add_card(card, comment='')[source]

Adds a DELAY card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

components = None

Component number. (Integers 1 through 6 for grid points; zero or blank for extra or scalar points)

cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

delays = None

Time delay (tau) for designated point Pi and component Ci. (Real)

get_delay_at_freq(freq)[source]
property node_id1
property node_id2
property node_ids
nodes = None

Grid, extra, or scalar point identification number. (Integer > 0)

raw_fields()[source]
sid = None

Identification number of DELAY entry. (Integer > 0)

type = 'DELAY'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.DPHASE(sid, nodes, components, phase_leads, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines the phase lead term θ in the equation of the dynamic loading function.

1

2

3

4

5

6

7

8

DPHASE

SID

POINT ID1

C1

TH1

P2

C2

TH2

Creates a DPHASE card

Parameters
sidint

DPHASE id that is referenced by a RLOADx or ACSRCE card

nodesList[int]

list of nodes that see the delay len(nodes) = 1 or 2

componentsList[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

phase_leadsList[float]

Phase lead θ in degrees. len(nodes) = len(delays)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_id1', 'node_id2', 'node_ids']
add(dphase)[source]
classmethod add_card(card, comment='')[source]

Adds a DPHASE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_dphase_at_freq(freq)[source]
property node_id1
property node_id2
property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'DPHASE'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.FREQ(sid, freqs, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a set of frequencies to be used in the solution of frequency response problems.

1

2

3

4

5

6

7

8

9

FREQ

SID

F1

F2

etc.

Creates a FREQ card

Parameters
sidint

set id referenced by case control FREQUENCY

freqsList[float]

the frequencies for a FREQx object

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a FREQ card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

add_frequencies(freqs)[source]

Combines the frequencies from 1 FREQx object with another. All FREQi entries with the same frequency set identification numbers will be used. Duplicate frequencies will be ignored.

Parameters
freqsList[float] / (nfreq, ) float ndarray

the frequencies for a FREQx object

add_frequency_object(freq)[source]
Parameters

freq – a FREQx object

See also

addFrequencies()

get_freqs()[source]
raw_fields()[source]
type = 'FREQ'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.FREQ1(sid, f1, df, ndf=1, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a set of frequencies to be used in the solution of frequency response problems by specification of a starting frequency, frequency increment, and the number of increments desired.

1

2

3

4

5

FREQ1

SID

F1

DF

NDF

Note

this card rewrites as a FREQ card

Creates a FREQ1 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float

first frequency

dffloat

frequency increment

ndfint

number of frequency increments

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a FREQ1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'FREQ1'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.FREQ2(sid, f1, f2, nf=1, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a set of frequencies to be used in the solution of frequency response problems by specification of a starting frequency, final frequency, and the number of logarithmic increments desired.

1

2

3

4

5

FREQ2

SID

F1

F2

NF

Note

this card rewrites as a FREQ card

Creates a FREQ2 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float

first frequency

f2float

last frequency

nfint; default=1

number of logorithmic intervals

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a FREQ2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'FREQ2'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.FREQ3(sid, f1, f2=None, freq_type='LINEAR', nef=10, cluster=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.dynamic.FREQ

1

2

3

4

5

6

7

FREQ3

SID

F1

F2

TYPE

NEF

CLUSTER

FREQ3

6

20.0

200.0

LINEAR

10

2.0

Creates a FREQ3 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float; default=0.0???

Lower bound of frequency range in cycles per unit time.

f2float; default=1E20???

Upper bound of frequency range in cycles per unit time.

freq_typestr; default=LINEAR

valid_types={LINEAR, LOG}

nefint; default=10

???

clusterfloat; default=1.0

???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a FREQ3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'FREQ3'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.FREQ4(sid, f1=0.0, f2=1e+20, fspread=0.1, nfm=3, comment='')[source]

Bases: pyNastran.bdf.cards.dynamic.FREQ

Defines a set of frequencies used in the solution of modal frequency response problems by specifying the amount of ‘spread’ around each natural frequency and the number of equally spaced excitation frequencies within the spread.

1

2

3

4

5

6

7

8

9

FREQ4

SID

F1

F2

FSPD

NFM

Note

this card rewrites as a FREQ card

Todo

not done…

Creates a FREQ4 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2float; default=1E20

Upper bound of frequency range in cycles per unit time.

nfmint; default=3

Number of evenly spaced frequencies per ‘spread’ mode.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a FREQ4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'FREQ4'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.FREQ5(sid, fractions, f1=0.0, f2=1e+20, comment='')[source]

Bases: pyNastran.bdf.cards.dynamic.FREQ

Defines a set of frequencies used in the solution of modal frequency-response problems by specification of a frequency range and fractions of the natural frequencies within that range.

1

2

3

4

5

6

7

8

9

FREQ5

SID

F1

F2

FR1

FR2

FR3

FR4

FR5

FREQ5

6

20.0

2000.0

1.0

0.6

0.8

0.9

0.95

1.05

1.1

1.2

Creates a FREQ5 card

Parameters
sidint

set id referenced by case control FREQUENCY

f1float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2float; default=1e20

Upper bound of frequency range in cycles per unit time.

fractionsList[float]

Fractions of the natural frequencies in the range F1 to F2.

commentstr; default=’’

a comment for the card

.. note:: FREQ5 is only valid in modal frequency-response

solutions (SOLs 111, 146, and 200) and is ignored in direct frequency response solutions.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a FREQ card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'FREQ5'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.NLPARM(nlparm_id, ninc=None, dt=0.0, kmethod='AUTO', kstep=5, max_iter=25, conv='PW', int_out='NO', eps_u=0.01, eps_p=0.01, eps_w=0.01, max_div=3, max_qn=None, max_ls=4, fstress=0.2, ls_tol=0.5, max_bisect=5, max_r=20.0, rtol_b=20.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a set of parameters for nonlinear static analysis iteration strategy.

1

2

3

4

5

6

7

8

9

NLPARM

ID

NINC

DT

KMETHOD

KSTEP

MAXITER

CONV

INTOUT

ESPU

EPSP

EPSW

MAXDIV

MAXQN

MAXLS

FSTRESS

LSTOL

MAXBIS

MAXR

RTOLB

CONV

Creates an NLPARM card

Parameters
nlparm_idint

NLPARM id; points to the Case Control NLPARM

nincint; default=None

The default ninc changes default based on the solution/element type & params. The default for NINC is 10, except if there is a GAP, Line Contact, Heat Transfer or PARAM,NLTOL,0, in which case the default is 1.

dtfloat; default=0.0

???

kmethodstr; default=’AUTO’

???

kstepint; default=5

???

max_iterint; default=25

???

convstr; default=’PW’

???

int_outstr; default=’NO’

???

eps_ufloat; default=0.01

???

eps_pfloat; default=0.01

???

eps_wfloat; default=0.01

???

max_divint; default=3

???

max_qn; default=None -> varies

???

max_lsint; default=4

???

fstressfloat; default=0.2

???

ls_tolfloat; default=0.5

???

max_bisectint; default=5

???

max_rfloat; default=20.

???

rtol_bfloat; default=20.

???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['nlparm_id']
classmethod add_card(card, comment='')[source]

Adds a NLPARM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'NLPARM'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.NLPCI(nlpci_id, Type='CRIS', minalr=0.25, maxalr=4.0, scale=0.0, desiter=12, mxinc=20, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

classmethod _init_from_empty()[source]
_properties = ['nlpci_id']
classmethod add_card(card, comment='')[source]

Adds a NLPCI card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'NLPCI'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.ROTORD(sid, rstart, rstep, numstep, rids, rsets, rspeeds, rcords, w3s, w4s, rforces, brgsets, refsys='ROT', cmout=0.0, runit='RPM', funit='RPM', zstein='NO', orbeps=1e-06, roprt=0, sync=1, etype=1, eorder=1.0, threshold=0.02, maxiter=10, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

NX-specific card

Define Rotor Dynamics Solution Options

1

2

3

4

5

6

7

8

9

ROTORD

SID

RSTART

RSTEP

NUMSTEP

REFSYS

CMOUT

RUNIT

FUNIT

ZSTEIN

ORBEPS

ROTPRT

SYNC

ETYPE

EORDER

THRSHOLD

MAXITER

RID1

RSET1

RSPEED1

RCORD1

W3_1

W4_1

RFORCE1

BRGSET1

RID2

RSET2

RSPEED2

RCORD2

W3_2

W4_2

RFORCE2

BRGSET2

RIDi

RSETi

RSPEEDi

RCORDi

W3_i

W4_i

RFORCEi

BRGSETi

RID10

RSET10

RSPEED10

RCORD10

W3_10

W4_10

RFORCE10

BRGSET10

1

2

3

4

5

6

7

8

9

ROTORD

998

0.0

250.0

58

fix

-1.0

cps

no

1

11

1

0.0

0.0

1

101

2

12

1

0.0

0.0

102

3

13

1.5

1

0.0

0.0

103

4

14

1.75

1

0.0

0.0

104

5

15

1.75

1

0.0

0.0

105

6

16

1

0.0

0.0

106

7

17

2.0

1

0.0

0.0

107

8

18

2.25

1

0.0

0.0

108

9

19

7.5

1

0.0

0.0

109

10

20

1

0.0

0.0

10

110

Adds a ROTORD card

Parameters
sidint

Set identifier for all rotors. Must be selected in the case control deck by RMETHOD = SID.

rstartfloat

Starting value of reference rotor speed.

rstartfloat

Step-size of reference rotor speed. See Remark 3. (Real ≠ 0.0)

numstepint

Number of steps for reference rotor speed including RSTART.

ridsList[int]

Identification number of rotor i. (Integer > 0 with RID(i+1) > RIDi; Default = i)

rsetsList[int]

Refers to the RSETID value on the ROTORG, ROTORB, and ROTSE bulk entries for rotor RIDi. (Integer > 0 or blank if only one rotor)

rspeedsList[int/float, …, int/float]

float : rotor speeds int : TABLEDi

rcordsList[int]

???

w3sList[float]

???

w4sList[float]

???

rforcesList[int]

???

brgsetsList[int]

???

refsysstr; default=’ROT’
Reference system

‘FIX’ analysis is performed in the fixed reference system. ‘ROT’ analysis is performed in the rotational reference system.

cmoutfloat; default=0.0

???

runitstr; default==’RPM’

???

funitstr; default==’RPM’,

???

zsteinstr; default==’NO’

???

orbepsfloat; default=1.e-6

???

roprtint; default=0

???

syncint; default=1

???

etypeint; default=1

???

eorderfloat; default=1.0

???

thresholdfloat; default=0.02

???

maxiterint; default=10

???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a ROTORD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
type = 'ROTORD'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.ROTORG(sid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Rotor Grids Selection Selects the grids that define a rotor.

1

2

3

4

5

6

7

8

9

ROTORG

RSETID

G1

G2

G3

G4

G5

G6

G7

ROTORG

14

101

THRU

190

BY

5

46

23

57

82

9

16

201

THRU

255

93

94

95

97

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a ROTORG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
type = 'ROTORG'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.TF(sid, nid0, c, b0, b1, b2, nids, components, a, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a dynamic transfer function of the form:

(B0 + B1 p + B2 *p2)*ud sum(A0_i + A1_i*p + A2_i*p2)*ui = 0

1

2

3

4

5

6

7

8

9

TF

SID

GD

CD

B0

B1

B2

G_1

C_1

A0_1

A1_1

A2_1

etc.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TF card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
type = 'TF'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.TIC(sid, nodes, components, u0=0.0, v0=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Transient Initial Condition

Defines values for the initial conditions of variables used in structural transient analysis. Both displacement and velocity values may be specified at independent degrees-of-freedom. This entry may not be used for heat transfer analysis.

Creates a TIC card

Parameters
sidint

Case Control IC id

nodesint / List[int]

the nodes to which apply the initial conditions

componentsint / List[int]

the DOFs to which apply the initial conditions

u0float / List[float]

Initial displacement.

v0float / List[float]

Initial velocity.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
add(tic)[source]
classmethod add_card(card, comment='')[source]

Adds a TIC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'TIC'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.TSTEP(sid, N, DT, NO, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Transient Time Step Defines time step intervals at which a solution will be generated and output in transient analysis.

1

2

3

4

5

6

7

8

9

TSTEP

SID

N1

DT1

NO1

N2

DT2

NO2

etc.

1

2

3

4

5

6

7

8

9

TSTEP

101

9000

.001

9000

1000

.001

1

Creates a TSTEP card

Parameters
sidint

the time step id

NList[int/None]

List of number of time steps for each step section.

DTList[float/None]

List of time steps for each step section.

NOList[int/None]

List of step frequency for each step section. Every N steps, results will be printed.

commentstr; default=’’

a comment for the card

DT = None

Time increment (float)

N = None

Number of time steps of value DTi. (Integer > 1)

NO = None

Skip factor for output. Every NOi-th step will be saved for output (default=1)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TSTEP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TSTEP'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.TSTEP1(sid, tend, ninc, nout, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Transient Time Step Defines time step intervals at which a solution will be generated and output in transient analysis.

1

2

3

4

5

6

7

8

9

TSTEP1

SID

TEND1

NINC1

NOUT1

TEND2

NINC2

NOUT2

etc.

1

2

3

4

5

6

7

8

9

TSTEP1

1

10.0

5

2

50.0

4

3

100

2

ALL

Creates a TSTEP1 card

Parameters
sidint

the time step id

tendList[float/None]

???

nincList[int/None]

???

noutList[int/str/None]

???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TSTEP1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TSTEP1'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.dynamic.TSTEPNL(sid, ndt, dt, no, method='ADAPT', kstep=None, max_iter=10, conv='PW', eps_u=0.01, eps_p=0.001, eps_w=1e-06, max_div=2, max_qn=10, max_ls=2, fstress=0.2, max_bisect=5, adjust=5, mstep=None, rb=0.6, max_r=32.0, utol=0.1, rtol_b=20.0, min_iter=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines parametric controls and data for nonlinear transient structural or heat transfer analysis. TSTEPNL is intended for SOLs 129, 159, and 600. Parameters for Nonlinear Transient Analysis.

MSC 2005.2 +———+———+——–+——-+——–+——–+——-+———+——+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +=========+=========+========+=======+========+========+=======+=========+======+ | TSTEPNL | ID | NDT | DT | NO | METHOD | KSTEP | MAXITER | CONV | +———+———+——–+——-+——–+——–+——-+———+——+ | | ESPU | EPSP | EPSW | MAXDIV | MAXQN | MAXLS | FSTRESS | | +———+———+——–+——-+——–+——–+——-+———+——+ | | MAXBIS | ADJUST | MSTEP | RB | MAXR | UTOL | RTOLB | | +———+———+——–+——-+——–+——–+——-+———+——+

NX 2019.2 +———+———+——–+——-+——–+——–+——-+———+——+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +=========+=========+========+=======+========+========+=======+=========+======+ | TSTEPNL | ID | NDT | DT | NO | METHOD | KSTEP | MAXITER | CONV | +———+———+——–+——-+——–+——–+——-+———+——+ | | ESPU | EPSP | EPSW | MAXDIV | MAXQN | MAXLS | FSTRESS | | +———+———+——–+——-+——–+——–+——-+———+——+ | | MAXBIS | ADJUST | MSTEP | RB | MAXR | UTOL | RTOLB | | +———+———+——–+——-+——–+——–+——-+———+——+ | | KUPDATE | | | | | | | | +———+———+——–+——-+——–+——–+——-+———+——+

method = None for NX, but apparently TSTEP as well, which is not in the QRG

Creates a TSTEPNL card

Parameters
sidint

the time step id

ndtint

???

dtfloat

???

noint

???

methodstr

??? MSC = {AUTO, ITER, ADAPT, SEMI, FNT, PFNT} NX = {None, TSTEP}

kstep???; default=None

???

max_iterint; default=10

???

convstr; default=’PW’

??? PW, W, U

eps_ufloat; default=1.e-2

???

eps_pfloat; default=1.e-3

???

eps_wfloat; default=1.e-6

???

max_divint; default=2

???

max_qnint; default=10

???

max_lsint; default=2

???

fstressfloat; default=0.2

???

max_bisectint; default=5

???

adjustint; default=5

???

mstepint; default=None

???

rbfloat; default=0.6

???

max_r = float; default=32.

???

utol = float; default=0.1

???

rtol_b = float; default=20.

???

min_iterint; default=None

not listed in all QRGs

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TSTEPNL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_methods = ['AUTO', 'ITER', 'ADAPT', 'SEMI', 'FNT', 'PFNT', 'TSTEP']
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TSTEPNL'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

expand_card Module
defines:
  • expand_thru

  • expand_thru_by

pyNastran.bdf.cards.expand_card._remove_blanks_capitalize(fields: List[Optional[str]]) → List[Optional[str]][source]

remove any blanks and capitalize any strings

pyNastran.bdf.cards.expand_card.expand_thru(fields: List[str], set_fields: bool = True, sort_fields: bool = False) → List[int][source]

Expands a list of values of the form [1,5,THRU,9,13] to be [1,5,6,7,8,9,13]

Parameters
fieldsList[int/str]

the fields to expand

set_fieldsbool; default=True

Should the fields be converted to a set and then back to a list? This is useful for [2, ‘THRU’ 5, 1]

sort_fieldsbool; default=False

Should the fields be sorted at the end?

pyNastran.bdf.cards.expand_card.expand_thru_by(fields: List[str], set_fields: bool = True, sort_fields: bool = True, require_int: bool = True, allow_blanks: bool = False) → List[int][source]

Expands a list of values of the form [1,5,THRU,9,BY,2,13] to be [1,5,7,9,13]

Parameters
fieldsList[int/str]

the fields to expand

set_fieldsbool; default=True

Should the fields be converted to a set and then back to a list to remove duplicates? This is useful for [2, ‘THRU’ 5, 1]

sort_fieldsbool; default=False

Should the fields be sorted at the end?

require_intbool; default=True

True : all data must be integers False : floats are allowed (e.g., DDVAL)

allow_blanksbool; default=Fals

True : blank/Nones are ignored (e.g., NSM1/NSML1) False : crash

.. todo:: not tested

Notes

used for QBDY3 and what else ???

materials Module
Inheritance diagram of pyNastran.bdf.cards.materials

All material cards are defined in this file. This includes:

  • CREEP

  • MAT1 (isotropic solid/shell)

  • MAT2 (anisotropic)

  • MAT3 (linear orthotropic)

  • MAT4 (thermal)

  • MAT5 (thermal)

  • MAT8 (orthotropic shell)

  • MAT9 (anisotropic solid)

  • MAT10 (fluid element)

  • MATHP (hyperelastic)

  • MATHE (hyperelastic)

All cards are Material objects.

class pyNastran.bdf.cards.materials.AnisotropicMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Anisotropic Material Class

dummy init

class pyNastran.bdf.cards.materials.CREEP(mid, T0, exp, form, tidkp, tidcp, tidcs, thresh, Type, a, b, c, d, e, f, g, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Material

dummy init

Mid()[source]

returns the material ID of an element

Returns
midint

the Material ID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CREEP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'CREEP'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.EQUIV(mid, field2, field3, field4, field5, field6, field7, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Material

dummy init

classmethod add_card(card, comment='')[source]

Adds an EQUIV card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

mid = None

Identification number of a MAT1, MAT2, or MAT9 entry.

raw_fields()[source]
type = 'EQUIV'
class pyNastran.bdf.cards.materials.HyperelasticMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Hyperelastic Material Class

dummy init

class pyNastran.bdf.cards.materials.IsotropicMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Isotropic Material Class

dummy init

class pyNastran.bdf.cards.materials.MAT1(mid, E, G, nu, rho=0.0, a=0.0, tref=0.0, ge=0.0, St=0.0, Sc=0.0, Ss=0.0, mcsid=0, comment='')[source]

Bases: pyNastran.bdf.cards.materials.IsotropicMaterial

Defines the material properties for linear isotropic materials.

1

2

3

4

5

6

7

8

9

MAT1

MID

E

G

NU

RHO

A

TREF

GE

ST

SC

SS

MCSID

Creates a MAT1 card

Parameters
midint

material id

Efloat / None

Young’s modulus

Gfloat / None

Shear modulus

nufloat / None

Poisson’s ratio

rhofloat; default=0.

density

afloat; default=0.

coefficient of thermal expansion

treffloat; default=0.

reference temperature

gefloat; default=0.

damping coefficient

St / Sc / Ssfloat; default=0.

tensile / compression / shear allowable

mcsidint; default=0

material coordinate system id used by PARAM,CURV

commentstr; default=’’

a comment for the card

If E, G, or nu is None (only 1), it will be calculated
D()[source]
E()[source]
E_stress(stress)[source]
E_temperature(temperature)[source]
G()[source]
Mats1()[source]
Matt1()[source]
Nu()[source]
Rho()[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

compliance()[source]

per AeroComBAT

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the materials in a vectorized way

getG_default()[source]
get_density()[source]
mp_name_map = {'A': 'a', 'E': 'e', 'G': 'g', 'GE': 'ge', 'NU': 'nu', 'RHO': 'rho', 'SC': 'sc', 'SS': 'ss', 'ST': 'st', 'TREF': 'tref'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

classmethod set_E_G_nu(E, G, nu)[source]

f[ G = frac{E}{2 (1+nu)} f]

type = 'MAT1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT10(mid, bulk=None, rho=None, c=None, ge=0.0, gamma=None, table_bulk=None, table_rho=None, table_ge=None, table_gamma=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Material

Defines material properties for fluid elements in coupled fluid-structural analysis.

1

2

3

4

5

6

7

8

9

MAT10

MID

BULK

RHO

C

GE

ALPHA

per MSC 2016

1

2

3

4

5

6

7

8

9

MAT10

MID

BULK

RHO

C

GE

GAMMA

TID_BULK

TID_RHO

TID_GE

TID_GAMMA

per NX 10

..note :: alpha is called gamma

Creates a MAT10 card

Parameters
midint

material id

bulkfloat; default=None

Bulk modulus

rhofloat; default=None

Density

cfloat; default=None

Speed of sound

gefloat; default=0.

Damping

gammafloat; default=None

NX : ratio of imaginary bulk modulus to real bulk modulus; default=0.0 MSC : normalized admittance coefficient for porous material

table_bulkint; default=None

TABLEDx entry defining bulk modulus vs. frequency None for MSC Nastran

table_rhoint; default=None

TABLEDx entry defining rho vs. frequency None for MSC Nastran

table_geint; default=None

TABLEDx entry defining ge vs. frequency None for MSC Nastran

table_gammaint; default=None

TABLEDx entry defining gamma vs. frequency None for MSC Nastran

commentstr; default=’’

a comment for the card

Rho()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT10 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

dummy cross reference method for a Material

get_density()[source]
mp_name_map = {'RHO': 'rho'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT10'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT11(mid, e1, e2, e3, nu12, nu13, nu23, g12, g13, g23, rho=0.0, a1=0.0, a2=0.0, a3=0.0, tref=0.0, ge=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Material

Defines the material properties for a 3D orthotropic material for isoparametric solid elements.

1

2

3

4

5

6

7

8

9

MAT11

MID

E1

E2

E3

NU12

NU13

NU23

G12

G13

G23

RHO

A1

A2

A3

TREF

GE

dummy init

classmethod _init_from_empty()[source]
_properties = ['_field_map', 'mp_name_map']
_validate_input()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT11 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

get_density()[source]
mp_name_map = {'E1': 'e1', 'E2': 'e2', 'E3': 'e3'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT11'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT2(mid, G11, G12, G13, G22, G23, G33, rho=0.0, a1=None, a2=None, a3=None, tref=0.0, ge=0.0, St=None, Sc=None, Ss=None, mcsid=None, comment='')[source]

Bases: pyNastran.bdf.cards.materials.AnisotropicMaterial

Defines the material properties for linear anisotropic materials for two-dimensional elements.

1

2

3

4

5

6

7

8

9

MAT2

MID

G11

G12

G13

G22

G23

G33

RHO

A1

A2

A3

TREF

GE

ST

SC

SS

MCSID

dummy init

Dplate()[source]

Eq 9.1.6 in Finite Element Method using Matlab

Dsolid()[source]

Eq 9.4.7 in Finite Element Method using Matlab

Rho()[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the materials in a vectorized way

get_density()[source]
mp_name_map = {'A1': 'a1', 'A2': 'a2', 'A3': 'a3', 'G11': 'G11', 'G12': 'G12', 'G13': 'G13', 'G22': 'G22', 'G23': 'G23', 'G33': 'G33', 'RHO': 'rho', 'TREF': 'tref'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT2'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT3(mid, ex, eth, ez, nuxth, nuthz, nuzx, rho=0.0, gzx=None, ax=0.0, ath=0.0, az=0.0, tref=0.0, ge=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.materials.OrthotropicMaterial

Defines the material properties for linear orthotropic materials used by the CTRIAX6 element entry.

1

2

3

4

5

6

7

8

9

MAT3

MID

EX

ETH

EZ

NUXTH

NUTHZ

NUZX

RHO

GZX

AX

ATH

AZ

TREF

GE

dummy init

Rho()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the elements in a vectorized way

get_density()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT3D(mid, e1, e2, e3, nu12, nu13, nu23, g12, g13, g23, rho=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Material

Defines the material properties for a 3D orthotropic material for isoparametric solid elements.

1

2

3

4

5

6

7

8

9

MAT3D

MID

E1

E2

E3

G12

G13

G23

NU12

NU12

NU13

NU23

RHO

This is a VABS specific card that is almost identical to the MAT11.

dummy init

classmethod _init_from_empty()[source]
_validate_input()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT3D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT3D'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT4(mid, k, cp=0.0, rho=1.0, H=None, mu=None, hgen=1.0, ref_enthalpy=None, tch=None, tdelta=None, qlat=None, comment='')[source]

Bases: pyNastran.bdf.cards.materials.ThermalMaterial

Defines the constant or temperature-dependent thermal material properties for conductivity, heat capacity, density, dynamic viscosity, heat generation, reference enthalpy, and latent heat associated with a single-phase change.

1

2

3

4

5

6

7

8

9

MAT4

MID

K

CP

RHO

MU

H

HGEN

REFENTH

TCH

TDELTA

QLAT

dummy init

Rho()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_density()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MAT4'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT5(mid, kxx=0.0, kxy=0.0, kxz=0.0, kyy=0.0, kyz=0.0, kzz=0.0, cp=0.0, rho=1.0, hgen=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.materials.ThermalMaterial

Defines the thermal material properties for anisotropic materials.

1

2

3

4

5

6

7

8

9

MAT5

MID

KXX

KXY

KXZ

KYY

KYZ

KZZ

CP

RHO

HGEN

Creates a MAT5, which defines the thermal material properties for an anisotropic material

Parameters
midint

material id

kxxfloat; default==0.

???

kxyfloat; default==0.

???

kxzfloat; default==0.

???

kyyfloat; default==0.

???

kyzfloat; default==0.

???

kzzfloat; default==0.

???

cpfloat; default==0.

???

rhofloat; default==1.

???

hgenfloat; default=1.

???

commentstr; default=’’

a comment for the card

K()[source]

thermal conductivity matrix

Rho()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_density()[source]
mid = None

Thermal conductivity (assumed default=0.0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT5'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT8(mid, e11, e22, nu12, g12=0.0, g1z=100000000.0, g2z=100000000.0, rho=0.0, a1=0.0, a2=0.0, tref=0.0, Xt=0.0, Xc=None, Yt=0.0, Yc=None, S=0.0, ge=0.0, F12=0.0, strn=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.materials.OrthotropicMaterial

Defines the material property for an orthotropic material for isoparametric shell elements.

1

2

3

4

5

6

7

8

9

MAT8

MID

E1

E2

NU12

G12

G1Z

G2Z

RHO

A1

A2

TREF

Xt

Xc

Yt

Yc

S

GE1

F12

STRN

dummy init

D()[source]

Todo

what about G1z and G2z

E11()[source]
E22()[source]
G12()[source]
Matt8()[source]
Nu12()[source]
Rho()[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT8 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the materials in a vectorized way

get_density()[source]
mp_name_map = {'A1': 'a1', 'A2': 'a2', 'E1': 'e11', 'E2': 'e22', 'G12': 'g12', 'G1Z': 'g1z', 'NU12': 'nu12', 'RHO': 'rho'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT8'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MAT9(mid, G11=0.0, G12=0.0, G13=0.0, G14=0.0, G15=0.0, G16=0.0, G22=0.0, G23=0.0, G24=0.0, G25=0.0, G26=0.0, G33=0.0, G34=0.0, G35=0.0, G36=0.0, G44=0.0, G45=0.0, G46=0.0, G55=0.0, G56=0.0, G66=0.0, rho=0.0, A=None, tref=0.0, ge=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.materials.AnisotropicMaterial

Defines the material properties for linear, temperature-independent, anisotropic materials for solid isoparametric elements

See also

PSOLID entry description

1

2

3

4

5

6

7

8

9

MAT9

MID

G11

G12

G13

G14

G15

G16

G22

G23

G24

G25

G26

G33

G34

G35

G36

G44

G45

G46

G55

G56

G66

RHO

A1

A2

A3

A4

A5

A6

TREF

GE

Warning

MSC 2020: gelist is not supported.

dummy init

D()[source]
Rho()[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT9 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

dummy cross reference method for a Material

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the elements in a vectorized way

mid = None

Material ID

mp_name_map = {'A1': 'A[0]', 'A2': 'A[1]', 'A3': 'A[2]', 'A4': 'A[3]', 'A5': 'A[4]', 'A6': 'A[5]', 'G11': 'G11', 'G12': 'G12', 'G13': 'G13', 'G14': 'G14', 'G15': 'G15', 'G16': 'G16', 'G22': 'G22', 'G23': 'G23', 'G24': 'G24', 'G25': 'G25', 'G26': 'G26', 'G33': 'G33', 'G34': 'G34', 'G35': 'G35', 'G36': 'G36', 'G44': 'G44', 'G45': 'G45', 'G46': 'G46', 'G55': 'G55', 'G56': 'G56', 'G66': 'G66', 'GE': 'ge', 'RHO': 'rho', 'TREF': 'tref'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MAT9'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MATG(mid, idmem, behav, tabld, tablu, yprs, epl, gpl, gap=0.0, tab_yprs=None, tab_epl=None, tab_gpl=None, tab_gap=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Material

1

2

3

4

5

6

7

8

9

MATG

MID

IDMEM

BEHAV

TABLD

TABLU1

TABLU2

TABLU3

TABLU4

TABLU5

TABLU6

TABLU7

TABLU8

TABLU9

TABLU10

YPRS

EPL

GPL

GAP

TABYPRS

TABEPL

TABGPL

TABGAP

per MSC 2016

1

2

3

4

5

6

7

8

9

MATG

MID

IDMEM

BEHAV

TABLD

TABLU1

TABLU2

TABLU3

TABLU4

TABLU5

TABLU6

TABLU7

TABLU8

TABLU9

TABLU10

YPRS

EPL

GPL

per NX 10

MATG

100

10

0

1001

1002

1003

0.0

dummy init

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MATG'
uncross_reference()[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MATHE(mid, model, bulk, mus, alphas, betas, mooney, sussbat, aboyce, gent, rho=0.0, texp=0.0, tref=0.0, ge=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.materials.HyperelasticMaterial

Creates a MATHE hyperelastic material

model = MOONEY (default)

1

2

3

4

5

6

7

MATHE

MID

Model

K

RHO

TEXP

C10

C01

C20

C11

C02

C30

C21

C12

C03

model (NX) = OGDEN, FOAM

1

2

3

4

5

6

7

MATHE

MID

Model

K

RHO

TEXP

MU1 | ALPHA1

BETA1

MU2 | ALPHA2

BETA2

MU3

ALPHA3

BETA3

MU4 | ALPHA4

BETA4

MU5

ALPHA5

BETA5

MU6 | ALPHA6

BETA6

MU7

ALPHA7

BETA7

MU8 | ALPHA8

BETA8

MU9

ALPHA9

BETA9

the last two lines are NX only lines

model (NX) = ABOYCE

1

2

3

4

5

6

7

MATHE

MID

Model

K

RHO

TEXP

NKT

N1

D1

D2

D3

D4

D5

the last line is an MSC only line

model (NX) = SUSSBAT

1

2

3

4

5

6

7

MATHE

MID

Model

K

RHO

TEXP

TAB1

SSTYPE

RELERR

model (NX) = MOONEY (default)

1

2

3

4

5

6

7

8

9

MATHE

MID

Model

K

RHO

TEXP

TREF

GE

C10

C01

D1

TAB1

TAB2

TAB3

TAB4

TABD

C20

C11

C02

D2

NA

C30

C21

C12

C03

D3

C40

C31

C22

C13

C04

D4

C50

C41

C32

C23

C14

C05

D5

model (MSC) = OGDEN, FOAM

1

2

3

4

5

6

7

8

MATHE

MID

Model

NOT

K

RHO

TEXP

MU1

ALPHA1

BETA1

MU2

ALPHA2

BETA2

MU3

ALPHA3

BETA3

MU4

ALPHA4

BETA4

MU5

ALPHA5

BETA5

D1

D2

D3

D4

D5

NOT is an MSC only parameter

the last line is an MSC only line

model (MSC) = ABOYCE, GENT

1

2

3

4

5

6

7

8

MATHE

MID

Model

K

RHO

TEXP

NKT

N1

D1

D2

D3

D4

D5

the last line is an MSC only line

model (MSC) = GHEMi

1

2

3

4

5

6

7

8

MATHE

MID

Model

K

RHO

Texp

Tref

GE

MSC version

dummy init

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATHE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MATHE'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.MATHP(mid, a10=0.0, a01=0.0, d1=None, rho=0.0, av=0.0, tref=0.0, ge=0.0, na=1, nd=1, a20=0.0, a11=0.0, a02=0.0, d2=0.0, a30=0.0, a21=0.0, a12=0.0, a03=0.0, d3=0.0, a40=0.0, a31=0.0, a22=0.0, a13=0.0, a04=0.0, d4=0.0, a50=0.0, a41=0.0, a32=0.0, a23=0.0, a14=0.0, a05=0.0, d5=0.0, tab1=None, tab2=None, tab3=None, tab4=None, tabd=None, comment='')[source]

Bases: pyNastran.bdf.cards.materials.HyperelasticMaterial

dummy init

Rho()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATHP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'MATHP'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.NXSTRAT(sid, params, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Strategy Parameters for SOLs 601 and 701

Defines parameters for solution control and strategy in advanced nonlinear structural analysis.

1

2

3

4

5

6

7

8

NXSTRAT

ID

Param1

Value1

Param2

Value2

Param3

Value3

Param4

Value4

Param5

Value5

etc

NXSTRAT

1

AUTO

1

MAXITE

30

RTOL

0.005

ATSNEXT

3

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a NXSTRAT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fields[varies, …]

the fields that define the card

type = 'NXSTRAT'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.materials.OrthotropicMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Orthotropic Material Class

dummy init

class pyNastran.bdf.cards.materials.ThermalMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Thermal Material Class

dummy init

pyNastran.bdf.cards.materials._mat10_get_bulk_rho_c(bulk, rho, c)[source]
\[bulk = c^2 \rho\]
pyNastran.bdf.cards.materials.get_mat_props_S(mid_ref)[source]

Gets the material matrix [S] or [C] for plane strain

[e] = [S][o]

material_deps Module
Inheritance diagram of pyNastran.bdf.cards.material_deps

All material dependency cards are defined in this file. This includes:

  • MATS1 (isotropic solid/shell)

  • MATT1 (isotropic solid/shell)

  • MATT2 (anisotropic)

  • MATT3 (linear orthotropic) - NA

  • MATT4 (thermal)

  • MATT5 (thermal)

  • MATT8 (orthotropic shell) - NA

  • MATT9 (anisotropic solid) - NA

All cards are Material objects.

class pyNastran.bdf.cards.material_deps.MATS1(mid, tid, Type, h, hr, yf, limit1, limit2, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependence

Specifies stress-dependent material properties for use in applications involving nonlinear materials. This entry is used if a MAT1, MAT2 or MAT9 entry is specified with the same MID in a nonlinear solution sequence (SOLs 106 and 129).

E(strain)[source]

Gets E (Young’s Modulus) for a given strain.

Parameters
strainfloat / None

the strain (None -> linear E value)

Returns
Efloat

Young’s Modulus

Hf()[source]
Tid()[source]
Type = None

Type of material nonlinearity. (‘NLELAST’ for nonlinear elastic or ‘PLASTIC’ for elastoplastic.)

Yf()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATS1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

h = None

Work hardening slope (slope of stress versus plastic strain) in units of stress. For elastic-perfectly plastic cases, H=0.0. For more than a single slope in the plastic range, the stress-strain data must be supplied on a TABLES1 entry referenced by TID, and this field must be blank

hr = None

Hardening Rule, selected by one of the following values (Integer): (1) Isotropic (Default) (2) Kinematic (3) Combined isotropic and kinematic hardening

limit1 = None

Initial yield point

limit2 = None

Internal friction angle, measured in degrees, for the Mohr-Coulomb and Drucker-Prager yield criteria

mid = None

Identification number of a MAT1, MAT2, or MAT9 entry.

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

tid = None

Identification number of a TABLES1 or TABLEST entry. If H is given, then this field must be blank.

type = 'MATS1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

yf = None

Yield function criterion, selected by one of the following values (1) Von Mises (2) Tresca (3) Mohr-Coulomb (4) Drucker-Prager

class pyNastran.bdf.cards.material_deps.MATT1(mid, e_table=None, g_table=None, nu_table=None, rho_table=None, a_table=None, ge_table=None, st_table=None, sc_table=None, ss_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

Specifies temperature-dependent material properties on MAT1 entry fields via TABLEMi entries.

1

2

3

4

5

6

7

8

9

MATT1

MID

T(E)

T(G)

T(NU)

T(RHO)

T(A)

T(GE)

T(ST)

T(SC)

T(SS)

A_table()[source]
E(temperature)[source]

Gets E (Young’s Modulus) for a given temperature.

Parameters
temperaturefloat; default=None

the temperature (None -> linear E value)

Returns
Efloat

Young’s Modulus

E_table()[source]
G_table()[source]
Ge_table()[source]
Nu_table()[source]
Rho_table()[source]
Sc_table()[source]
Ss_table()[source]
St_table()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MATT1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.material_deps.MATT2(mid, g11_table=None, g12_table=None, g13_table=None, g22_table=None, g23_table=None, g33_table=None, rho_table=None, a1_table=None, a2_table=None, a3_table=None, ge_table=None, st_table=None, sc_table=None, ss_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

Specifies temperature-dependent material properties on MAT2 entry fields via TABLEMi entries.

1

2

3

4

5

6

7

8

9

MATT2

MID

T(G12)

T(G13)

T(G13)

T(G22)

T(G23)

T(G33)

T(RHO)

T(A1)

T(A2)

T(A3)

T(GE)

T(ST)

T(SC)

T(SS)

A1_table()[source]
A2_table()[source]
A3_table()[source]
G11_table()[source]
G12_table()[source]
G13_table()[source]
G22_table()[source]
G23_table()[source]
G33_table()[source]
Ge_table()[source]
Rho_table()[source]
Sc_table()[source]
Ss_table()[source]
St_table()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MATT2'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.material_deps.MATT3(mid, ex_table=None, eth_table=None, ez_table=None, nuth_table=None, nuxz_table=None, rho_table=None, gzx_table=None, ax_table=None, ath_table=None, az_table=None, ge_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

Specifies temperature-dependent material properties on MAT3 entry fields via TABLEMi entries that are temperature dependent.

1

2

3

4

5

6

7

8

9

MATT3

MID

T(EX)

T(ETH)

T(EZ)

T(NUXTH)

T(NUTHZ)

T(NUZX)

T(RHO)

T(GZX)

T(AX)

T(ATH)

T(AZ)

T(GE)

Creates a MATT3 card

Ath_table()[source]
Ax_table()[source]
Az_table()[source]
Eth_table()[source]
Ex_table()[source]
Ez_table()[source]
Ge_table()[source]
Gzx_table()[source]
Nuth_table()[source]
Nuxz_table()[source]
Rho_table()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MATT3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.material_deps.MATT4(mid, k_table=None, cp_table=None, h_table=None, mu_table=None, hgen_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

Specifies temperature-dependent material properties on MAT2 entry fields via TABLEMi entries.

1

2

3

4

5

6

7

8

MATT4

MID

T(K)

T(CP)

T(H)

T(mu)

T(HGEN)

Cp_table()[source]
H_table()[source]
Hgen_table()[source]
K_table()[source]
Mu_table()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MATT4'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.material_deps.MATT5(mid, kxx_table=None, kxy_table=None, kxz_table=None, kyy_table=None, kyz_table=None, kzz_table=None, cp_table=None, hgen_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

Specifies temperature-dependent material properties on MAT2 entry fields via TABLEMi entries.

1

2

3

4

5

6

7

8

9

MATT5

MID

T(Kxx)

T(Kxy)

T(Kxz)

T(Kyy)

T(Kyz)

T(Kzz)

T(CP)

T(HGEN)

Cp_table()[source]
Hgen_table()[source]
Kxx_table()[source]
Kxy_table()[source]
Kxz_table()[source]
Kyy_table()[source]
Kyz_table()[source]
Kzz_table()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MATT5'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.material_deps.MATT8(mid, e1_table=None, e2_table=None, nu12_table=None, g12_table=None, g1z_table=None, g2z_table=None, rho_table=None, a1_table=None, a2_table=None, xt_table=None, xc_table=None, yt_table=None, yc_table=None, s_table=None, ge_table=None, f12_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

Specifies temperature-dependent material properties on MAT2 entry fields via TABLEMi entries.

1

2

3

4

5

6

7

8

9

MATT8

MID

T(E1)

T(E2)

T(Nu12)

T(G12)

T(G1z)

T(G2z)

T(RHO)

T(A1)

T(A2)

T(Xt)

T(Xc)

T(Yt)

T(Yc)

T(S)

T(GE)

T(F12)

A1_table()[source]
A2_table()[source]
E1_table()[source]
E2_table()[source]
F12_table()[source]
G12_table()[source]
G1z_table()[source]
G2z_table()[source]
Ge_table()[source]
Nu12_table()[source]
Rho_table()[source]
S_table()[source]
Xc_table()[source]
Xt_table()[source]
Yc_table()[source]
Yt_table()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT8 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
type = 'MATT8'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

1

2

3

4

5

6

7

8

9

MATT9

MID

T(G11)

T(G12)

T(G13)

T(G14)

T(G15)

T(G16)

T(G22)

T(G23)

T(G24)

T(G25)

T(G26)

T(G33)

T(G34)

T(G35)

T(G36)

T(G44)

T(G45)

T(G46)

T(G55)

T(G56)

T(G66)

T(RHO)

T(A1)

T(A2)

T(A3)

T(A4)

T(A5)

T(A6)

T(GE)

class pyNastran.bdf.cards.material_deps.MATT9(mid, g11_table=None, g12_table=None, g13_table=None, g14_table=None, g15_table=None, g16_table=None, g22_table=None, g23_table=None, g24_table=None, g25_table=None, g26_table=None, g33_table=None, g34_table=None, g35_table=None, g36_table=None, g44_table=None, g45_table=None, g46_table=None, g55_table=None, g56_table=None, g66_table=None, rho_table=None, a1_table=None, a2_table=None, a3_table=None, a4_table=None, a5_table=None, a6_table=None, ge_table=None, comment='')[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependenceThermal

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT8 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
type = 'MATT9'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.material_deps.MaterialDependence[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Mid()[source]
_get_table(key)[source]

internal method for accessing tables

class pyNastran.bdf.cards.material_deps.MaterialDependenceThermal[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependence

_xref_table(model, key, msg)[source]
methods Module
Inheritance diagram of pyNastran.bdf.cards.methods

All method cards are defined in this file. This includes:

  • EIGB

  • EIGC

  • EIGR

  • EIGP

  • EIGRL

All cards are Method objects.

class pyNastran.bdf.cards.methods.EIGB(sid, method, L1, L2, nep, ndp, ndn, norm, G, C, comment='')[source]

Bases: pyNastran.bdf.cards.methods.Method

Defines data needed to perform buckling analysis

L1 = None

Eigenvalue range of interest. (Real, L1 < L2)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an EIGB card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
method = None

Method of eigenvalue extraction. (Character: ‘INV’ for inverse power method or ‘SINV’ for enhanced inverse power method.) apparently it can also be blank…

ndp = None

Desired number of positive and negative roots. (Integer>0; Default = 3*NEP)

nep = None

Estimate of number of roots in positive range not used for METHOD = ‘SINV’. (Integer > 0)

norm = None

Method for normalizing eigenvectors. (‘MAX’ or ‘POINT’;Default=’MAX’)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGB'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.methods.EIGC(sid, method, grid, component, epsilon, neigenvalues, norm='MAX', mblkszs=None, iblkszs=None, ksteps=None, NJIs=None, alphaAjs=None, omegaAjs=None, alphaBjs=None, omegaBjs=None, LJs=None, NEJs=None, NDJs=None, shift_r1=None, shift_i1=None, isrr_flag=None, nd1=None, comment='')[source]

Bases: pyNastran.bdf.cards.methods.Method

Defines data needed to perform complex eigenvalue analysis .. todo: not done

inverse power

1

2

3

4

5

6

7

8

EIGC

SID

METHOD

EPS

ND0

ALPHAAj

OMEGAAj

ALPHABj

OMEGABj

Lj

NEj

NDj

complex Lanczos

1

2

3

4

5

6

7

8

SHIFTRj

SHIFTIj

MBLKSZj

IBLKSZj

KSTEPSj

NDj

iterative Schur-Rayleigh-Ritz

1

2

3

4

5

6

7

8

SHIFTR1

SHIFTI1

ISRRFLG

ND1

Creates a EIGC card, which is required for a SOL 107 analysis

Parameters
sidint

CMETHOD id in the case control deck

methodstr
Method of complex eigenvalue extraction

MSC 2014 = [INV, HESS, CLAN, IRAM] NX 8.5 = [INV, HESS, CLAN, ISRR] Autodesk 2015 = [ARNO, HESS, CLAN] INV : Inverse Power IRAM : Implicitly Restarted Arnoldi method ISRR : Iterative Schur-Rayleigh-Ritz method CLAN : Complex Lanczos. For linear perturbation of ANALYSIS=DCEIG

with large displacement, CLAN is recommended.

HESSUpper Hessenberg. For linear perturbation of ANALYSIS=DCEIG

with large displacement, please don’t use HESS.

ARNO: ???

normstr; default=’MAX’

Method for normalizing eigenvectors valid_norm = {MAX, POINT}

gridint

GRID/SPOINT id Required if norm=’POINT’

componentint

Required if norm=’POINT’

epsilonfloat
neigenvaluesint

Number of Eigenvalues

mblkszsList[float]; default=None

used by CLAN

iblkszsList[int]; default=None

used by CLAN

kstepsList[int]; default=None

used by CLAN

NJIsList[int]; default=None

used by CLAN

alphaAjsList[float]; default=None

used by HESS/INV

omegaAjsList[float]; default=None

used by HESS/INV

alphaBjsList[float]; default=None

used by HESS/INV

omegaBjsList[float]; default=None

used by HESS/INV

LJsList[float]; default=None

used by HESS/INV

NEJsList[int]; default=None

used by HESS/INV

NDJsList[int]; default=None

used by HESS/INV

shift_r1List[float]; default=None

used by ISSR

shift_i1List[float]; default=None

used by ISSR

isrr_flagList[int]; default=None

used by ISSR

nd1List[int]; default=None

used by ISSR

commentstr; default=’’

a comment for the card

C = None

Component number. Required only if NORM=’POINT’ and G is a geometric grid point. (1<Integer<6)

G = None

Grid or scalar point identification number. Required only if NORM=’POINT’. (Integer>0)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an EIGC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
epsilon = None

Convergence criterion. (Real > 0.0. Default values are: 10^-4 for METHOD = “INV”, 10^-8 for METHOD = “CLAN”, 10^-8 for METHOD = “ISRR”, 10^-15 for METHOD = “HESS”, E is machine dependent for METHOD = “CLAN”.)

method = None

Method of complex eigenvalue extraction MSC 2014 = [INV, HESS, CLAN, IRAM] NX 8.5 = [INV, HESS, CLAN, ISRR] Autodesk 2015 = [ARNO, HESS, CLAN]

norm = None

Method for normalizing eigenvectors

raw_fields()[source]
raw_method()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

repr_method()[source]
sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGC'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.methods.EIGP(sid, alpha1, omega1, m1, alpha2, omega2, m2, comment='')[source]

Bases: pyNastran.bdf.cards.methods.Method

Defines poles that are used in complex eigenvalue extraction by the Determinant method.

1

2

3

4

5

6

7

8

EIGP

SID

ALPHA1

OMEGA1

M1

ALPHA2

OMEGA2

M2

EIGP

15

-5.2

0.0

2

6.3

5.5

3

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an EIGPX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

alpha1 = None

Coordinates of point in complex plane. (Real)

alpha2 = None

Coordinates of point in complex plane. (Real)

cross_reference(model: BDF) → None[source]
m1 = None

Multiplicity of complex root at pole defined by point at ALPHAi and OMEGAi

m2 = None

Multiplicity of complex root at pole defined by point at ALPHAi and OMEGAi

omega1 = None

Coordinates of point in complex plane. (Real)

omega2 = None

Coordinates of point in complex plane. (Real)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGP'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.methods.EIGR(sid, method='LAN', f1=None, f2=None, ne=None, nd=None, norm='MASS', G=None, C=None, comment='')[source]

Bases: pyNastran.bdf.cards.methods.Method

Defines data needed to perform real eigenvalue analysis

# msc/nx | EIGR | SID | METH| F1 | F2 | NE | ND | | | | | NORM | G | C | | | | | |

Adds a EIGR card

Parameters
sidint

method id

methodstr; default=’LAN’

eigenvalue method recommended: {LAN, AHOU} obsolete : {INV, SINV, GIV, MGIV, HOU, MHOU, AGIV}

f1 / f2float; default=None

lower/upper bound eigenvalue

f2float; default=None

upper bound eigenvalue

neint; default=None

estimate of number of roots (used for INV)

ndint; default=None

desired number of roots

msglvlint; default=0

debug level; 0-4

maxsetint; default=None

Number of vectors in block or set

shfsclfloat; default=None

estimate of first flexible mode natural frequency

normstr; default=None

{MAX, MASS, AF, POINT} default=MASS (NX)

Gint; default=None

node id for normalization; only for POINT

Cint; default=None

component for normalization (1-6); only for POINT

commentstr; default=’’

a comment for the card

C = None

Component number. Required only if NORM=’POINT’ and G is a geometric grid point. (1<Integer<6)

G = None

Grid or scalar point identification number. Required only if NORM=’POINT’. (Integer>0)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an EIGR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_methods = ['LAN', 'AHOU', 'INV', 'SINV', 'GIV', 'MGIV', 'HOU', 'MHOU', 'AGIV']
cross_reference(model: BDF) → None[source]
f1 = None

Frequency range of interest

method = None

Method of eigenvalue extraction. (Character: ‘INV’ for inverse power method or ‘SINV’ for enhanced inverse power method.)

nd = None

Desired number of roots (default=600 for SINV 3*ne for INV)

ne = None

Estimate of number of roots in range (Required for METHOD = ‘INV’). Not used by ‘SINV’ method.

norm = None

Method for normalizing eigenvectors. (‘MAX’ or ‘POINT’; Default=’MAX’)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGR'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.methods.EIGRL(sid, v1=None, v2=None, nd=None, msglvl=0, maxset=None, shfscl=None, norm=None, options=None, values=None, comment='')[source]

Bases: pyNastran.bdf.cards.methods.Method

Defines data needed to perform real eigenvalue (vibration or buckling) analysis with the Lanczos method

1

2

3

4

5

6

7

8

9

EIGRL

SID

V1

V2

ND

MSGLVL

MAXSET

SHFSCL

NORM

option_1 = value_1 option_2 = value_2, etc.

Adds an EIGRL card

Parameters
sidint

method id

v1float; default=None

lower bound eigenvalue

v2float; default=None

upper bound eigenvalue

ndint

number of roots

msglvlint; default=0

debug level; 0-4

maxsetint; default=None

Number of vectors in block or set

shfsclfloat; default=None

estimate of first flexible mode natural frequency

normstr; default=None

{MAX, MASS, AF}

options???; default=None -> []

???

values???; default=None -> []

???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an EIGRL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
maxset = None

Number of vectors in block or set. Default is machine dependent

msglvl = None

Diagnostic level. (0 < Integer < 4; Default = 0)

nd = None

Number of roots desired

norm = None

Method for normalizing eigenvectors (Character: ‘MASS’ or ‘MAX’)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

shfscl = None

Estimate of the first flexible mode natural frequency (Real or blank)

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGRL'
v1 = None

For vibration analysis: frequency range of interest. For buckling analysis: eigenvalue range of interest. See Remark 4. (Real or blank, -5 10e16 <= V1 < V2 <= 5.10e16)

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.methods.MODTRAK(sid, low_range, high_range, mt_filter, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

MODTRAK SID LOWRNG HIGHRNG MTFILTER MODTRAK 100 1 26 0.80

classmethod add_card(card, comment='')[source]
raw_fields() → List[Any][source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.methods.Method[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Generic class for all methods. Part of self.methods

pyNastran.bdf.cards.methods._load_clan(nrows, card)[source]

loads complex Lanczos

pyNastran.bdf.cards.methods._load_hess_inv(nrows, method, card)[source]

loads inverse power

pyNastran.bdf.cards.methods._load_isrr(nrows, card)[source]

loads the iterative Schur-Rayleigh-Ritz

msgmesh Module
Inheritance diagram of pyNastran.bdf.cards.msgmesh
class pyNastran.bdf.cards.msgmesh.CGEN(Type, field_eid, pid, field_id, th_geom_opt, eidl, eidh, t_abcd=None, direction='L', comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

CGEN

TYPE

FIELD_EID

PID

FIELD_ID

DIR

TH_GEOM_OPT

EIDL

EIDH

CGEN

TRIA3

550

78

25

CGEN

TRIA6

520

78

26

CGEN

QUAD4

450

145

33

CGEN

HEXA8

610

57

41

CGEN

HEXA20

620

57

42

Creates the CGEN card

Parameters
Typestr

LINE, TRIA, QUAD, HEX

field_eidint

starting element id

pidint

property id

field_idint

GRIDG id

cdirstr

L, M, N

th_geom_opt
TH???

???

GEOM???

only when Type = BEND

OPT???

???

eidlint

???

eidhint

???

classmethod add_card(card, comment='')[source]

Adds a CGEN card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property node_ids
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[int/float/str]

the fields that define the card

safe_cross_reference(model)[source]
type = 'CGEN'
uncross_reference(model)[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

nodes Module
Inheritance diagram of pyNastran.bdf.cards.nodes

All nodes are defined in this file. This includes:

  • Node * XPoint

    • EPOINT

    • SPOINT

    • XPoints * EPOINTs * SPOINTs

    • GRID

    • GRDSET

    • GRIDB

  • POINT

  • Ring * RINGAX

  • SEQGP

All ungrouped elements are Node objects.

The EPOINT/SPOINT classes refer to a single EPOINT/SPOINT. The EPOINTs/SPOINTs classes are for multiple degrees of freedom (e.g. an SPOINT card).

class pyNastran.bdf.cards.nodes.EPOINT(nid, comment='')[source]

Bases: pyNastran.bdf.cards.nodes.XPoint

defines the EPOINT class

Creates the EPOINT card

Parameters
nidint

the EPOINT id

commentstr; default=’’

a comment for the card

type = 'EPOINT'
class pyNastran.bdf.cards.nodes.EPOINTs(ids, comment='')[source]

Bases: pyNastran.bdf.cards.nodes.XPoints

1

2

3

4

5

6

7

8

9

EPOINT

ID1

THRU

ID2

EPOINT

ID1

ID1

ID3

ID4

ID5

ID6

ID7

ID8

ID8

etc.

Creates the EPOINTs card that contains many EPOINTs

Parameters
idsList[int]

EPOINT ids

commentstr; default=’’

a comment for the card

create_epointi()[source]

Creates individal EPOINT objects

type = 'EPOINT'
class pyNastran.bdf.cards.nodes.GRDSET(cp: int, cd: int, ps: str, seid: int, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines default options for fields 3, 7, 8, and 9 of all GRID entries.

1

2

3

4

5

6

7

8

9

GRDSET

CP

CD

PS

SEID

Creates the GRDSET card

Parameters
cpint; default=0

the xyz coordinate frame

cdint; default=0

the analysis coordinate frame

psstr; default=’’

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seidint; default=0

superelement id TODO: how is this used by Nastran???

commentstr; default=’’

a comment for the card

Cd()[source]

Gets the output coordinate system

Returns
cdint

the output coordinate system

Cp()[source]

Gets the analysis coordinate system

Returns
cpint

the analysis coordinate system

Ps()[source]

Gets the GRID-based SPC

Returns
psstr

the GRID-based SPC

SEid()[source]

Gets the Superelement ID

Returns
seidint

the Superelement ID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GRDSET card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cd = None

Analysis coordinate system

cp = None

Output Coordinate System

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

ps = None

Default SPC constraint on undefined nodes

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

seid = None

Superelement ID

type = 'GRDSET'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint

the size of the card (8/16)

class pyNastran.bdf.cards.nodes.GRID(nid: int, xyz: Union[None, List[float], numpy.ndarray], cp: int = 0, cd: int = 0, ps: str = '', seid: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

GRID

NID

CP

X1

X2

X3

CD

PS

SEID

Attributes
nidint

node id

xyzfloat ndarray

Raw location <\(x_1, x_2, x_3\)>

cpint

reference coordinate system

cdint

analysis coordinate system

psstr

nodal-based constraints

seidint

superelement id

cp_refCoord() or None

cross-referenced cp

cd_refCoord() or None

cross-referenced cd

Methods

Nid()

gets nid

Cp()

gets cp_ref.cid or cp depending on cross-referencing

Cd()

gets cd_ref.cid or cd depending on cross-referencing

Ps()

gets ps

SEid()

superelement id

get_position()

gets xyz in the global frame

get_position_wrt(model, cid)

gets xyz in a local frame

cross_reference(model)

cross-references the card

uncross_reference()

uncross-references the card

set_position(model, xyz, cid=0, xref=True)

updates the coordinate system

Using the GRID object::

model = read_bdf(bdf_filename) node = model.Node(nid) # gets the position of the node in the global frame node.get_position() node.get_position_wrt(model, cid=0) # gets the position of the node in a local frame node.get_position_wrt(model, cid=1) # change the location of the node node.set_position(model, array([1.,2.,3.]), cid=3)

Creates the GRID card

Parameters
nidint

node id

cpint; default=0

the xyz coordinate frame

xyz(3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cdint; default=0

the analysis coordinate frame

psstr; default=’’

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seidint; default=0

superelement id TODO: how is this used by Nastran???

commentstr; default=’’

a comment for the card

Cd() → int[source]

Gets the output coordinate system

Returns
cdint

the output coordinate system

Cp() → int[source]

Gets the analysis coordinate system

Returns
cpint

the analysis coordinate system

Nid() → int[source]

Gets the GRID ID

Returns
nidint

node ID

Ps() → str[source]

Gets the GRID-based SPC

Returns
psstr

the GRID-based SPC

SEid() → int[source]

Gets the Superelement ID

Returns
seidint

the Superelement ID

classmethod add_card(card: BDFCard, comment: str = '') → Any[source]

Adds a GRID card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF, grdset: Optional[Any] = None) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

grdsetGRDSET / None; default=None

a GRDSET if available (default=None)

.. note:: The gridset object will only update the fields that

have not been set

classmethod export_to_hdf5(h5_file, model, nids)[source]

exports the nodes in a vectorized way

get_position() → numpy.ndarray[source]

Gets the point in the global XYZ coordinate system.

Returns
xyz(3, ) float ndarray

the position of the GRID in the global coordinate system

get_position_assuming_rectangular() → NDArray3float[source]

Gets the point in a coordinate system that has unit vectors in the referenced coordinate system, but is not transformed from a cylindrical/spherical system. This is used by cards like CBAR/CBEAM for element offset vectors.

Returns
xyz(3, ) float ndarray

the position of the GRID in the global coordinate system

get_position_no_xref(model: Any) → numpy.ndarray[source]
get_position_wrt(model: BDF, cid: int) → np.ndarray[source]

Gets the location of the GRID which started in some arbitrary system and returns it in the desired coordinate system

Parameters
modelBDF()

the BDF object

cidint

the desired coordinate ID

Returns
xyz(3, ) float ndarray

the position of the GRID in an arbitrary coordinate system

get_position_wrt_coord_ref(coord_out: CORDx) → np.ndarray[source]

Gets the location of the GRID which started in some arbitrary system and returns it in the desired coordinate system

Parameters
coord_outCORDx

the desired coordinate system

Returns
xyz(3, ) float ndarray

the position of the GRID in an arbitrary coordinate system

get_position_wrt_no_xref(model: BDF, cid: int) → NDArray3float[source]

see get_position_wrt

raw_fields() → List[Any][source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

repr_fields() → List[Any][source]

Gets the fields in their simplified form

Returns
fieldsList[int/float/str]

the fields that define the card

set_position(model: BDF, xyz: np.ndarray, cid: int = 0, xref: bool = True) → None[source]

Updates the GRID location

Parameters
xyz(3, ) float ndarray

the location of the node.

cpint; default=0 (global)

the analysis coordinate system

xrefbool; default=True

cross-references the coordinate system

type = 'GRID'
uncross_reference() → None[source]

Removes cross-reference links

validate() → None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint; default=8

the size of the card (8/16)

is_doublebool; default=False

should this card be written with double precision

Returns
msgstr

the card as a string

write_card_16(is_double: bool = False) → str[source]

Writes a GRID card in 16-field format

write_card_8() → str[source]

Writes a GRID card in 8-field format

class pyNastran.bdf.cards.nodes.GRIDB(nid, phi, cd, ps, ringfl, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

defines the GRIDB class

Creates the GRIDB card

Cd()[source]

Gets the output coordinate system

Returns
cdint

the output coordinate system

classmethod add_card(card, comment='')[source]

Adds a GRIDB card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

get_position()[source]
nid = None

node ID

ps = None

local SPC constraint

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

ringfl = None

ringfl

type = 'GRIDB'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint; default=8

the size of the card (8/16)

is_doublebool; default=False

should this card be written with double precision

Returns
msgstr

the card as a string

class pyNastran.bdf.cards.nodes.POINT(nid: int, xyz: Union[List[float], numpy.ndarray], cp: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

POINT

NID

CP

X1

X2

X3

Creates the POINT card

Parameters
nidint

node id

xyz(3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cpint; default=0

coordinate system for the xyz location

commentstr; default=’’

a comment for the card

Cp() → int[source]

Gets the analysis coordinate system

Returns
cpint

the analysis coordinate system

classmethod _init_from_empty()[source]
classmethod add_card(card: BDFCard, comment: str = '') → POINT[source]

Adds a POINT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp = None

Grid point coordinate system

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_position() → NDArray3float[source]

Gets the point in the global XYZ coordinate system.

Returns
position(3,) float ndarray

the position of the POINT in the globaly coordinate system

get_position_wrt(model, cid)[source]

Gets the location of the POINT which started in some arbitrary system and returns it in the desired coordinate system

Parameters
modelBDF()

the BDF model object

cidint

the desired coordinate ID

Returns
xyz(3,) ndarray

the position of the POINT in an arbitrary coordinate system

nid = None

Node ID

raw_fields() → List[Union[int, float, str, None]][source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields() → List[Union[int, float, str]][source]

Gets the fields in their simplified form

Returns
fieldslist[varies]

the fields that define the card

set_position(model, xyz, cid=0)[source]

Updates the POINT location

Parameters
xyz(3,) float ndarray

the location of the node

cpint; default=0 (global)

the analysis coordinate system

type = 'POINT'
uncross_reference() → None[source]

Removes cross-reference links

validate() → None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint

the size of the card (8/16)

xyz = None

node location in local frame

class pyNastran.bdf.cards.nodes.SEQGP(nids, seqids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

defines the SEQGP class

Creates the SEQGP card

Parameters
nidint

the node id

seqidint/float

the superelement id

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SEQGP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

append(seqgp)[source]
cross_reference(model: BDF) → None[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

type = 'SEQGP'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint; default=8

unused

is_doublebool; default=False

unused

class pyNastran.bdf.cards.nodes.SPOINT(nid, comment='')[source]

Bases: pyNastran.bdf.cards.nodes.XPoint

defines the SPOINT class

Creates the SPOINT card

Parameters
nidint

the SPOINT id

commentstr; default=’’

a comment for the card

get_position()[source]
type = 'SPOINT'
class pyNastran.bdf.cards.nodes.SPOINTs(ids, comment='')[source]

Bases: pyNastran.bdf.cards.nodes.XPoints

1

2

3

4

5

6

7

8

9

SPOINT

ID1

THRU

ID2

SPOINT

ID1

ID1

ID3

ID4

ID5

ID6

ID7

ID8

ID8

etc.

Creates the SPOINTs card that contains many SPOINTs

Parameters
idsList[int]

SPOINT ids

commentstr; default=’’

a comment for the card

create_spointi()[source]

Creates individal SPOINT objects

type = 'SPOINT'
class pyNastran.bdf.cards.nodes.XPoint(nid, comment)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

common class for EPOINT/SPOINT

classmethod _export_to_hdf5(h5_file, model: BDF, nids: List[int]) → None[source]

exports the nodes in a vectorized way

classmethod _init_from_empty()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

property type

dummy method for EPOINT/SPOINT classes

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint; default=8

unused

is_doublebool; default=False

unused

class pyNastran.bdf.cards.nodes.XPoints(ids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

common class for EPOINTs and SPOINTs

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SPOINT/EPOINT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

add_points(sList)[source]

Adds more EPOINTs/SPOINTs to this object

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

property type

dummy method for EPOINTs/SPOINTs classes

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card

Parameters
sizeint; default=8

unused

is_doublebool; default=False

unused

pyNastran.bdf.cards.nodes.compress_xpoints(point_type: str, xpoints: List[int]) → List[List[int]][source]

Gets the SPOINTs/EPOINTs in sorted, short form.

uncompressed: SPOINT,1,3,5 compressed: SPOINT,1,3,5

uncompressed: SPOINT,1,2,3,4,5 compressed: SPOINT,1,THRU,5

uncompressed: SPOINT,1,2,3,4,5,7 compressed: SPOINT,7

SPOINT,1,THRU,5

point_type = ‘SPOINT’ spoints = [1, 2, 3, 4, 5] fields = compressed_xpoints(point_type, spoints) >>> fields [‘SPOINT’, 1, ‘THRU’, 5]

pyNastran.bdf.cards.nodes.write_xpoints(cardtype: str, points, comment: str = '') → str[source]

writes SPOINTs/EPOINTs

optimization Module
Inheritance diagram of pyNastran.bdf.cards.optimization

All optimization cards are defined in this file. This includes:

  • dconstrs - DCONSTR

  • dconadds - DCONADD

  • ddvals - DDVAL

  • dlinks - DLINK

  • dresps - DRESP1, DRESP2, DRESP3

  • dscreen - DSCREEN

  • dvgrids - DVGRID

  • desvars - DESVAR

  • dvcrels - DVCREL1, DVCREL2

  • dvmrels - DVMREL1, DVMREL2

  • dvprels - DVPREL1, DVPREL2

  • doptprm - DOPTPRM

some missing optimization flags http://mscnastrannovice.blogspot.com/2014/06/msc-nastran-design-optimization-quick.html

class pyNastran.bdf.cards.optimization.DCONADD(oid, dconstrs, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

1

2

3

4

5

6

7

8

9

DCONADD

DCID

DC1

DC2

DC3

DC4

DC5

DC6

DC7

DC8

etc.

DCONADD

10

4

12

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DCONADD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dconstr_ids
classmethod export_to_hdf5(hdf5_file, dconadds, encoding)[source]
raw_fields()[source]
type = 'DCONADD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DCONSTR(oid, dresp_id, lid=-1e+20, uid=1e+20, lowfq=0.0, highfq=1e+20, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

Creates a DCONSTR card

Parameters
oidint

unique optimization id

dresp_idint

DRESP1/2 id

lid / uidint/float; default=-1.e20 / 1.e20

int: f(ω) defined by TABLED1-4 float: lower/upper bound

lowfq / highfqfloat; default=0. / 1.e20

lower/upper end of the frequency range

commentstr; default=’’

a comment for the card

DRespID()[source]
Lid()[source]
Rid()[source]
Uid()[source]
classmethod add_card(card, comment='')[source]

Adds a DCONSTR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(hdf5_file, dconstrs, encoding)[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'DCONSTR'

1

2

3

4

5

6

7

DCONSTR

DCID

RID

LALLOW/LID

UALLOW/UID

LOWFQ

HIGHFQ

DCONSTR

10

4

1.25

uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DDVAL(oid, ddvals, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

1

2

3

4

5

6

7

8

9

DDVAL

ID

DVAL1

DVAL2

DVAL3

DVAL4

DVAL5

DVAL6

DVAL7

DDVAL

ID

DVAL1

THRU

DVAL2

BY

INC

DDVAL

110

0.1

0.2

0.3

0.5

0.6

0.4

.7

THRU

1.0

BY

0.05

1.5

2.0

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DDVAL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'DDVAL'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DESVAR(desvar_id, label, xinit, xlb=-1e+20, xub=1e+20, delx=None, ddval=None, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

Creates a DESVAR card

Parameters
desvar_idint

design variable id

labelstr

name of the design variable

xinitfloat

the starting point value for the variable

xlbfloat; default=-1.e20

the lower bound

xubfloat; default=1.e20

the lower bound

delxfloat; default=1.e20

fractional change allowed for design variables during approximate optimization NX if blank : take from DOPTPRM; otherwise 1.0 MSC if blank : take from DOPTPRM; otherwise 0.5

ddvalint; default=None
intDDVAL id

allows you to set discrete values

None : continuous

commentstr; default=’’

a comment for the card

DDVal()[source]
_properties = ['value']
classmethod add_card(card, comment='')[source]

Adds a DESVAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, desvar_ids)[source]

exports the elements in a vectorized way

label = None

user-defined name for printing purposes

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
type = 'DESVAR'

1

2

3

4

5

6

7

8

DESVAR

OID

LABEL

XINIT

XLB

XUB

DELXV

DDVAL

uncross_reference() → None[source]

Removes cross-reference links

property value

gets the actual value for the DESVAR

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

Bases: pyNastran.bdf.cards.optimization.OptConstraint

Multiple Design Variable Linking Relates one design variable to one or more other design variables.

1

2

3

4

5

6

7

8

9

DLINK

ID

DDVID

C0

CMULT

IDV1

C1

IDV2

C2

IDV3

C3

etc.

Creates a DLINK card, which creates a variable that is a lienar ccombination of other design variables

Parameters
oidint

optimization id

dependent_desvarint

the DESVAR to link

independent_desvarsList[int]

the DESVARs to combine

coeffsList[int]

the linear combination coefficients

c0float; default=0.0

an offset

cmultfloat; default=1.0

an scale factor

commentstr; default=’’

a comment for the card

property Ci
property IDv
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DLINK card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property ddvid
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'DLINK'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DOPTPRM(params, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

causes a Nastran core dump if FSDMAX is nonzero and there is no stress case

Design Optimization Parameters Overrides default values of parameters used in design optimization

1

2

3

4

5

6

7

8

9

DOPTPRM

PARAM1

VAL1

PARAM2

VAL2

PARAM3

VAL3

PARAM4

VAL4

PARAM5

VAL5

etc.

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DOPTPRM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

defaults = {'APRCOD': 2, 'AUTOSE': 0, 'CONV1': 0.0001, 'CONV2': 1e-20, 'CONVDV': 0.001, 'CONVPR': 0.001, 'CT': -0.03, 'CTMIN': 0.003, 'DELB': 0.0001, 'DELOBJ': 0.001, 'DELP': 0.2, 'DELX': 0.5, 'DESMAX': 5, 'DISBEG': 0, 'DISCOD': 1, 'DLXESL': 0.5, 'DOBJ1': 0.1, 'DOBJ2': None, 'DPMAX': 0.5, 'DPMIN': 0.01, 'DRATIO': 0.1, 'DSMXESL': 20, 'DX1': 0.01, 'DX2': None, 'DXMAX': 1.0, 'DXMIN': 0.05, 'EDVOUT': 0.001, 'ETA1': 0.01, 'ETA2': 0.25, 'ETA3': 0.7, 'FSDALP': 0.9, 'FSDMAX': 0, 'GMAX': 0.005, 'GSCAL': 0.001, 'IGMAX': 0, 'IPRINT': 0, 'IPRNT1': 0, 'IPRNT2': 0, 'ISCAL': 0, 'ITMAX': 40, 'ITRMOP': 2, 'ITRMST': 2, 'IWRITE': 6, 'JPRINT': 0, 'JTMAX': 20, 'JWRITE': 0, 'METHOD': 1, 'MXCRTRSP': 5, 'NASPRO': 0, 'OBJMOD': 0, 'OPTCOD': 0, 'P1': 0, 'P2': 1, 'P2CALL': None, 'P2CBL': None, 'P2CC': None, 'P2CDDV': None, 'P2CM': None, 'P2CP': None, 'P2CR': None, 'P2RSET': 0, 'PENAL': 0.0, 'PLVIOL': 0, 'PTOL': 1e+35, 'STPSCL': 1.0, 'TCHECK': -1, 'TDMIN': None, 'TREGION': 0, 'UPDFAC1': 2.0, 'UPDFAC2': 0.5}
raw_fields()[source]
type = 'DOPTPRM'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti, comment='', validate=False)[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

1

2

3

4

5

6

7

8

9

DRESP1

OID

LABEL

RTYPE

PTYPE

REGION

ATTA

ATTB

ATTI

DRESP1

103

STRESS2

STRESS

PSHELL

9

3

DRESP1

1S1

CSTRAN3

CSTRAIN

PCOMP

1

1

10000

Creates a DRESP1 card.

A DRESP1 is used to define a “simple” output result that may be optimized on. A simple result is a result like stress, strain, force, displacement, eigenvalue, etc. for a node/element that may be found in a non-optimization case.

Parameters
dresp_idint

response id

labelstr

Name of the response

response_typestr

Response type

property_typestr

Element flag (PTYPE = ‘ELEM’), or property entry name, or panel flag for ERP responses (PTYPE = ‘PANEL’ - See Remark 34), or RANDPS ID. Blank for grid point responses. ‘ELEM’ or property name used only with element type responses (stress, strain, force, etc.) to identify the relevant element IDs, or the property type and relevant property IDs.

Must be {ELEM, PBAR, PSHELL, PCOMP, PANEL, etc.) PTYPE = RANDPS ID when RTYPE=PSDDISP, PSDVELO, or PSDACCL.

regionint

Region identifier for constraint screening

attaint / float / str / blank

Response attribute

attbint / float / str / blank

Response attribute

attiList[int / float / str]

the response values to pull from List[int]:

list of grid ids list of property ids

List[str]

‘ALL’

commentstr; default=’’

a comment for the card

validatebool; default=False

should the card be validated when it’s created

Examples

stress/PSHELL

>>> dresp_id = 103
>>> label = 'resp1'
>>> response_type = 'STRESS'
>>> property_type = 'PSHELL'
>>> pid = 3
>>> atta = 9 # von mises upper surface stress
>>> region = None
>>> attb = None
>>> atti = [pid]
>>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

stress/PCOMP

>>> dresp_id = 104
>>> label = 'resp2'
>>> response_type = 'STRESS'
>>> property_type = 'PCOMP'
>>> pid = 3
>>> layer = 4
>>> atta = 9 # von mises upper surface stress
>>> region = None
>>> attb = layer
>>> atti = [pid]
>>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

stress/PCOMP

>>> dresp_id = 104
>>> label = 'resp2'
>>> response_type = 'CSTRESS'
>>> property_type = 'ELEM'
>>> pid = 3
>>> layer = 4
>>> atta = 3 # ???
>>> region = None
>>> attb = layer
>>> atti = [eid]
>>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

displacement - not done

>>> dresp_id = 105
>>> label = 'resp3'
>>> response_type = 'DISP'
>>> #atta = ???
>>> #region = ???
>>> #attb = ???
>>> atti = [nid]
>>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

not done >>> dresp_id = 105 >>> label = ‘resp3’ >>> response_type = ‘ELEM’ >>> #atta = ??? >>> #region = ??? >>> #attb = ??? >>> atti = [eid???] >>> DRESP1(dresp_id, label, response_type, property_type, region, atta, attb, atti)

Atta()[source]

returns the values of ATTa

DRespID()[source]
OptID()[source]
_elements()[source]

helper method

_nodes()[source]

helper method

_properties()[source]

helper method

classmethod add_card(card, comment='')[source]

Adds a DRESP1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

atti_values()[source]

returns the values of ATTi

calculate(op2_model, subcase_id)[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the dresps in a vectorized way

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

property ptype
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

property rtype
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'DRESP1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DRESP2(dresp_id, label, dequation, region, params, method='MIN', c1=1.0, c2=0.005, c3=10.0, comment='', validate=False)[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

Design Sensitivity Equation Response Quantities Defines equation responses that are used in the design, either as constraints or as an objective.

1

2

3

4

5

6

7

8

9

DRESP2

ID

LABEL

EQID/FUNC

REGION

METHOD

C1

C2

C3

DESVAR

DVID1

DVID2

DVID3

DVID4

DVID5

DVID6

DVID7

DVID8

etc.

DTABLE

LABL1

LABL2

LABL3

LABL4

LABL5

LABL6

LABL7

LABL8

etc.

DRESP1

NR1

NR2

NR3

NR4

NR5

NR6

NR7

NR8

etc.

DNODE

G1

C1

G2

C2

G3

C3

G4

C4

etc.

DVPREL1

DPIP1

DPIP2

DPIP3

DPIP4

DPIP5

DPIP6

DPIP7

DPIP8

DPIP9

etc.

DVCREL1

DCIC1

DCIC2

DCIC3

DCIC4

DCIC5

DCIC6

DCIC7

DCIC8

DCIC9

etc.

DVMREL1

DMIM1

DMIM2

DMIM3

DMIM4

DMIM5

DMIM6

DMIM7

DMIM8

DMIM9

etc.

DVPREL2

DPI2P1

DPI2P2

DPI2P3

DPI2P4

DPI2P5

DPI2P6

DPI2P7

DPI2P8

DPI2P9

etc.

DVCREL2

DCI2C1

DCI2C2

DCI2C3

DCI2C4

DCI2C5

DCI2C6

DCI2C7

DCI2C8

DCI2C9

etc.

DVMREL2

DMI2M1

DMI2M2

DMI2M3

DMI2M4

DMI2M5

DMI2M6

DMI2M7

DMI2M8

DMI2M9

etc.

DRESP2

NRR1

NRR2

NRR3

NRR4

NRR5

NRR6

NRR7

NRR8

etc.

DVLREL1

DLIL1

DLIL2

DLIL3

DLIL4

DLIL5

DLIL6

DLIL7

DLIL8

etc.

C1, C2, C3 are MSC specific

Creates a DRESP2 card.

A DRESP2 is used to define a “complex” output result that may be optimized on. A complex result is a result that uses:

  • simple (DRESP1) results

  • complex (DRESP2) results

  • default values (DTABLE)

  • DVCRELx values

  • DVMRELx values

  • DVPRELx values

  • DESVAR values

  • DNODE values

Then, an equation (DEQATN) is used to formulate an output response.

Parameters
dresp_idint

response id

labelstr

Name of the response

dequationint / str

int : DEQATN id str : an equation

regionint

Region identifier for constraint screening

paramsdict[(index, card_type)] = values

the storage table for the response function index : int

a counter

card_typestr

the type of card to pull from DESVAR, DVPREL1, DRESP2, etc.

valuesList[int]

the values for this response

methodstr; default=MIN

flag used for FUNC=BETA/MATCH FUNC = BETA

valid options are {MIN, MAX}

FUNC = MATCH

valid options are {LS, BETA}

c1 / c2 / c3float; default=1. / 0.005 / 10.0

constants for FUNC=BETA or FUNC=MATCH

commentstr; default=’’

a comment for the card

validatebool; default=False

should the card be validated when it’s created

params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}
DEquation()[source]
DRespID()[source]
OptID()[source]
_pack(params: List[Any])[source]

packs the params/params_ref into a form for output

_pack_params()[source]
_validate()[source]
classmethod add_card(card, comment='')[source]

Adds a DRESP2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

calculate(op2_model, subcase_id)[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the dresps in a vectorized way

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'DRESP2'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DRESP3(dresp_id, label, group, Type, region, params, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

1

2

3

4

5

6

7

8

9

DRESP3

ID

LABEL

GROUP

TYPE

REGION

DESVAR

DVID1

DVID2

DVID3

DVID4

DVID5

DVID6

DVID7

DVID8

etc.

DTABLE

LABL1

LABL2

LABL3

LABL4

LABL5

LABL6

LABL7

LABL8

etc.

DRESP1

NR1

NR2

NR3

NR4

NR5

NR6

NR7

NR8

etc.

DNODE

G1

C1

G2

C2

G3

C3

G4

C4

etc.

DVPREL1

DPIP1

DPIP2

DPIP3

DPIP4

DPIP5

DPIP6

DPIP7

DPIP8

DPIP9

etc.

DVCREL1

DCIC1

DCIC2

DCIC3

DCIC4

DCIC5

DCIC6

DCIC7

DCIC8

DCIC9

etc.

DVMREL1

DMIM1

DMIM2

DMIM3

DMIM4

DMIM5

DMIM6

DMIM7

DMIM8

DMIM9

etc.

DVPREL2

DPI2P1

DPI2P2

DPI2P3

DPI2P4

DPI2P5

DPI2P6

DPI2P7

DPI2P8

DPI2P9

etc.

DVCREL2

DCI2C1

DCI2C2

DCI2C3

DCI2C4

DCI2C5

DCI2C6

DCI2C7

DCI2C8

DCI2C9

etc.

DVMREL2

DMI2M1

DMI2M2

DMI2M3

DMI2M4

DMI2M5

DMI2M6

DMI2M7

DMI2M8

DMI2M9

etc.

DRESP2

NRR1

NRR2

NRR3

NRR4

NRR5

NRR6

NRR7

NRR8

etc.

DVLREL1

DLIL1

DLIL2

DLIL3

DLIL4

DLIL5

DLIL6

DLIL7

DLIL8

etc.

USRDATA

String

etc.

Creates a DRESP3 card.

A DRESP3 is used to define a “complex” output result that may be optimized on. A complex result is a result that uses:

  • simple (DRESP1) results

  • complex (DRESP2) results

  • default values (DTABLE)

  • DVCRELx values

  • DVMRELx values

  • DVPRELx values

  • DESVAR values

  • DNODE values

  • DVLREL1 values

  • USRDATA

Then, an secondary code (USRDATA) is used to formulate an output response.

Parameters
dresp_idint

response id

labelstr

Name of the response

groupstr

Selects a specific external response routine

Typestr

Refers to a specific user-created response calculation type in the external function evaluator

regionstr

Region identifier for constraint screening

paramsdict[(index, card_type)] = values

the storage table for the response function index : int

a counter

card_typestr

the type of card to pull from DESVAR, DVPREL1, DRESP2, etc.

valuesList[int]

the values for this response

commentstr; default=’’

a comment for the card

validatebool; default=False

should the card be validated when it’s created

params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}
_pack(params)[source]

packs the params/params_ref into a form for output

_pack_params()[source]
_validate()[source]
classmethod add_card(card, comment='')[source]

Adds a DRESP3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the dresps in a vectorized way

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'DRESP3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DSCREEN(rtype: str, trs: float = -0.5, nstr: int = 20, comment: str = '')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

1

2

3

4

DSCREEN

RTYPE

TRS

NSTR

DSCREEN

DISP

-0.3

NSTR

Creates a DSCREEN object

Parameters
rtypestr

Response type for which the screening criteria apply

trsfloat; default=-0.5

Truncation threshold

nstrint; default=20

Maximum number of constraints to be retained per region per load case

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment: str = '')[source]

Adds a DSCREEN card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

nstr = None

Maximum number of constraints to be retained per region per load case. (Integer > 0; Default = 20)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

rtype = None

Response type for which the screening criteria apply. (Character)

trs = None

Truncation threshold. (Real; Default = -0.5)

type = 'DSCREEN'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVCREL1(oid, element_type, eid, cp_name, dvids, coeffs, cp_min=None, cp_max=1e+20, c0=0.0, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.DVXREL1

1

2

3

4

5

6

7

8

9

DVCREL1

ID

TYPE

EID

CPNAME

CPMIN

CPMAX

C0

DVID1

COEF1

DVID2

COEF2

DVID3

etc.

DVCREL1

200000

CQUAD4

1

ZOFFS

1.0

200000

1.0

Eid()[source]
OptID()[source]
property Type
_get_element(model, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvcrel(element, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVCREL1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

calculate(op2_model, subcase_id)[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'DVCREL1'
uncross_reference() → None[source]

Removes cross-reference links

update_model(model, desvar_values)[source]

doesn’t require cross-referencing

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVCREL2(oid, element_type, eid, cp_name, deqation, dvids, labels, cp_min=None, cp_max=1e+20, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.DVXREL2

1

2

3

4

5

6

7

8

9

DVCREL2

ID

TYPE

EID

CPNAME/FID

CPMIN

CPMAX

EQID

DESVAR

DVID1

DVID2

DVID3

DVID4

DVID5

DVID6

DVID7

DVID8

etc.

DTABLE

LABL1

LABL2

LABL3

LABL4

LABL5

LABL6

LABL7

LABL8

etc.

DEquation()[source]
Eid()[source]
OptID()[source]
property Type
_get_element(model, eid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvcrel(elem, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVCREL2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_elements = ['CQUAD4', 'CTRIA3', 'CBAR', 'CBEAM', 'CELAS1', 'CBUSH', 'CDAMP2']
calculate(op2_model, subcase_id)[source]

this should really make a call the the DEQATN; see the PBEAM for an example of get/set_opt_value

cp_max = None

Maximum value allowed for this property. (Real; Default = 1.0E20)

cp_min = None

Minimum value allowed for this property. If CPNAME references a connectivity property that can only be positive, then the default value of CPMIN is 1.0E-15. Otherwise, it is -1.0E35. (Real) .. todo:: bad default (see DVCREL2)

cp_name = None

Name of connectivity property, such as X1, X2, X3, ZOFFS, etc. (Character)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

.. todo:: add support for DEQATN cards to finish DVPREL2 xref
eid = None

Element Identification number. (Integer > 0)

element_type = None

Name of an element connectivity entry, such as CBAR, CQUAD4, etc. (Character)

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields()[source]
repr_fields()[source]

Todo

finish repr_fields for DVCREL2

type = 'DVCREL2'
uncross_reference() → None[source]

Removes cross-reference links

update_model(model, desvar_values)[source]

doesn’t require cross-referencing

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVGRID(dvid, nid, dxyz, cid=0, coeff=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

DVGRID

DVID

GID

CID

COEFF

N1

N2

N3

Creates a DVGRID card

Parameters
dvidint

DESVAR id

nidint

GRID/POINT id

dxyz(3, ) float ndarray

the amount to move the grid point

cidint; default=0

Coordinate system for dxyz

coefffloat; default=1.0

the dxyz scale factor

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['desvar_id', 'node_id', 'coord_id']
static add_card(card, comment='')[source]

Adds a DVGRID card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property coord_id
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property desvar_id
property node_id
raw_fields()[source]
type = 'DVGRID'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVMREL1(oid, mat_type, mid, mp_name, dvids, coeffs, mp_min=None, mp_max=1e+20, c0=0.0, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.DVXREL1

Design Variable to Material Relation Defines the relation between a material property and design variables.

1

2

3

4

5

6

7

8

DVMREL1

ID

TYPE

MID

MPNAME

MPMIN

MPMAX

C0

DVID1

COEF1

DVID2

COEF2

DVID3

COEF3

etc.

Creates a DVMREL1 card

Parameters
oidint

optimization id

prop_typestr

material card name (e.g., MAT1)

midint

material id

mp_namestr

optimization parameter as a pname (material name; E)

dvidsList[int]

DESVAR ids

coeffsList[float]

scale factors for DESVAR ids

mp_minfloat; default=None

minimum material property value

mp_maxfloat; default=1e20

maximum material property value

c0float; default=0.

offset factor for the variable

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

Mid()[source]
OptID()[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvmrel(mat, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVMREL1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'DVMREL1'
uncross_reference() → None[source]

Removes cross-reference links

update_model(model, desvar_values)[source]

doesn’t require cross-referencing

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVMREL2(oid, mat_type, mid, mp_name, deqation, dvids, labels, mp_min=None, mp_max=1e+20, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.DVXREL2

1

2

3

4

5

6

7

8

9

DVMREL2

ID

TYPE

MID

MPNAME

MPMIN

MPMAX

EQID

DESVAR

DVID1

DVID2

DVID3

DVID4

DVID5

DVID6

DVID7

DVID8

etc.

DTABLE

LABL1

LABL2

LABL3

LABL4

LABL5

LABL6

LABL7

LABL8

etc.

Creates a DVMREL2 card

Parameters
oidint

optimization id

mat_typestr

material card name (e.g., MAT1)

midint

material id

mp_namestr

optimization parameter as a pname (material name; E)

deqationint

DEQATN id

dvidsList[int]; default=None

DESVAR ids

labelsList[str]; default=None

DTABLE names

mp_minfloat; default=None

minimum material property value

mp_maxfloat; default=1e20

maximum material property value

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

.. note:: either dvids or labels is required
DEquation()[source]
Mid()[source]
OptID()[source]
_get_material(model, mid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvmrel(mat, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVMREL2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_materials = ['MAT1', 'MAT2', 'MAT8']
calculate(op2_model, subcase_id)[source]

this should really make a call the the DEQATN; see the PBEAM for an example of get/set_opt_value

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

.. todo:: add support for DEQATN cards to finish DVMREL2 xref
mat_type = None

Name of a material entry, such as MAT1, MAT2, etc

mid = None

Property entry identification number

mp_max = None

Maximum value allowed for this property. (Real; Default = 1.0E20)

mp_min = None

Minimum value allowed for this property. If MPNAME references a material property that can only be positive, then the default value for MPMIN is 1.0E-15. Otherwise, it is -1.0E35. (Real)

mp_name = None

Property name, such as ‘E’, ‘RHO’ (Character)

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields()[source]
repr_fields()[source]

Todo

finish repr_fields for DVMREL2

type = 'DVMREL2'
uncross_reference() → None[source]

Removes cross-reference links

update_model(model, desvar_values)[source]

doesn’t require cross-referencing

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVPREL1(oid, prop_type, pid, pname_fid, dvids, coeffs, p_min=None, p_max=1e+20, c0=0.0, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.DVXREL1

1

2

3

4

5

6

7

8

DVPREL1

ID

TYPE

PID

PNAME/FID

PMIN

PMAX

C0

DVID1

COEF1

DVID2

COEF2

DVID3

etc.

DVPREL1

200000

PCOMP

2000

T2

200000

1.0

Creates a DVPREL1 card

Parameters
oidint

optimization id

prop_typestr

property card name (e.g., PSHELL)

pidint

property id

pname_fidstr/int

optimization parameter as a pname (property name; T) or field number (fid)

dvidsList[int]

DESVAR ids

coeffsList[float]

scale factors for DESVAR ids

p_minfloat; default=None

minimum property value

p_maxfloat; default=1e20

maximum property value

c0float; default=0.

offset factor for the variable

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

OptID()[source]
Pid()[source]
_get_property(model, pid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids', 'allowed_properties', 'allowed_elements', 'allowed_masses', 'allowed_properties_mass']
_update_by_dvprel(prop, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVPREL1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_elements = ['CELAS2', 'CBAR', 'CBEAM', 'CQUAD4', 'CBUSH', 'CDAMP2']
allowed_masses = ['CONM2', 'CMASS2', 'CMASS4']
allowed_properties = ['PELAS', 'PROD', 'PTUBE', 'PBAR', 'PBARL', 'PBEAM', 'PBEAML', 'PSHEAR', 'PSHELL', 'PCOMP', 'PCOMPG', 'PBUSH', 'PBUSH1D', 'PGAP', 'PVISC', 'PDAMP', 'PWELD', 'PBMSECT']
allowed_properties_mass = ['PMASS']
calculate(op2_model, subcase_id)[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_xinit_lower_upper_bound(model)[source]

gets the active x value and the lower/upper bounds

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'DVPREL1'
uncross_reference() → None[source]

Removes cross-reference links

update_model(model, desvar_values)[source]

doesn’t require cross-referencing

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVPREL2(oid, prop_type, pid, pname_fid, deqation, dvids=None, labels=None, p_min=None, p_max=1e+20, validate=False, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.DVXREL2

1

2

3

4

5

6

7

8

9

DVPREL2

ID

TYPE

PID

PNAME/FID

PMIN

PMAX

EQID

DESVAR

DVID1

DVID2

DVID3

DVID4

DVID5

DVID6

DVID7

DVID8

etc.

DTABLE

LABL1

LABL2

LABL3

LABL4

LABL5

LABL6

LABL7

LABL8

etc.

Creates a DVPREL2 card

Parameters
oidint

optimization id

prop_typestr

property card name (e.g., PSHELL)

pidint

property id

pname_fidstr/int

optimization parameter as a pname (property name; T) or field number (fid)

deqationint

DEQATN id

dvidsList[int]; default=None

DESVAR ids

labelsList[str]; default=None

DTABLE names

#paramsdict[(index, card_type)] = values

#the storage table for the response function #index : int

#a counter

#card_typestr

#the type of card to pull from #DESVAR, DVPREL1, DRESP2, etc.

#valuesList[int]

#the values for this response

p_minfloat; default=None

minimum property value

p_maxfloat; default=1e20

maximum property value

validatebool; default=False

should the variable be validated

commentstr; default=’’

a comment for the card

.. note:: either dvids or labels is required
DEquation()[source]
OptID()[source]
Pid()[source]
_get_property(model, pid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvprel(prop, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVPREL2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_elements = ['CELAS2', 'CBAR', 'CBEAM', 'CQUAD4', 'CBUSH', 'CDAMP2']
allowed_masses = ['CONM2', 'CMASS2', 'CMASS4']
allowed_properties = ['PELAS', 'PROD', 'PTUBE', 'PBAR', 'PBARL', 'PBEAM', 'PBEAML', 'PSHELL', 'PCOMP', 'PCOMPG', 'PBUSH', 'PBUSH1D', 'PGAP', 'PVISC', 'PDAMP', 'PWELD']
allowed_properties_mass = ['PMASS']
calculate(op2_model, subcase_id)[source]

this should really make a call the the DEQATN; see the PBEAM for an example of get/set_optimization_value

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

.. todo:: add support for DEQATN cards to finish DVPREL2 xref
get_xinit_lower_upper_bound(model)[source]

gets the active x value and the lower/upper bounds

p_max = None

Maximum value allowed for this property. (Real; Default = 1.0E20)

p_min = None

Minimum value allowed for this property. If FID references a stress recovery location field, then the default value for PMIN is -1.0+35. PMIN must be explicitly set to a negative number for properties that may be less than zero (for example, field ZO on the PCOMP entry). (Real; Default = 1.E-15) .. todo:: bad default (see DVMREL1)

pid = None

Property entry identification number

pname_fid = None

Property name, such as ‘T’, ‘A’, or field position of the property entry, or word position in the element property table of the analysis model. Property names that begin with an integer such as 12I/T**3 may only be referred to by field position. (Character or Integer 0)

prop_type = None

Name of a property entry, such as PBAR, PBEAM, etc

raw_fields()[source]
repr_fields()[source]

Todo

finish repr_fields for DVPREL2

type = 'DVPREL2'
uncross_reference() → None[source]

Removes cross-reference links

update_model(model, desvar_values)[source]

doesn’t require cross-referencing

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.optimization.DVXREL1(oid, dvids, coeffs, c0, comment)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

property desvar_ids
validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.optimization.DVXREL2(oid, dvids, labels, deqation, comment)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

_check_args()[source]

checks the number of DEQATN args

dequation = None

DEQATN entry identification number. (Integer > 0)

property desvar_ids
oid = None

Unique identification number

validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.optimization.OptConstraint[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

class pyNastran.bdf.cards.optimization.TOPVAR(opt_id, label, prop_type, xinit, pid, xlb=0.001, delxv=0.2, power=3.0, options=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

classmethod add_card(card, comment='')[source]

Adds a DESVAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TOPVAR'
uncross_reference()[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.optimization._blank_or_mode(attb, msg)[source]

if it’s blank, it’s a static result, otherwise it’s a mode id

pyNastran.bdf.cards.optimization._check_dvcrel_options(cp_name, element_type, options)[source]
pyNastran.bdf.cards.optimization._check_dvmrel_options(mp_name, material_type, options)[source]
pyNastran.bdf.cards.optimization._check_dvprel_options(pname_fid, prop_type, options)[source]
pyNastran.bdf.cards.optimization._check_pbeam_pbeaml_allowable_attas(atta: int, msg: str) → None[source]

6 /16/26…106: point E stress 8 /18/28…108: max principal 9 /19/29…109: min principal 10/20/30…110: margin tension 11/21/31…111: margin compression

pyNastran.bdf.cards.optimization._dresp_verify_eids(dresp: DRESP1, model: BDF, property_type)[source]
pyNastran.bdf.cards.optimization._export_dresps_to_hdf5(h5_file, model, encoding)[source]

exports dresps

pyNastran.bdf.cards.optimization._get_desvar(desvar_values, desvar_id, dvxrel)[source]
pyNastran.bdf.cards.optimization._get_dresp23_table_values(name, values_list, inline=False)[source]
Parameters
namestr

the name of the response (e.g., DRESP1, DVPREL1)

values_listvaries

typical : List[int] DNODE : List[List[int], List[int]]

inlinebool; default=False

used for DNODE

pyNastran.bdf.cards.optimization._get_dtable_value(dtable, labels, dvxrel)[source]
pyNastran.bdf.cards.optimization._validate_dresp1_force(property_type, response_type, atta, attb, atti)[source]

helper for validate_dresp

pyNastran.bdf.cards.optimization._validate_dresp1_stress_strain(property_type, response_type, atta, attb, atti)[source]

helper for validate_dresp

pyNastran.bdf.cards.optimization._validate_dresp_property_none(property_type, response_type, atta, attb, atti)[source]

helper for validate_dresp

pyNastran.bdf.cards.optimization.get_deqatn_args(dvxrel2, model, desvar_values)[source]

gets the arguments for the DEQATN for the DVxREL2

pyNastran.bdf.cards.optimization.get_deqatn_value(dvxrel2, model, desvar_values)[source]
pyNastran.bdf.cards.optimization.get_dvprel_key(dvprel, prop=None)[source]

helper method for the gui

pyNastran.bdf.cards.optimization.get_dvxrel1_coeffs(dvxrel, model, desvar_values, debug=False)[source]

Used by DVPREL1/2, DVMREL1/2, DVCREL1/2, and DVGRID to determine the value for the new property/material/etc. value

pyNastran.bdf.cards.optimization.none_max(lower_bound, xlb)[source]

helper method for DVPREL1

pyNastran.bdf.cards.optimization.none_min(upper_bound, xub)[source]

helper method for DVPREL1

pyNastran.bdf.cards.optimization.parse_table_fields(card_type, card, fields)[source]
params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}

pyNastran.bdf.cards.optimization.validate_dresp1(property_type, response_type, atta, attb, atti)[source]
pyNastran.bdf.cards.optimization.validate_dvcrel(validate, element_type, cp_name)[source]

Valdiates the DVCREL1/2

Note

words that start with integers (e.g., 12I/T**3) doesn’t support strings

pyNastran.bdf.cards.optimization.validate_dvmrel(validate, mat_type, mp_name)[source]

Valdiates the DVMREL1/2

Note

words that start with integers (e.g., 12I/T**3) doesn’t support strings

pyNastran.bdf.cards.optimization.validate_dvprel(prop_type, pname_fid, validate)[source]

Valdiates the DVPREL1/2

Note

words that start with integers (e.g., 12I/T**3) doesn’t support strings

Note

FID > 0 –> references the Property Card

Note

FID < 0 –> references the EPT card

params Module
Inheritance diagram of pyNastran.bdf.cards.params
defines the following card:
  • PARAM

class pyNastran.bdf.cards.params.PARAM(key, values, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Creates a PARAM card

Parameters
keystr

the name of the PARAM

valuesint/float/str/List

varies depending on the type of PARAM

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PARAM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PARAM'
update_values(value1=None, value2=None)[source]

Updates value1 and value2. Performs type checking based on the PARAM type after setting any default value(s).

Parameters
value1varies; default=None

the main value

value2varies; default=None

optional value

If you want to access the data directly, use:
>>> param = bdf.params[‘POST’]
>>> param.values[0] = -1 # value1
>>> param.values[1] = 3 # value2
>>>
.. note:: Most PARAM cards only have one value. Some have two.
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

utils Module
defines:
  • fields_out = build_table_lines(fields, nstart=1, nend=0)

  • fields_out = wipe_empty_fields(card)

pyNastran.bdf.cards.utils.build_table_lines(fields, nstart=1, nend=0)[source]

Builds a table of the form:

DESVAR

DVID1

DVID2

DVID3

DVID4

DVID5

DVID6

DVID7

DVID8

etc.

UM

VAL1

VAL2

etc.

and pads the rest of the fields with None’s (e.g. at the end of the DVID8 line).

Parameters
fields: List[int/float/str]

the fields to enter, including DESVAR

nstart: int; default=1

the number of blank fields at the start of the line

nendint; default=0)

the number of blank fields at the end of the line

Returns
fields_outList[str/None]

the values ready for card printing

Note

will be used for DVCREL2, DVMREL2, DVPREL2, RBE1, RBE3, DRESP2, DRESP3 ..

Warning

only works for small field format??? ..

pyNastran.bdf.cards.utils.wipe_empty_fields(card: List[Union[int, float, str, None]]) → List[Union[int, float, str, None]][source]

Removes any trailing Nones from the card. Also converts empty strings to None. Allows floats & ints, but that’s not the intended value, though it is ok (it’s just extra work).

Parameters
cardList[str]

the fields on the card as a list

Returns
short_cardList[str]

the card with no trailing blank fields

# pyNastran.bdf.cards.deqatn

aero Package
aero Module
Inheritance diagram of pyNastran.bdf.cards.aero.aero

All aero cards are defined in this file. This includes:

  • AECOMP

  • AEFACT

  • AELINK

  • AELIST

  • AEPARM

  • AESURF / AESURFS

  • CAERO1 / CAERO2 / CAERO3 / CAERO4 / CAERO5

  • PAERO1 / PAERO2 / PAERO3 / PAERO4 / PAERO5

  • SPLINE1 / SPLINE2 / SPLINE3 / SPLINE4 / SPLINE5

  • MONPNT1 / MONPNT2 / MONPNT3

All cards are BaseCard objects.

class pyNastran.bdf.cards.aero.aero.AECOMP(name: str, list_type: List[str], lists: Union[int, List[int]], comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a component for use in monitor point definition or external splines.

1

2

3

4

5

6

7

8

9

AECOMP

NAME

LISTTYPE

LIST1

LIST2

LIST3

LIST4

LIST5

LIST6

LIST7

etc.

AECOMP

WING

AELIST

1001

1002

AECOMP

WING

SET1

1001

1002

AECOMP

WING

CAERO1

1001

2001

Attributes
namestr

The name.

list_typestr

{‘SET1’, ‘AELIST’, ‘CAEROx’}

listslist[int]

list of values of AECOMP lists

Creates an AECOMP card

Parameters
namestr

the name of the component

list_typestr

One of CAERO, AELIST or CMPID for aerodynamic components and SET1 for structural components. Aerodynamic components are defined on the aerodynamic ks-set mesh while the structural components are defined on the g-set mesh.

listsList[int, int, …]; int

The identification number of either SET1, AELIST or CAEROi entries that define the set of grid points that comprise the component

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card: Any, comment: str = '') → pyNastran.bdf.cards.aero.aero.AECOMP[source]

Adds an AECOMP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

allowed_list_types = ['SET1', 'AELIST', 'CAERO']
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_lists()[source]
raw_fields()[source]
safe_cross_reference(model: BDF)[source]
type = 'AECOMP'
uncross_reference() → None[source]

Removes cross-reference links

validate() → None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.aero.aero.AECOMPL(name: str, labels: List[str], comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Makes a “AECOMP” that is a combination of other AECOMPs or AECOMPLs.

1

2

3

4

5

6

7

8

9

AECOMPL

NAME

LABEL1

LABEL2

LABEL3

LABEL4

LABEL5

LABEL6

LABEL7

LABEL8

etc.

AECOMPL

HORIZ

STAB

ELEV

BALANCE

Creates an AECOMPL card

Parameters
namestr

the name of the component

labelsList[str, str, …]; str

A string of 8 characters referring to the names of other components defined by either AECOMP or other AECOMPL entries.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card: BDFCard, comment: str = '') → AECOMP[source]

Adds an AECOMPL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model)[source]
type = 'AECOMPL'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.aero.aero.AEFACT(sid, fractions, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines real numbers for aeroelastic analysis.

1

2

3

4

5

6

7

8

9

AEFACT

SID

D1

D2

D3

D4

D5

D6

D7

D8

D9

etc.

AEFACT

97

.3

0.7

1.0

TODO: Are these defined in percentages and thus,

should they be normalized if they are not?

Creates an AEFACT card, which is used by the CAEROx / PAEROx card to adjust the spacing of the sub-paneleing (and grid point paneling in the case of the CAERO3).

Parameters
sidint

unique id

fractionsList[float, …, float]

list of percentages

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AEFACT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

fractions = None

Number (float)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'AEFACT'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines relationships between or among AESTAT and AESURF entries, such that:

\[u^D + \Sigma_{i=1}^n C_i u_i^I = 0.0\]

1

2

3

4

5

6

7

8

9

AELINK

ID

LABLD

LABL1

C1

LABL2

C2

LABL3

C3

LABL4

C4

etc.

AELINK

10

INBDA

OTBDA

-2.0

Creates an AELINK card, which defines an equation linking AESTAT and AESURF cards

Parameters
aelink_idint/str

unique id

labelstr

name of the dependent AESURF card

independent_labelsList[str, …, str]

name for the independent variables (AESTATs)

linking_coefficentsList[float]

linking coefficients

commentstr; default=’’

a comment for the card

property Cis
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AELINK card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

an ID=0 is applicable to the global subcase, ID=1 only subcase 1

independent_labels = None

defines the independent variable name (string)

label = None

defines the dependent variable name (string)

linking_coefficents = None

linking coefficients (real)

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_methods(…)

object_methods(mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
list_fieldsList[int/float/str]

the fields that define the card

type = 'AELINK'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.aero.aero.AELIST(sid: int, elements: List[int], comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a list of aerodynamic elements to undergo the motion prescribed with the AESURF Bulk Data entry for static aeroelasticity.

1

2

3

4

5

6

7

8

9

AELIST

SID

E1

E2

E3

E4

E5

E6

E7

E8

etc.

AELIST

75

1001

THRU

1075

1101

THRU

1109

1201

1202

Notes

  1. These entries are referenced by the AESURF entry.

  2. When the THRU option is used, all intermediate grid points must exist. The word THRU may not appear in field 3 or 9 (2 or 9 for continuations).

  3. Intervening blank fields are not allowed.

Creates an AELIST card, which defines the aero boxes for an AESURF/SPLINEx.

Parameters
sidint

unique id

elementsList[int, …, int]; int

list of box ids

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AELIST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

clean_ids()[source]
cross_reference(model: BDF) → None[source]
elements = None

List of aerodynamic boxes generated by CAERO1 entries to define a surface. (Integer > 0 or ‘THRU’)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

safe_cross_reference(model)[source]
sid = None

Set identification number. (Integer > 0)

type = 'AELIST'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.AEPARM(aeparm_id: int, label: str, units: str, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a general aerodynamic trim variable degree-of-freedom (aerodynamic extra point). The forces associated with this controller will be derived from AEDW, AEFORCE and AEPRESS input data.

1

2

3

4

AEPARM

ID

LABEL

UNITS

AEPARM

5

THRUST

LBS

Creates an AEPARM card, which defines a new trim variable.

Parameters
idint

the unique id

labelstr

the variable name

unitsstr

unused by Nastran

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AEPARM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

safe_cross_reference(model)[source]
type = 'AEPARM'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.AESURF(aesid: int, label: str, cid1: int, alid1: int, cid2: Optional[int] = None, alid2: Optional[int] = None, eff: float = 1.0, ldw: str = 'LDW', crefc: float = 1.0, crefs: float = 1.0, pllim: float = -1.5707963267948966, pulim: float = 1.5707963267948966, hmllim: Optional[int] = None, hmulim: Optional[int] = None, tqllim: Optional[int] = None, tqulim: Optional[int] = None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies an aerodynamic control surface as a member of the set of aerodynamic extra points. The forces associated with this controller will be derived from rigid rotation of the aerodynamic model about the hinge line(s) and from AEDW, AEFORCE and AEPRESS input data. The mass properties of the control surface can be specified using an AESURFS entry.

1

2

3

4

5

6

7

8

9

AESURF

ID

LABEL

CID1

ALID1

CID2

ALID2

EFF

LDW

CREFC

CREFS

PLLIM

PULIM

HMLLIM

HMULIM

TQLLIM

TQULIM

Creates an AESURF card, which defines a control surface

Parameters
aesidint

controller number

labelstr

controller name

cid1 / cid2int / None

coordinate system id for primary/secondary control surface

alid1 / alid2int / None

AELIST id for primary/secondary control surface

efffloat; default=1.0

Control surface effectiveness

ldwstr; default=’LDW’

Linear downwash flag; [‘LDW’, ‘NODLW’]

crefcfloat; default=1.0

reference chord for the control surface

crefsfloat; default=1.0

reference area for the control surface

pllim / pulimfloat; default=-pi/2 / pi/2

Lower/Upper deflection limits for the control surface in radians

hmllim / hmulimfloat; default=None

Lower/Upper hinge moment limits for the control surface in force-length units

tqllim / tqulimint; default=None

Set identification numbers of TABLEDi entries that provide the lower/upper deflection limits for the control surface as a function of the dynamic pressure

commentstr; default=’’

a comment for the card

Cid1() → int[source]
Cid2() → Optional[int][source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AESURF card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

aelist_id1()[source]
aelist_id2()[source]
aesid = None

Controller identification number

alid1 = None

Identification of an AELIST Bulk Data entry that identifies all aerodynamic elements that make up the control surface component. (Integer > 0)

cid1 = None

Identification number of a rectangular coordinate system with a y-axis that defines the hinge line of the control surface component.

crefc = None

Reference chord length for the control surface. (Real>0.0; Default=1.0)

crefs = None

Reference surface area for the control surface. (Real>0.0; Default=1.0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eff = None

Control surface effectiveness. See Remark 4. (Real != 0.0; Default=1.0)

hmllim = None

Lower and upper hinge moment limits for the control surface in force-length units. (Real, Default = no limit) -> 1e8

label = None

Controller name.

ldw = None

Linear downwash flag. See Remark 2. (Character, one of LDW or NOLDW; Default=LDW).

pllim = None

Lower and upper deflection limits for the control surface in radians. (Real, Default = +/- pi/2)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsreset_camera[int/float/str]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[int/float/str]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
tqllim = None

Set identification numbers of TABLEDi entries that provide the lower and upper deflection limits for the control surface as a function of the dynamic pressure. (Integer>0, Default = no limit)

type = 'AESURF'
uncross_reference() → None[source]

Removes cross-reference links

update(unused_model, maps)[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.AESURFS(aesid: int, label: str, list1: List[int], list2: List[int], comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Optional specification of the structural nodes associated with an aerodynamic control surface that has been defined on an AESURF entry. The mass associated with these structural nodes define the control surface moment(s) of inertia about the hinge line(s). Specifies rigid body motions to be used as trim variables in static aeroelasticity.

1

2

3

4

5

6

7

AESURFS

ID

LABEL

LIST1

LIST2

AESURFS

6001

ELEV

6002

6003

Creates an AESURFS card

Parameters
aesidint

the unique id

labelstr

the AESURF name

list1 / list2int / None

the list (SET1) of node ids for the primary/secondary control surface(s) on the AESURF card

commentstr; default=’’

a comment for the card

List1()[source]
List2()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AESURFS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

safe_cross_reference(model)[source]
type = 'AESURFS'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.CAERO1(eid: int, pid: int, igroup: int, p1: NDArray3float, x12: float, p4: NDArray3float, x43: float, cp: int = 0, nspan: int = 0, lspan: int = 0, nchord: int = 0, lchord: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines an aerodynamic macro element (panel) in terms of two leading edge locations and side chords. This is used for Doublet-Lattice theory for subsonic aerodynamics and the ZONA51 theory for supersonic aerodynamics.

1

2

3

4

5

6

7

8

9

CAERO1

EID

PID

CP

NSPAN

NCHORD

LSPAN

LCHORD

IGID

X1

Y1

Z1

X12

X4

Y4

Z4

X43

1
|       |         |           |      4
|      |
|      |
2------3
Attributes
eidint

element id

pidint

int : PAERO1 ID

igroupint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2; (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3; (typically x, tip chord)

cpint

int : coordinate system

nspanint

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

nchordint

int > 0 : N chordwise boxes distributed evenly int = 0 : use lchord

lspanint

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan

lchordint

int > 0 : AEFACT reference for non-uniform nchord int = 0 : use nchord

commentstr; default=’’

accesses the comment

Defines a CAERO1 card, which defines a simplified lifting surface (e.g., wing/tail).

Parameters
eidint

element id

pidint, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igroupint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2; (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3; (typically x, tip chord)

cpint, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspanint; default=0

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

nchordint; default=0

int > 0 : N chordwise boxes distributed evenly int = 0 : use lchord

lspanint, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan AEFACT : AEFACT object (xref)

lchordint, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nchord int = 0 : use nchord AEFACT : AEFACT object (xref)

commentstr; default=’’

a comment for the card

Cp() → int[source]
Pid() → int[source]
_box_id_error(box_id: int)[source]

Raise box_id IndexError.

_finalize_hdf5(encoding)[source]

hdf5 helper function

_get_box_x_chord_center(box_id: int, x_chord: float) → numpy.ndarray[source]

The the location of the x_chord of the box along the centerline.

classmethod _init_from_empty()[source]
_init_ids(dtype='int32')[source]

Fill self.box_ids with the sub-box ids. Shape is (nchord, nspan)

_properties = ['_field_map', 'shape', 'xy', 'min_max_eid', 'npanels']
classmethod add_card(card, comment='')[source]

Adds a CAERO1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

classmethod add_quad(eid, pid, span, chord, igroup, p1, p2, p3, p4, cp=0, spanwise='y', comment='')[source]
1
| \
|   \
|     \
|      4
|      |
|      |
2------3

TODO: CP not handled correctly

property aefact_ids
cp = None

Coordinate system for locating point 1.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

flip_normal()[source]

flips the CAERO1 normal vector

get_LChord()[source]
get_LSpan()[source]
get_box_index(box_id: int) → Tuple[int, int][source]

Get the index of self.box_ids that corresponds to the given box id.

Parameters
box_idint

Box id to get the index of.

Returns
indextuple

Index of self.box_ids that corresponds to the given box id.

get_box_mid_chord_center(box_id: int) → numpy.ndarray[source]

The the location of the mid chord of the box along the centerline.

Parameters
box_idint

Box id.

Returns
xyz_mid_chordndarray

Location of box mid chord in global.

get_box_quarter_chord_center(box_id: int) → numpy.ndarray[source]

The the location of the quarter chord of the box along the centerline.

Parameters
box_idint

Box id.

Returns
xyz_quarter_chordndarray

Location of box quarter chord in global.

get_leading_edge_points()[source]

gets the leading edge points

get_npanel_points_elements() → Tuple[int, int][source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns
npointsint

The number of nodes for the CAERO

nelmementsint

The number of elements for the CAERO

get_points()[source]

Get the 4 corner points for the CAERO card

Returns
p1234(4, 3) list

List of 4 corner points in the global frame

property min_max_eid

Gets the min and max element ids of the CAERO card

Returns
min_max_eid(2, ) list

The [min_eid, max_eid]

property npanels
panel_points_elements() → Tuple[numpy.ndarray, numpy.ndarray][source]

Gets the sub-points and sub-elements for the CAERO1 card

Returns
points(nnodes,3) ndarray of floats

the array of points

elements(nelements,4) ndarray of integers

the array of point ids

pid = None

Property identification number of a PAERO2 entry.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsLIST

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

set_points(points)[source]
property shape

returns (nelements_nchord, nelements_span)

shift(dxyz) → None[source]

shifts the aero panel

type = 'CAERO1'
uncross_reference() → None[source]

Removes cross-reference links

update(maps)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

property xy
Returns
x(nchord,) ndarray

The percentage x location in the chord-wise direction of each panel

y(nspan,) ndarray

The percentage y location in the span-wise direction of each panel

class pyNastran.bdf.cards.aero.aero.CAERO2(eid, pid, igroup, p1, x12, cp=0, nsb=0, nint=0, lsb=0, lint=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Aerodynamic Body Connection Defines aerodynamic slender body and interference elements for Doublet-Lattice aerodynamics.

1

2

3

4

5

6

7

8

9

CAERO2

EID

PID

CP

NSB

NINT

LSB

LINT

IGID

X1

Y1

Z1

X12

Defines a CAERO2 card, which defines a slender body (e.g., fuselage/wingtip tank).

Parameters
eidint

element id

pidint

int : PAERO2 ID

igroupint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (forward position)

x12float

length of the CAERO2

cpint; default=0

int : coordinate system

nsbint; default=0

Number of slender body elements

lsbint; default=0

AEFACT id for defining the location of the slender body elements

nintint; default=0

Number of interference elements

lintint; default=0

AEFACT id for defining the location of interference elements

commentstr; default=’’

a comment for the card

Cp()[source]
Lint()[source]
Lsb()[source]
Pid()[source]
classmethod _init_from_empty()[source]
_init_ids(dtype='int32')[source]
_properties = ['nboxes']
classmethod add_card(card, comment='')[source]

Adds a CAERO2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property aefact_ids
cp = None

Coordinate system for locating point 1.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

get_points()[source]

creates a 1D representation of the CAERO2

get_points_elements_3d()[source]

Gets the points/elements in 3d space as CQUAD4s The idea is that this is used by the GUI to display CAERO panels.

TODO: doesn’t support the aero coordinate system

igroup = None

Interference group identification. Aerodynamic elements with different IGIDs are uncoupled. (Integer >= 0)

lint = None

ID of an AEFACT data entry containing a list of division points for interference elements; used only if NINT is zero or blank. (Integer > 0)

lsb = None

ID of an AEFACT Bulk Data entry for slender body division points; used only if NSB is zero or blank. (Integer >= 0)

property nboxes
nint = None

Number of interference elements. If NINT > 0, then NINT equal divisions are assumed; if zero or blank, specify a list of divisions in LINT. (Integer >= 0)

nsb = None

Number of slender body elements. If NSB > 0, then NSB equal divisions are assumed; if zero or blank, specify a list of divisions in LSB. (Integer >= 0)

p1 = None

Location of point 1 in coordinate system CP

pid = None

Property identification number of a PAERO2 entry.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

The fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
set_points(points)[source]
shift(dxyz)[source]

shifts the aero panel

type = 'CAERO2'
uncross_reference() → None[source]

Removes cross-reference links

validate() → None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

x12 = None

Length of body in the x-direction of the aerodynamic coordinate system. (Real > 0)

class pyNastran.bdf.cards.aero.aero.CAERO3(eid, pid, list_w, p1, x12, p4, x43, cp=0, list_c1=None, list_c2=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Creates a CAERO2 card, which defines a wing with a wing break/cant.

Parameters
eidint

element id

pidint

PAERO3 property id

p1(3,) float ndarray

???

x12float

distance from p1 to p3

p4(3,) float ndarray

???

x43float

distance from p4 to p3

cpint; default=0

coordinate system for locating point 1

list_wint

???

list_c1int; default=None

defines an AEFACT for ???

list_c2int; default=None

defines an AEFACT for ???

commentstr; default=’’

a comment for the card

1——–5———-4
| |
| 7–9—11 |
| | | |
2—–8–10–12—–3
Cp()[source]
List_c1()[source]
List_c2()[source]
List_w()[source]
Pid()[source]
classmethod _init_from_empty()[source]
_properties = ['shape', 'xy']
classmethod add_card(card, comment='')[source]

Adds a CAERO3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp = None

Coordinate system for locating point 1.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

get_npanel_points_elements() → Tuple[int, int][source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns
npointsint

The number of nodes for the CAERO

nelmementsint

The number of elements for the CAERO

get_points()[source]

Get the 4 corner points for the CAERO card

Returns
p1234(4, 3) list

List of 4 corner points in the global frame

panel_points_elements()[source]

Gets the sub-points and sub-elements for the CAERO card

Returns
points(nnodes,3) ndarray of floats

the array of points

elements(nelements,4) ndarray of integers

the array of point ids

pid = None

Property identification number of a PAERO3 entry.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

The fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
property shape

returns (nelements_nchord, nelements_span)

type = 'CAERO3'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

property xy
Returns
x(nchord,) ndarray

The percentage x location in the chord-wise direction of each panel

y(nspan,) ndarray

The percentage y location in the span-wise direction of each panel

class pyNastran.bdf.cards.aero.aero.CAERO4(eid, pid, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Aerodynamic Macro-Strip Element Connection Defines an aerodynamic macro element for Strip theory.

1

2

3

4

5

6

7

8

9

CAERO4

EID

PID

CP

NSPAN

NCHORD

X1

Y1

Z1

X12

X4

Y4

Z4

X43

Defines a CAERO4 card, which defines a strip theory surface.

Parameters
eidint

element id

pidint

int : PAERO4 ID

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2 (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3 (typically x, tip chord)

cpint; default=0

int : coordinate system

nspanint; default=0

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

lspanint; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan

commentstr; default=’’

a comment for the card

Cp()[source]
Pid()[source]
classmethod _init_from_empty()[source]
_init_ids(dtype='int32')[source]

Fill self.box_ids with the sub-box ids. Shape is (nchord, nspan)

_properties = ['shape', 'xy']
classmethod add_card(card, comment='')[source]

Adds a CAERO4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp = None

Coordinate system for locating point 1.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

get_LSpan() → int[source]
get_npanel_points_elements()[source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns
npointsint

The number of nodes for the CAERO

nelmementsint

The number of elements for the CAERO

get_points()[source]
panel_points_elements()[source]

Gets the sub-points and sub-elements for the CAERO card

Returns
points(nnodes,3) ndarray of floats

the array of points

elements(nelements,4) ndarray of integers

the array of point ids

pid = None

Property identification number of a PAERO4 entry.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

The fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
property shape

returns (nelements_nchord, nelements_span)

type = 'CAERO4'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

property xy
Returns
x(nchord,) ndarray

The percentage x location in the chord-wise direction of each panel

y(nspan,) ndarray

The percentage y location in the span-wise direction of each panel

class pyNastran.bdf.cards.aero.aero.CAERO5(eid, pid, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, ntheory=0, nthick=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines an aerodynamic macro element for Piston theory.

1

2

3

4

5

6

7

8

9

CAERO5

EID

PID

CP

NSPAN

LSPAN

NTHRY

NTHICK

X1

Y1

Z1

X12

X4

Y4

Z4

X43

CAERO5

6000

6001

100

315

0

0

0.0

0.0

0.0

1.0

0.2

1.0

0.8

Defines a CAERO5 card, which defines elements for Piston theory (high supersonic flow where the normal Mach is less than 1).

Parameters
eidint

element id

pidint

PAERO5 ID

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2; (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3; (typically x, tip chord)

cpint; default=0

int : coordinate system

nspanint; default=0

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

lspanint; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan

ntheoryint; default=0

??? valid_theory = {0, 1, 2}

nthickint; default=0

???

commentstr; default=’’

a comment for the card

Cp()[source]
LSpan()[source]
Pid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CAERO5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

c1_c2(mach)[source]
cp = None

Coordinate system for locating point 1.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

get_npanel_points_elements()[source]
get_points()[source]
property nboxes
panel_points_elements()[source]
pid = None

Property identification number of a PAERO5 entry.

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CAERO5'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.MONDSP1(name, label, axes, aecomp_name, xyz, cp=0, cd=None, ind_dof='123', comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

MONPNT1

NAME

LABEL

AXES

COMP

CP

X

Y

Z

CD

MONPNT1

WING155

Wing Integrated Load to Butline 155

34

WING

0.0

155.0

15.0

Creates a MONDSP1 card

Parameters
namestr

Character string of up to 8 characters identifying the monitor point

labelstr

A string comprising no more than 56 characters that identifies and labels the monitor point.

axesstr

components {1,2,3,4,5,6}

aecomp_namestr

name of the AECOMP/AECOMPL entry

xyzList[float, float, float]; default=None

The coordinates in the CP coordinate system about which the loads are to be monitored. None : [0., 0., 0.]

cpint, CORDx; default=0

coordinate system of XYZ

cdint; default=None -> cp

the coordinate system for load outputs

ind_dofstr; default=’123’

the dofs to map

commentstr; default=’’

a comment for the card

Notes

MSC specific card

Cd()[source]
Cp()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'MONDSP1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.MONPNT1(name, label, axes, aecomp_name, xyz, cp=0, cd=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

MONPNT1

NAME

LABEL

AXES

COMP

CP

X

Y

Z

CD

MONPNT1

WING155

Wing Integrated Load to Butline 155

34

WING

0.0

155.0

15.0

Creates a MONPNT1 card

Parameters
namestr

Character string of up to 8 characters identifying the monitor point

labelstr

A string comprising no more than 56 characters that identifies and labels the monitor point.

axesstr

components {1,2,3,4,5,6}

aecomp_namestr

name of the AECOMP/AECOMPL entry

xyzList[float, float, float]; default=None

The coordinates in the CP coordinate system about which the loads are to be monitored. None : [0., 0., 0.]

cpint, CORDx; default=0

coordinate system of XYZ

cdint; default=None -> cp

the coordinate system for load outputs

commentstr; default=’’

a comment for the card

Notes

CD - MSC specific field

Cd()[source]
Cp()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'MONPNT1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.MONPNT2(name, label, table, Type, nddl_item, eid, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

MSC Nastran specific card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model: BDF, unused_xref_errors)[source]
type = 'MONPNT2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.MONPNT3(name, label, axes, grid_set, elem_set, xyz, cp=0, cd=None, xflag=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

MSC Nastran specific card

Cd()[source]
Cp()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'MONPNT3'
uncross_reference() → None[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.PAERO1(pid, caero_body_ids=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines associated bodies for the panels in the Doublet-Lattice method.

1

2

3

4

5

6

7

8

PAERO1

PID

B1

B2

B3

B4

B5

B6

Creates a PAERO1 card, which defines associated bodies for the panels in the Doublet-Lattice method.

Parameters
pidint

PAERO1 id

caero_body_idsList[int]; default=None

CAERO2 ids that are within the same IGROUP group

commentstr; default=’’

a comment for the card

property Bi
Bodies()[source]
classmethod _init_from_empty()[source]
_properties = ['_field_map']
classmethod add_card(card, comment='')[source]

Adds a PAERO1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]

List the names of attributes of a class as strings. Returns public attributes as default.

Parameters
modestr

defines what kind of attributes will be listed * ‘public’ - names that do not begin with underscore * ‘private’ - names that begin with single underscore * ‘both’ - private and public * ‘all’ - all attributes that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
attribute_namesList[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PAERO1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.PAERO2(pid, orient, width, AR, thi, thn, lrsb=None, lrib=None, lth=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines the cross-sectional properties of aerodynamic bodies.

1

2

3

4

5

6

7

8

9

PAERO2

PID

ORIENT

WIDTH

AR

LRSB

LRIB

LTH1

LTH2

THI1

THN1

THI2

THN2

THI3

THN3

Creates a PAERO2 card, which defines additional cross-sectional properties for the CAERO2 geometry.

Parameters
pidint

PAERO1 id

orientstr

Orientation flag. Type of motion allowed for bodies. Refers to the aerodynamic coordinate system of ACSID. See AERO entry. valid_orientations = {Z, Y, ZY}

widthfloat

Reference half-width of body and the width of the constant width interference tube

ARfloat

Aspect ratio of the interference tube (height/width)

thi / thnList[int]

The first (thi) and last (thn) interference element of a body to use the theta1/theta2 array

lrsbint; default=None
intAEFACT id containing a list of slender body half-widths

at the end points of the slender body elements

None : use width

lribint; default=None
intAEFACT id containing a list of interference body

half-widths at the end points of the interference elements

None : use width

lthList[int, int]; default=None

AEFACT id for defining theta arrays for interference calculations for theta1/theta2

commentstr; default=’’

a comment for the card

AR = None

Aspect ratio of the interference tube (height/width). float>0.

Lrib()[source]

AEFACT id

Lrsb()[source]

AEFACT id

classmethod _init_from_empty()[source]
_properties = ['_field_map', 'lth1', 'lth2']
classmethod add_card(card, comment='')[source]

Adds a PAERO2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
lrib = None

Identification number of an AEFACT entry containing a list of slender body half-widths at the end points of the interference elements. If blank, the value of WIDTH will be used. (Integer > 0 or blank)

lrsb = None

Identification number of an AEFACT entry containing a list of slender body half-widths at the end points of the slender body elements. If blank, the value of WIDTH will be used. (Integer > 0 or blank)

property lth1
property lth2
orient = None

Orientation flag. Type of motion allowed for bodies. Refers to the aerodynamic coordinate system of ACSID. See AERO entry. (Character = ‘Z’, ‘Y’, or ‘ZY’)

pid = None

Property identification number. (Integer > 0)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PAERO2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

width = None

Reference half-width of body and the width of the constant width interference tube. (Real > 0.0)

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.PAERO3(pid, nbox, ncontrol_surfaces, x, y, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines the number of Mach boxes in the flow direction and the location of cranks and control surfaces of a Mach box lifting surface.

1

2

3

4

5

6

7

8

9

PAERO3

PID

NBOX

NCTRL

X5

Y5

X6

Y6

X7

Y7

X8

Y8

X9

Y9

X10

Y10

X11

Y11

X12

Y12

PAERO3

2001

15

1

97.5

97.5

Creates a PAERO3 card, which defines the number of Mach boxes in the flow direction and the location of cranks and control surfaces of a Mach box lifting surface.

Parameters
pidint

PAERO1 id

nboxint

Number of Mach boxes in the flow direction; 0 < nbox < 50

ncontrol_surfacesint

Number of control surfaces. (0, 1, or 2)

x / yList[float, None]

float : locations of points 5 through 12, which are in the aerodynamic coordinate system, to define the cranks and control surface geometry.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['npoints']
classmethod add_card(card, comment='')[source]

Adds a PAERO3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property npoints
pid = None

Property identification number. (Integer > 0)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, unused_xref_errors)[source]
type = 'PAERO3'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.PAERO4(pid, docs, caocs, gapocs, cla=0, lcla=0, circ=0, lcirc=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines properties of each strip element for Strip theory.

1

2

3

4

5

6

7

8

9

PAERO4

PID

CLA

LCLA

CIRC

LCIRC

DOC1

CAOC1

GAPOC1

DOC2

CAOC2

GAPOC2

DOC3

CAOC3

GAPOC3

etc.

PAERO4

6001

1

501

0

0

0.0

0.0

0.0

0.50

0.25

0.02

0.53

0.24

0.0

## TODO: what happens for DOC4?

Parameters
PIDint

Property identification number. (Integer > 0)

CLAint; default=0

Select Prandtl-Glauert correction. (Integer = -1, 0, 1) -1 Compressibility correction made to lift curve slope data for a reference Mach number. 0 No correction and no list needed. (Default) +1 No correction and lift curve slope provided by a list as a

function of strip location and Mach number.

LCLAint

ID number of the AEFACT entry that lists the lift curve slope on all strips for each Mach number on the MKAEROi entry. See Remark 2 below. (Integer = 0 if CLA = 0, > 0 if CLA ≠ 0)

CIRCint; default=0

Select Theodorsen’s function C(k) or the number of exponential coefficients used to approximate C(k). (Integer = 0, 1, 2, 3; Must be zero if CLA ≠ 0.) 0 Theodorsen function. 1, 2, 3 Approximate function with b0, b1, β1, …, bn, βn n = 1, 2, 3.

LCIRCint

Identification number of the AEFACT entry that lists the b, β values for each Mach number. See Remark 3, 4, and 5 below; variable b’s and β’s for each mi on the MKAEROi entry. (Integer = 0 if CIRC = 0, > 0 if CIRC ≠ 0)

DOCiList[float]

d/c = distance of the control surface hinge aft of the quarter-chord divided by the strip chord (Real ≥ 0.0)

CAOCiList[float]

ca/c = control surface chord divided by the strip chord. (Real ≥ 0.0)

GAPOCiList[float]

g/c = control surface gap divided by the strip chord. (Real ≥ 0.0)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PAERO4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
pid = None

Property identification number. (Integer > 0)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PAERO4'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.PAERO5(pid, caoci, nalpha=0, lalpha=0, nxis=0, lxis=0, ntaus=0, ltaus=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

PAERO5

PID

NALPHA

LALPHA

NXIS

LXIS

NTAUS

LTAUS

CAOC1

CAOC2

CAOC3

CAOC4

CAOC5

PAERO5

7001

1

702

1

701

1

700

0.0

0.0

5.25

3.99375

0.0

classmethod _init_from_empty()[source]
_properties = ['ltaus_id', 'lxis_id']
classmethod add_card(card, comment='')[source]

Adds a PAERO5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property ltaus_id
property lxis_id
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PAERO5'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE1(eid: int, caero: int, box1: int, box2: int, setg: int, dz: float = 0.0, method: str = 'IPS', usage: str = 'BOTH', nelements: int = 10, melements: int = 10, comment: str = '')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Surface Spline Methods Defines a surface spline for interpolating motion and/or forces for aeroelastic problems on aerodynamic geometries defined by regular arrays of aerodynamic points.

1

2

3

4

5

6

7

8

9

SPLINE1

EID

CAERO

BOX1

BOX2

SETG

DZ

METH

USAGE

NELEM

MELEM

SPLINE1

3

111

115

122

14

Creates a SPLINE1, which defines a surface spline.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box1 / box2int

First/last box id that is used by the spline

setgint

SETx id that defines the list of GRID points that are used by the surface spline

dzfloat; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

methodstr; default=IPS

method for spline fit valid_methods = {IPS, TPS, FPS} IPS : Harder-Desmarais Infinite Plate Spline TPS : Thin Plate Spline FPS : Finite Plate Spline

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

nelementsint; default=10

The number of FE elements along the local spline x-axis if using the FPS option

melementsint; default=10

The number of FE elements along the local spline y-axis if using the FPS option

commentstr; default=’’

a comment for the card

CAero()[source]
Set()[source]
classmethod _init_from_empty()[source]
_properties = ['aero_element_ids']
classmethod add_card(card, comment='')[source]

Adds a SPLINE1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property aero_element_ids
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE2(eid: int, caero: int, box1: int, box2: int, setg: int, dz: float = 0.0, dtor: float = 1.0, cid: int = 0, dthx: float = 0.0, dthy: float = 0.0, usage: str = 'BOTH', comment: str = '')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Linear Spline Defines a beam spline for interpolating motion and/or forces for aeroelastic problems on aerodynamic geometries defined by regular arrays of aerodynamic points.

1

2

3

4

5

6

7

8

9

SPLINE2

EID

CAERO

ID1

ID2

SETG

DZ

DTOR

CID

DTHX

DTHY

None

USAGE

SPLINE2

5

8

12

24

60

1.0

3

Creates a SPLINE2 card, which defines a beam spline.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box1 / box2int

First/last box/body id that is used by the spline

setgint

SETx id that defines the list of GRID points that are used by the beam spline

dzfloat; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

dtorfloat; default=1.0

Torsional flexibility ratio (EI/GJ). Use 1.0 for bodies (CAERO2).

cidint; default=0

Rectangular coordinate system for which the y-axis defines the axis of the spline. Not used for bodies, CAERO2

dthxfloat; default=0.

Rotational attachment flexibility. DTHX : Used for rotation about the spline’s x-axis (in-plane

bending rotations). It is not used for bodies (CAERO2).

DTHYUsed for rotation about the spline’s y-axis (torsion).

It is used for slope of bodies.

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

commentstr; default=’’

a comment for the card

CAero()[source]
Cid()[source]
Set()[source]
classmethod _init_from_empty()[source]
_properties = ['aero_element_ids']
classmethod add_card(card, comment='')[source]

Adds a SPLINE2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property aero_element_ids
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE3(eid: int, caero: int, box_id: int, components: int, nodes: List[int], displacement_components: List[int], coeffs: List[float], usage: str = 'BOTH', comment: str = '')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines a constraint equation for aeroelastic problems. Useful for control surface constraints.

1

2

3

4

5

6

7

8

9

SPLINE3

EID

CAERO

BOXID

COMP

G1

C1

A1

USAGE

G2

C2

A2

G3

C3

A2

G4

C4

A4

etc.

SPLINE3

7000

107

109

6

5

3

1.0

BOTH

43

5

-1.0

Creates a SPLINE3 card, which is useful for control surface constraints.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box_idint

Identification number of the aerodynamic box number.

componentsint

The component of motion to be interpolated. 3, 5 (CAERO1) 2, 3, 5, 6 (CAERO2) 3 (CAERO3) 3, 5, 6 (CAERO4) 3, 5, 6 (CAERO5) 1, 2, 3, 5, 6 (3D Geometry) 2-lateral displacement 3-transverse displacement 5-pitch angle 6-relative control angle for CAERO4/5; yaw angle for CAERO2

nodesList[int]

Grid point identification number of the independent grid point.

displacement_componentsList[int]

Component numbers in the displacement coordinate system. 1-6 (GRIDs) 0 (SPOINTs)

coeffsList[float]

Coefficient of the constraint relationship.

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

commentstr; default=’’

a comment for the card

CAero()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SPLINE3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property node_ids
raw_fields()[source]

1

2

3

4

5

6

7

8

9

SPLINE3

EID

CAERO

BOXID

COMP

G1

C1

A1

USAGE

G2

C2

A2

G3

C3

A2

G4

C4

A4

etc.

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE3'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE4(eid: int, caero: int, aelist: int, setg: int, dz: float, method: str, usage: str, nelements: int, melements: int, comment: str = '')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Surface Spline Methods Defines a curved surface spline for interpolating motion and/or forces for aeroelastic problems on general aerodynamic geometries using either the Infinite Plate, Thin Plate or Finite Plate splining method.

1

2

3

4

5

6

7

8

9

SPLINE4

EID

CAERO

AELIST

SETG

DZ

METH

USAGE

NELEM

MELEM

SPLINE4

3

111

115

14

IPS

Creates a SPLINE4 card, which defines a curved Infinite Plate, Thin Plate, or Finite Plate Spline.

Parameters
eidint

spline id

caeroint

CAEROx id that defines the plane of the spline

box1 / box2int

First/last box id that is used by the spline

setgint

SETx id that defines the list of GRID points that are used by the surface spline

dzfloat; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

methodstr; default=IPS

method for spline fit valid_methods = {IPS, TPS, FPS} IPS : Harder-Desmarais Infinite Plate Spline TPS : Thin Plate Spline FPS : Finite Plate Spline

usagestr; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

nelements / melementsint; default=10

The number of FE elements along the local spline x/y-axis if using the FPS option

commentstr; default=’’

a comment for the card

AEList() → int[source]
CAero() → int[source]
Set() → int[source]
classmethod _init_from_empty()[source]
_properties = ['aero_element_ids']
classmethod add_card(card, comment='')[source]

Adds a SPLINE4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property aero_element_ids
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'SPLINE4'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE5(eid, caero, aelist, setg, thx, thy, dz=0.0, dtor=1.0, cid=0, usage='BOTH', method='BEAM', ftype='WF2', rcore=None, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Linear Spline Defines a 1D beam spline for interpolating motion and/or forces for aeroelastic problems on aerodynamic geometries defined by irregular arrays of aerodynamic points. The interpolating beam supports axial rotation and bending in the yz-plane.

+=========+======+=======+========+=======+======+====+=======+=======+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +=========+======+=======+========+=======+======+====+=======+=======+ | SPLINE5 | EID | CAERO | AELIST | | SETG | DZ | DTOR | CID | +———+——+——-+——–+——-+——+—-+——-+——-+ | | DTHX | DTHY | | USAGE | METH | | FTYPE | RCORE | +———+——+——-+——–+——-+——+—-+——-+——-+

METH, FTYPE, RCORE are in 2012+ (not MSC.2005r2 or NX.10)

AEList()[source]
CAero()[source]
Cid()[source]
Set()[source]
classmethod _init_from_empty()[source]
_properties = ['aero_element_ids']
classmethod add_card(card, comment='')[source]

Adds a SPLINE5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property aero_element_ids
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE5'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.aero.Spline[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

static_loads Module
Inheritance diagram of pyNastran.bdf.cards.aero.static_loads
All trim aero cards are defined in this file. This includes:
  • AEROS

  • AESTAT

  • CSSCHD

  • DIVERG

  • TRIM

All cards are BaseCard objects.

class pyNastran.bdf.cards.aero.static_loads.AEROS(cref, bref, sref, acsid=0, rcsid=0, sym_xz=0, sym_xy=0, comment='')[source]

Bases: pyNastran.bdf.cards.aero.dynamic_loads.Aero

Gives basic aerodynamic parameters for unsteady aerodynamics.

1

2

3

4

5

6

7

8

AEROS

ACSID

RCSID

REFC

REFB

REFS

SYMXZ

SYMXY

AEROS

10

20

1

Creates an AEROS card

Parameters
creffloat

the aerodynamic chord

breffloat

the wing span for a half model, this should be the full span for a full model, this should be the full span

sreffloat

the wing area for a half model, this should be the half area for a full model, this should be the full area

acsidint; default=0

aerodyanmic coordinate system defines the direction of the wind

rcsidint; default=0

coordinate system for rigid body motions

sym_xzint; default=0

xz symmetry flag (+1=symmetry; -1=antisymmetric)

sym_xyint; default=0

xy symmetry flag (+1=symmetry; -1=antisymmetric)

commentstr; default=’’

a comment for the card

Acsid()[source]

air velocity defined as moving into the +x direction

Rcsid()[source]

rigid body coordinate system

classmethod _init_from_empty()[source]
_properties = ['is_anti_symmetric_xy', 'is_anti_symmetric_xz', 'is_symmetric_xy', 'is_symmetric_xz']
acsid = None

Aerodynamic coordinate system identification.

classmethod add_card(card, comment='')[source]

Adds an AEROS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

bref = None

Reference span

cref = None

Reference chord length

cross_reference(model: BDF) → None[source]

Cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

rcsid = None

Reference coordinate system identification for rigid body motions.

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Safe cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

sref = None

Reference wing area

sym_xy = None

The symmetry key for the aero coordinate x-y plane can be used to simulate ground effects. (Integer = +1 for antisymmetry, 0 for no symmetry, and -1 for symmetry; Default = 0)

sym_xz = None

Symmetry key for the aero coordinate x-z plane. See Remark 6. (Integer = +1 for symmetry, 0 for no symmetry, and -1 for antisymmetry; Default = 0)

type = 'AEROS'
uncross_reference() → None[source]

Removes cross-reference links

update(maps)[source]
maps = {

‘coord’ : cid_map,

}

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.AESTAT(aestat_id, label, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies rigid body motions to be used as trim variables in static aeroelasticity.

1

2

3

AESTAT

ID

LABEL

AESTAT

5001

ANGLEA

Creates an AESTAT card, which is a variable to be used in a TRIM analysis

Parameters
idint

unique id

labelstr

name for the id

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AESTAT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/str]

the fields that define the card

type = 'AESTAT'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.CSSCHD(sid, aesid, lschd, lalpha=None, lmach=None, comment='')[source]

Bases: pyNastran.bdf.cards.aero.dynamic_loads.Aero

Defines a scheduled control surface deflection as a function of Mach number and angle of attack.

1

2

3

4

5

6

CSSCHD

SlD

AESID

LALPHA

LMACH

LSCHD

CSSCHD

5

50

12

15

25

Creates an CSSCHD card, which defines a specified control surface deflection as a function of Mach and alpha (used in SOL 144/146).

Parameters
sidint

the unique id

aesidint

the control surface (AESURF) id

lalphaint; default=None

the angle of attack profile (AEFACT) id

lmachint; default=None

the mach profile (AEFACT) id

lschdint; default=None

the control surface deflection profile (AEFACT) id

commentstr; default=’’

a comment for the card

AESid()[source]
LAlpha()[source]
LMach()[source]
LSchd()[source]
classmethod _init_from_empty()[source]
_properties = ['is_anti_symmetric_xy', 'is_anti_symmetric_xz', 'is_symmetric_xy', 'is_symmetric_xz']
classmethod add_card(card, comment='')[source]

Adds a CSSCHD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CSSCHD'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.DIVERG(sid: int, nroots: int, machs: List[float], comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

DIVERG

SID

NROOT

M1

M2

M3

M4

M5

M6

M7

etc.

Attributes
sidint

The name.

nrootsint

the number of roots

machsList[float, …, float]

list of Mach numbers

Creates an DIVERG card, which is used in divergence analysis (SOL 144).

Parameters
sidint

The name

nrootsint

the number of roots

machsList[float, …, float]

list of Mach numbers

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DIVERG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'DIVERG'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.TRIM(sid, mach, q, labels, uxs, aeqr=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies constraints for aeroelastic trim variables.

1

2

3

4

5

6

7

8

9

TRIM

ID

MACH

Q

LABEL1

UX1

LABEL2

UX2

IS_RIGID

LABEL3

UX3

LABEL4

UX4

Creates a TRIM card for a static aero (144) analysis.

Parameters
sidint

the trim id; referenced by the Case Control TRIM field

machfloat

the mach number

qfloat

dynamic pressure

labelsList[str]

names of the fixed variables

uxsList[float]

values corresponding to labels

aeqrfloat

0.0 : rigid trim analysis 1.0 : elastic trim analysis (default)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TRIM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

aeqr = None

Flag to request a rigid trim analysis (Real > 0.0 and < 1.0; Default = 1.0. A value of 0.0 provides a rigid trim analysis.

cross_reference(model: BDF) → None[source]
labels = None

The label identifying aerodynamic trim variables defined on an AESTAT or AESURF entry.

mach = None

Mach number. (Real > 0.0 and != 1.0)

q = None

Dynamic pressure. (Real > 0.0)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
sid = None

Trim set identification number. (Integer > 0)

type = 'TRIM'
uncross_reference() → None[source]

Removes cross-reference links

uxs = None

The magnitude of the aerodynamic extra point degree-of-freedom. (Real)

validate()[source]

card checking method that should be overwritten

verify_trim(suport, suport1, aestats, aeparms, aelinks, aesurf, xref=True)[source]

Magic function that makes TRIM cards not frustrating.

Warning

This probably gets AELINKs/AEPARMs/AESURFSs wrong.

The TRIM equality ndelta = (naestat + naesurf + naeparm)

  • (ntrim + ntrim_aesurf? + naelink + nsuport_dofs + nsuport1_dofs)

ndelta = 0 ntrim_aesurf is not included, but it might exist…

Steps to a TRIM analysis 1. Define the number of independent control surfaces (naesurf)

Make an AESURF for each. Dual link the AESURFs if you can to avoid needing an AELINK (e.g., +roll is left aileron down, right aileron up). Horizontal Tail : name it DPITCH Vertical Tail : name it DYAW Aileron : name it DROLL

  1. Create AELINKs if necessary.

  2. Add the AESTAT variables. Include one for each DOF the aircraft can move in the frame of the model (e.g., half/full model).

    Half model (2.5g pullup, abrupt pitch):
    • 2d pitch/plunge, 1 control : URDD3, URDD5, PITCH, ANGLEA

    Full model (2.5g pullup, abrupt pitch):
    • 3d pitch/plunge, 3 control : URDD3, URDD5, PITCH, ANGLEA, YAW (???)

  3. Add the TRIM card to lock the variables that could theoretically move in the plane of the analysis that are known.

    Half model:
    2.5g pulluplock URDD3=2.5, URDD5=0, PITCH=0

    solve for ANGLEA, DPITCH use DPITCH

    abrupt pitchlock URDD3=1.0, URDD5=0, ANGLEA=5

    solve for PITCH, DPITCH use DPITCH

    Full model:
    2.5g pulluplock URDD3=2.5, URDD4=0, URDD5=0, PITCH=0, YAW=0,

    lock SIDES=0, ROLL=0 solve for ANGLEA, DPITCH use DPITCH, DYAW, DROLL TODO: probably wrong

    30 degree yawlock URDD3=1.0, URDD4=0, ANGLEA=5, PITCH=0, YAW=30,

    lock DPITCH=0, ROLL=0 solve for SIDES, URDD5 use DPITCH, DYAW, DROLL TODO: probably wrong

  4. Note that we could have simplified our full model AESTAT/TRIM cards (they can be the same as for a half model), but we’d like to be able to do multiple load cases in the same deck.

  5. Add some SUPORT/SUPORT1 DOFs to ignore non-relevant motion in certain DOFs (e.g., z-motion). Add enough to satisfy the TRIM equality.

Doesn’t Consider
  • AELINK

  • AEPARM

  • AESURFS

Default AESTATs

ANGLEA YAW SIDES

ur (R2) ur (R3) ur (R3)

Angle of Attack Yaw Rate Angle of Sideslip

ROLL PITCH

ůr (R1) ůr (R2)

Roll Rate Pitch Rate

URDD1 URDD2 URDD3 URDD4 URDD5 URDD6

ür (T1) ür (T2) ür (T3) ür (R1) ür (R2) ür (R3)

Longitudinal (See Remark 3) Lateral Vertical Roll Pitch Yaw

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.TRIM2(sid, mach, q, labels, uxs, aeqr=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.aero.static_loads.TRIM

Defines the state of the aerodynamic extra points for a trim analysis. All undefined extra points will be set to zero.

1

2

3

4

5

6

7

8

9

TRIM2

ID

MACH

Q

IS_RIGID

LABEL1

UX1

LABEL2

UX2

Creates a TRIM card for a static aero (144) analysis.

Parameters
sidint

the trim id; referenced by the Case Control TRIM field

machfloat

the mach number

qfloat

dynamic pressure

labelsList[str]

names of the fixed variables

uxsList[float]

values corresponding to labels

aeqrfloat

0.0 : rigid trim analysis 1.0 : elastic trim analysis (default)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TRIM2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TRIM2'
dynamic_loads Module
Inheritance diagram of pyNastran.bdf.cards.aero.dynamic_loads

All aero cards are defined in this file. This includes:

  • AERO

  • FLFACT

  • FLUTTER

  • GUST

  • MKAERO1 / MKAERO2

All cards are BaseCard objects.

class pyNastran.bdf.cards.aero.dynamic_loads.AERO(velocity, cref, rho_ref, acsid=0, sym_xz=0, sym_xy=0, comment='')[source]

Bases: pyNastran.bdf.cards.aero.dynamic_loads.Aero

Gives basic aerodynamic parameters for unsteady aerodynamics.

1

2

3

4

5

6

7

AERO

ACSID

VELOCITY

REFC

RHOREF

SYMXZ

SYMXY

AERO

3

1.3+

1.-5

1

-1

Creates an AERO card

Parameters
velocityfloat

the airspeed

creffloat

the aerodynamic chord

rho_reffloat

FLFACT density scaling factor

acsidint; default=0

aerodyanmic coordinate system defines the direction of the wind

sym_xzint; default=0

xz symmetry flag (+1=symmetry; -1=antisymmetric)

sym_xyint; default=0

xy symmetry flag (+1=symmetry; -1=antisymmetric)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['is_anti_symmetric_xy', 'is_anti_symmetric_xz', 'is_symmetric_xy', 'is_symmetric_xz']
classmethod add_card(card, comment='')[source]

Adds an AERO card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cref = None

Reference length for reduced frequency

cross_reference(model: BDF) → None[source]

Cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/float/str]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

rho_ref = None

Reference density

safe_cross_reference(model: BDF, xref_errors)[source]

Safe cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

sym_xy = None

The symmetry key for the aero coordinate x-y plane can be used to simulate ground effect. (Integer = -1 for symmetry, 0 for no symmetry, and +1 for antisymmetry; Default = 0)

sym_xz = None

Symmetry key for the aero coordinate x-z plane. See Remark 6. (Integer = +1 for symmetry, 0 for no symmetry, and -1 for antisymmetry; Default = 0)

type = 'AERO'
uncross_reference() → None[source]

Removes cross-reference links

update(maps)[source]
maps = {

‘coord’ : cid_map,

}

validate()[source]

card checking method that should be overwritten

velocity = None

Velocity for aerodynamic force data recovery and to calculate the BOV parameter

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.dynamic_loads.Aero[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Base class for AERO and AEROS cards.

Common class for AERO, AEROS

Attributes
acsidint; default=0

aerodyanmic coordinate system defines the direction of the wind

sym_xzint; default=0

xz symmetry flag (+1=symmetry; -1=antisymmetric)

sym_xyint; default=0

xy symmetry flag (+1=symmetry; -1=antisymmetric)

Acsid()[source]
property is_anti_symmetric_xy
property is_anti_symmetric_xz
property is_symmetric_xy
property is_symmetric_xz
set_ground_effect(enable)[source]
class pyNastran.bdf.cards.aero.dynamic_loads.FLFACT(sid, factors, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

FLFACT

SID

F1

F2

F3

F4

F5

F6

F7

F8

F9

etc.

FLFACT

97

.3

.7

3.5

# delta quantity approach

1

2

3

4

5

6

7

FLFACT

SID

F1

THRU

FNF

NF

FMID

FLFACT

201

0.200

THRU

0.100

11

0.1333

Creates an FLFACT card, which defines factors used for flutter analysis. These factors define either:

  • density

  • mach

  • velocity

  • reduced frequency

depending on the FLUTTER method chosen (e.g., PK, PKNL, PKNLS)

Parameters
sidint

the id of a density, reduced_frequency, mach, or velocity table the FLUTTER card defines the meaning

factorsvaries
valuesList[float, …, float]

list of factors

List[f1, THRU, fnf, nf, fmid]
f1float

first value

THRUstr

the word THRU

fnffloat

second value

nfint

number of values

fmidfloat; default=(f1 + fnf) / 2.

the mid point to bias the array

TODO: does f1 need be be greater than f2/fnf???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an FLFACT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

max()[source]
min()[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

type = 'FLFACT'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.dynamic_loads.FLUTTER(sid: int, method, density, mach, reduced_freq_velocity, imethod: str = 'L', nvalue=None, omax=None, epsilon: float = 0.001, comment='', validate: bool = False)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines data needed to perform flutter analysis.

1

2

3

4

5

6

7

8

9

FLUTTER

SID

METHOD

DENS

MACH

RFREQ

IMETH

NVALUE/OMAX

EPS

FLUTTER

19

K

119

219

319

S

5

1.-4

Creates a FLUTTER card, which is required for a flutter (SOL 145) analysis.

Parameters
sidint

flutter id

methodstr
valid methods = [K, KE,

PKS, PKNLS, PKNL, PKE]

densityint

defines a series of air densities in units of mass/volume PARAM,WTMASS does not affect this AERO affects this references an FLFACT id

machint

defines a series of the mach numbers references an FLFACT id

reduced_freq_velocityint
Defines a series of either:
  1. reduced frequencies - K, KE

  2. velocities - PK, PKNL, PKS, PKNLS

depending on the method chosen. references an FLFACT id

imethodstr; default=’L’

Choice of interpolation method for aerodynamic matrix interpolation. imethods :

  1. L - linear

  2. S - surface

  3. TCUB - termwise cubic

nvalueint

Number of eigenvalues beginning with the first eigenvalue for output and plots

omaxfloat

For the PKS and PKNLS methods, OMAX specifies the maximum frequency, in Hz., to be used in he flutter sweep. MSC only.

epsilonfloat; default=1.0e-3

Convergence parameter for k. Used in the PK and PKNL methods only

commentstr; default=’’

a comment for the card

_get_raw_nvalue_omax()[source]
_get_repr_nvalue_omax()[source]
classmethod _init_from_empty()[source]
_properties = ['_field_map', 'headers']
classmethod add_card(card, comment='')[source]

Adds a FLUTTER card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_density()[source]
get_mach()[source]
get_rfreq_vel()[source]
property headers
make_flfacts_alt_sweep(model: BDF, mach, alts, eas_limit: float = 1000.0, alt_units: str = 'm', velocity_units: str = 'm/s', density_units: str = 'kg/m^3', eas_units: str = 'm/s') → Tuple[Any, Any, Any][source]

makes an altitude sweep

make_flfacts_eas_sweep(model: BDF, alt: float, eass: List[float], alt_units: str = 'm', velocity_units: str = 'm/s', density_units: str = 'kg/m^3', eas_units: str = 'm/s') → Tuple[Any, Any, Any][source]

Makes a sweep across equivalent airspeed for a constant altitude.

Parameters
modelBDF

the BDF model object

altfloat

Altitude in alt_units

eassList[float]

Equivalent airspeed in eas_units

alt_unitsstr; default=’m’

the altitude units; ft, kft, m

velocity_unitsstr; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_unitsstr; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_unitsstr; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

make_flfacts_mach_sweep(model, alt, machs, eas_limit=1000.0, alt_units='m', velocity_units='m/s', density_units='kg/m^3', eas_units='m/s')[source]

makes a mach sweep

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
type = 'FLUTTER'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.dynamic_loads.GUST(sid, dload, wg, x0, V=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a stationary vertical gust for use in aeroelastic response analysis.

1

2

3

4

5

6

GUST

SID

DLOAD

WG

X0

V

GUST

133

61

1.0

1.+4

Creates a GUST card, which defines a stationary vertical gust for use in aeroelastic response analysis.

Parameters
sidint

gust load id

dloadint

TLOADx or RLOADx entry that defines the time/frequency dependence

wgfloat

Scale factor (gust velocity/forward velocity) for gust velocity

x0float

Streamwise location in the aerodynamic coordinate system of the gust reference point.

Vfloat; default=None
floatvelocity of the vehicle (must be the same as the

velocity on the AERO card)

None : ???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GUST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

type = 'GUST'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.dynamic_loads.MKAERO1(machs, reduced_freqs, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Provides a table of Mach numbers (m) and reduced frequencies (k) for aerodynamic matrix calculation.

1

2

3

4

5

6

7

8

9

MKAERO1

m1

m2

m3

m4

m5

m6

m7

m8

k1

k2

k3

k4

k5

k6

k7

k8

Creates an MKAERO1 card, which defines a set of mach and reduced frequencies.

Parameters
machsList[float]

series of Mach numbers

reduced_freqsList[float]

series of reduced frequencies

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an MKAERO1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

mklist()[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

type = 'MKAERO1'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.dynamic_loads.MKAERO2(machs, reduced_freqs, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Provides a table of Mach numbers (m) and reduced frequencies (k) for aerodynamic matrix calculation.

1

2

3

4

5

6

7

8

9

MKAERO2

m1

k1

m2

k2

m3

k3

m4

k4

Creates an MKAERO2 card, which defines a set of mach and reduced frequency pairs.

Parameters
machsList[float]

series of Mach numbers

reduced_freqsList[float]

series of reduced frequencies

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card: BDFCard, comment='')[source]

Adds an MKAERO2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

mklist()[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

type = 'MKAERO2'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

utils Module
defines:
  • elements = elements_from_quad(nx, ny, dtype=’int32’)

  • points, elements = points_elements_from_quad_points(p1, p2, p3, p4, x, y, dtype=’int32’)

pyNastran.bdf.cards.aero.utils.create_axisymmetric_body(xstation, ystation, zstation, radii, aspect_ratio, p1)[source]

creates a CAERO2-type body by defining cone properties at various stations

pyNastran.bdf.cards.aero.utils.create_ellipse(aspect_ratio, radius, thetas=None)[source]

a : major radius b : minor radius

Parameters
aspect_ratiofloat

AR = height/width a = radius (theta=90) b = AR*radius (theta=0)

https://en.wikipedia.org/wiki/Ellipse#Polar_form_relative_to_center
.. math::

r(theta )={frac {ab}{sqrt {(bcos theta )^{2}+(asin theta )^{2}}}}

R(theta) = a*b / ((b*cos(theta))**2 + (a*sin(theta))**2)
TODO: doesn’t support the aero coordinate system
pyNastran.bdf.cards.aero.utils.elements_from_quad(nx: int, ny: int, dtype: str = 'int32')[source]

Creates an array of rectilinear mesh of nodes and then grabs indexs it to get the elements

Parameters
nx / nyint

number of nodes in the x/y directions

dtype: str; default=’int32’

the type of the integer

pyNastran.bdf.cards.aero.utils.make_monpnt1s_from_cids(model: BDF, nids, cids, cid_to_inids, delete_unused_coords=True)[source]

Creates MONPNT1s, AECOMPs, and SET1s by a series of coordinate systems

Parameters
model: BDF()

the model object

nids(nnodes, ) int ndarray

all the nodes in the model

cid_to_inidsDict[cid]=inids
cidint

coord id

inids(nnodes_in_cid, ) int ndarray

the indicies in nids in sorted order

cidsList[int]

cids to create

delete_unused_coordsbool; default=True

delete coordinate systems from the model that aren’t used

Notes

Doesn’t write duplicate sets

pyNastran.bdf.cards.aero.utils.points_elements_from_quad_points(p1, p2, p3, p4, x, y, dtype='int32')[source]

Creates nodes and elements in a structured grid given 4 points. Used to make an CAERO1 panel.

Parameters
p1(3, ) float ndarray

leading edge root

p2(3, ) float ndarray

trailing edge root

p3(3, ) float ndarray

trailing edge tip

p4(3, ) float ndarray

leading edge tip

x(nchord, ) float ndarray

points in the chordwise direction in percentage of the chord

y(nspan, ) float ndarray

points in the spanwise direction in percentage of the span

dtypestr; default=’int32’

the type of elements

Returns
points (nchord, nspan) float ndarray; might be backwards???

the points

elements (nquads, 4) int ndarray

series of quad elements nquads = (nchord-1) * (nspan-1)

pyNastran.bdf.cards.aero.utils.tri_cap(nelements)[source]

The tri_cap buils triangles that fan out from the first node

1
*    *2
|   /      *3
|  /     /
| /   /
0  /---------*4

create a matrix with the point counter

zona Module
Inheritance diagram of pyNastran.bdf.cards.aero.zona
All ZONA aero cards are defined in this file. This includes:
  • TRIM

All cards are BaseCard objects.

class pyNastran.bdf.cards.aero.zona.ACOORD(cid, origin, delta, theta, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Coord

Defines a general coordinate system using three rotational angles as functions of coordinate values in the reference coordinate system. The CORD3G entry is used with the MAT9 entry to orient material principal axes for 3-D composite analysis.

1

2

3

4

5

6

7

8

ACOORD

ID

XORIGN

YORIGN

ZORIGN

DELTA

THETA

ACOORD

10

250.0

52.5

15.0

0.0

0.0

Defines the CORD3G card

Parameters
cidint

coordinate system id

originList[float]

the xyz origin

deltafloat

pitch angle

thetafloat

roll angle

commentstr; default=’’

a comment for the card

Type = 'R'
acoord_transform_to_global(p)[source]
Parameters
p(3,) float ndarray

the point to transform

.. warning:: not done, just setting up how you’d do this
.. note:: per http://en.wikipedia.org/wiki/Euler_angles

“This means for example that a convention named (YXZ) is the result of performing first an intrinsic Z rotation, followed by X and Y rotations, in the moving axes (Note: the order of multiplication of matrices is the opposite of the order in which they’re applied to a vector).”

classmethod add_card(card, comment='')[source]

Adds a ACOORD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

coord_to_xyz(p)[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
property rid
rotation_x(ct, st)[source]
rotation_y(ct, st)[source]
rotation_z(ct, st)[source]
setup()[source]
\[e_{13} = e_3 - e_1\]
\[e_{12} = e_2 - e_1\]
\[k = \frac{e_{12}}{\lvert e_{12} \rvert}\]
\[j_{dir} = k \times e_{13}\]
\[j = \frac{j_{dir}}{\lvert j_{dir} \rvert}\]
\[i = j \times k\]
type = 'ACOORD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.AEROZ(fm_mass_unit, fm_length_unit, cref, bref, sref, flip='NO', acsid=0, rcsid=0, sym_xz=0, xyz_ref=None, comment='')[source]

Bases: pyNastran.bdf.cards.aero.dynamic_loads.Aero

Gives basic aerodynamic parameters for unsteady aerodynamics.

1

2

3

4

5

6

7

8

AEROS

ACSID

RCSID

REFC

REFB

REFS

SYMXZ

SYMXY

AEROS

10

20

1

Creates an AEROZ card

Parameters
creffloat

the aerodynamic chord

breffloat

the wing span for a half model, this should be the full span for a full model, this should be the full span

sreffloat

the wing area for a half model, this should be the half area for a full model, this should be the full area

acsidint; default=0

aerodyanmic coordinate system defines the direction of the wind

rcsidint; default=0

coordinate system for rigid body motions

sym_xzint; default=0

xz symmetry flag (+1=symmetry; -1=antisymmetric)

commentstr; default=’’

a comment for the card

Acsid()[source]
Rcsid()[source]
acsid = None

Aerodynamic coordinate system identification.

classmethod add_card(card, comment='')[source]

Adds an AEROZ card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

$ ACSID XZSYM FLIP FMMUNIT FMLUNIT REFC REFB REFS
$+ABC REFX REFY REFZ
AEROZ 0 YES NO SLIN IN 22.73 59.394 1175.8

59.53 0.0 0.0

bref = None

Reference span

convert_to_zona(unused_model)[source]
cref = None

Reference chord length

cross_reference(model: BDF) → None[source]

Cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

rcsid = None

Reference coordinate system identification for rigid body motions.

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Safe cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

sref = None

Reference wing area

sym_xz = None

Symmetry key for the aero coordinate x-z plane. See Remark 6. (Integer = +1 for symmetry, 0 for no symmetry, and -1 for antisymmetry; Default = 0)

type = 'AEROZ'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.AESURFZ(label, surface_type, cid, panlst, setg, actuator_tf, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies an aerodynamic control surface for aeroservoelastic, static aeroelastic/trim analysis, or the transient response analysis.

1

2

3

4

5

6

7

8

9

AESURFZ

LABEL

TYPE

CID

SETK

SETG

ACTID

AESURFZ

RUDDER

ASYM

1

10

20

0

Creates an AESURF card, which defines a control surface

Parameters
labelstr

controller name

surface_typestr

defines the control surface type {SYM, ASYM}

cidint

coordinate system id to define the hinge axis

panlstint

aero panels defined by PANLST

setgint

???

actuator_tfint

???

commentstr; default=’’

a comment for the card

Cid()[source]
SetK()[source]
classmethod add_card(card, comment='')[source]

Adds an AESURF card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property aesid
property alid1_ref
cid = None

Identification number of a rectangular coordinate system with a y-axis that defines the hinge line of the control surface component.

convert_to_nastran(model, aesurf_id, aelist_id)[source]

1

2

3

4

5

6

7

8

9

AESURF

ID

LABEL

CID1

ALID1

CID2

ALID2

EFF

LDW

CREFC

CREFS

PLLIM

PULIM

HMLLIM

HMULIM

TQLLIM

TQULIM

1

2

3

4

5

6

7

AESURFZ

LABEL

TYPE

CID

SETK

SETG

ACTID

AESURFZ

RUDDER

ASYM

1

10

20

0

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

label = None

Controller name.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsreset_camera[int/float/str]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[int/float/str]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'AESURFZ'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.BODY7(eid, label, pid, nseg, idmeshes, acoord=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines an aerodynamic body macroelement of a body-like component. Similar to Nastran’s CAERO2.

1

2

3

4

5

6

7

8

9

CAERO2

EID

PID

CP

NSB

NINT

LSB

LINT

IGID

X1

Y1

Z1

X12

1

2

3

4

5

6

7

8

9

BODY7

BID

LABEL

IPBODY7

ACOORD

NSEG

IDMESH1

IDMESH2

IDMESH3

IDMESH4

etc

BODY7

4

BODY

2

8

4

20

21

22

23

Defines a BODY7 card, which defines a slender body (e.g., fuselage/wingtip tank).

Parameters
eidint

body id

labelstr

An arbitrary character string used to define the body.

pidint; default=0

Identification number of PBODY7 bulk data card (specifying body wake and/or inlet aerodynamic boxes)

acoordint; default=0

Identification number of ACOORD bulk data card (specifying body center line location and orientation)

nsegint

Number of body segments

idmeshesList[int]

Identification number of SEGMESH bulk data card (specifying body segments).

commentstr; default=’’

a comment for the card

ACoord()[source]
Pid()[source]
_get_body7_width_height_radius(thetas: numpy.ndarray, itype: int, camber: float, yrad: float, zrad: float, idy_ref, idz_ref) → Tuple[float, float, float, float, float][source]
_get_nthetas() → int[source]

gets the number of thetas for the body

_get_points_elements_3di(segmesh: pyNastran.bdf.cards.aero.zona.SEGMESH) → Tuple[numpy.ndarray, numpy.ndarray][source]
points (nchord, nspan) float ndarray; might be backwards???

the points

elements (nquads, 4) int ndarray

series of quad elements nquads = (nchord-1) * (nspan-1)

_get_thetas() → numpy.ndarray[source]

gets the thetas for the body

_get_xyzs_offset(origin_x, origin_y, origin_z, thetas, itype: int, x: float, yrad: float, zrad: float, camber: float, idy_ref, idz_ref) → Tuple[List[float], numpy.ndarray, numpy.ndarray][source]
classmethod add_card(card, comment='')[source]

Adds a BODY7 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]

1

2

3

4

5

6

7

8

9

CAERO2

EID

PID

CP

NSB

NINT

LSB

LINT

IGID

X1

Y1

Z1

X12

1

2

3

4

5

6

7

8

9

BODY7

BID

LABEL

IPBODY7

ACOORD

NSEG

IDMESH1

IDMESH2

IDMESH3

IDMESH4

etc

BODY7

4

BODY

2

8

4

20

21

22

23

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

get_points() → List[np.ndarray, np.ndarray][source]

creates a 1D representation of the BODY7

get_points_elements_3d()[source]

Gets the points/elements in 3d space as CQUAD4s The idea is that this is used by the GUI to display CAERO panels.

TODO: doesn’t support the aero coordinate system

property nboxes
property npanels

gets the number of panels for the body

pid = None

Property identification number of a PAERO7 entry.

raw_fields() → List[Any][source]

Gets the fields in their unmodified form

Returns
fieldslist

The fields that define the card

repr_fields() → List[Any][source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'BODY7'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.CAERO7(eid, label, p1, x12, p4, x43, cp=0, nspan=0, nchord=0, lspan=0, p_airfoil=None, ztaic=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Totally wrong…

Defines an aerodynamic macro element (panel) in terms of two leading edge locations and side chords. This is used for Doublet-Lattice theory for subsonic aerodynamics and the ZONA51 theory for supersonic aerodynamics.

1

2

3

4

5

6

7

8

9

CAERO7

WID

LABEL

ACOORD

NSPAN

NCHORD

LSPAN

ZTAIC

PAFOIL7

XRL

YRL

ZRL

RCH

LRCHD

ATTCHR

ACORDR

XTL

YTL

ZTL

TCH

LTCHD

ATTCHT

ACORDT

1
|       |         |           |      4
|      |
|      |
2------3
Attributes
eidint

element id

pidint, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igidint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2; (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3; (typically x, tip chord)

cpint, CORDx

int : coordinate system CORDx : Coordinate object (xref)

nspanint

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

nchordint

int > 0 : N chordwise boxes distributed evenly int = 0 : use lchord

lspanint, AEFACT

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan AEFACT : AEFACT object (xref)

lchordint, AEFACT

int > 0 : AEFACT reference for non-uniform nchord int = 0 : use nchord AEFACT : AEFACT object (xref)

commentstr; default=’’

accesses the comment

Defines a CAERO1 card, which defines a simplified lifting surface (e.g., wing/tail).

Parameters
eidint

element id

pidint, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igroupint

Group number

p1(1, 3) ndarray float

xyz location of point 1 (leading edge; inboard)

p4(1, 3) ndarray float

xyz location of point 4 (leading edge; outboard)

x12float

distance along the flow direction from node 1 to node 2; (typically x, root chord)

x43float

distance along the flow direction from node 4 to node 3; (typically x, tip chord)

cpint, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspanint; default=0

int > 0 : N spanwise boxes distributed evenly int = 0 : use lchord

nchordint; default=0

int > 0 : N chordwise boxes distributed evenly int = 0 : use lchord

lspanint, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan AEFACT : AEFACT object (xref)

lchordint, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nchord int = 0 : use nchord AEFACT : AEFACT object (xref)

commentstr; default=’’

a comment for the card

Cp()[source]
_box_id_error(box_id)[source]

Raise box_id IndexError.

_get_box_x_chord_center(box_id, x_chord)[source]

The the location of the x_chord of the box along the centerline.

_init_ids(dtype='int32')[source]

Fill self.box_ids with the sub-box ids. Shape is (nchord, nspan)

classmethod add_card(card, comment='')[source]

Adds a CAERO1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

CAERO7 100101 RIBW1 2 25

998.904 39.821 230.687 1298.159 310001 1121.821 61.134 236.560 1175.243

CAERO7 100201 RIBW2 2 25

1121.821 61.134 236.560 1175.243 1244.258 84.704 243.625 1052.805

convert_to_nastran()[source]

1

2

3

4

5

6

7

8

9

CAERO1

EID

PID

CP

NSPAN

NCHORD

LSPAN

LCHORD

IGID

X1

Y1

Z1

X12

X4

Y4

Z4

X43

cp = None

Coordinate system for locating point 1.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number

flip_normal()[source]
get_LSpan()[source]
get_box_index(box_id)[source]

Get the index of self.box_ids that corresponds to the given box id.

Parameters
box_idint

Box id to get the index of.

Returns
indextuple

Index of self.box_ids that corresponds to the given box id.

get_box_mid_chord_center(box_id)[source]

The the location of the mid chord of the box along the centerline.

Parameters
box_idint

Box id.

Returns
xyz_mid_chordndarray

Location of box mid chord in global.

get_box_quarter_chord_center(box_id)[source]

The the location of the quarter chord of the box along the centerline.

Parameters
box_idint

Box id.

Returns
xyz_quarter_chordndarray

Location of box quarter chord in global.

get_npanel_points_elements()[source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns
npointsint

The number of nodes for the CAERO

nelmementsint

The number of elements for the CAERO

get_points()[source]

Get the 4 corner points for the CAERO card

Returns
p1234(4, 3) list

List of 4 corner points in the global frame

label = None

Property identification number of a PAERO2 entry.

property min_max_eid

Gets the min and max element ids of the CAERO card

Returns
min_max_eid(2, ) list

The [min_eid, max_eid]

property npanels
panel_points_elements()[source]

Gets the sub-points and sub-elements for the CAERO card

Returns
points(nnodes,3) ndarray of floats

the array of points

elements(nelements,4) ndarray of integers

the array of point ids

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsLIST

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

set_points(points)[source]
property shape

returns (nelements_nchord, nelements_span)

shift(dxyz)[source]

shifts the aero panel

type = 'CAERO7'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

property xy
Returns
x(nchord,) ndarray

The percentage x location in the chord-wise direction of each panel

y(nspan,) ndarray

The percentage y location in the span-wise direction of each panel

class pyNastran.bdf.cards.aero.zona.FLUTTER_ZONA(sid, sym, fix, nmode, tabdmp, mlist, conmlst, nkstep=25, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines data needed to perform flutter, ASE, or a transient response analysis.

1

2

3

4

5

6

7

8

9

FLUTTER

SID

METHOD

DENS

MACH

RFREQ

IMETH

NVALUE/OMAX

EPS

FLUTTER

19

K

119

219

319

S

5

1.-4

1

2

3

4

5

6

7

8

9

FLUTTER

SETID

SYM

FIX

NMODE

TABDMP

MLIST

CONMLST

NKSTEP

FLUTTER

100

SYMM3

1

0

30

100

0

50

Creates a FLUTTER card, which is required for a flutter (SOL 145) analysis.

Parameters
sidint

Unique set identification number. (Integer > 0)

symstr

Character string up to 8 characters with no embedded blanks. The first 4 characters can be either ‘SYMM’ (or ‘SYM’), ‘ANTI’, or ‘ASYM’ that defines the boundary condition of the structural finite element model as well as the unsteady aerodynamics, where:

  • SYMM Symmetric boundary condition.

  • ANTI Antisymmetric boundary condition.

  • ASYM Asymmetric boundary condition.

The last 4 characters are used to specify the interpolation scheme for the generalized aerodynamic matrices. They can be either:

  • blank for a cubic spline

  • L for a linear interpolation. (such as SYM = ‘SYMML’, ‘ANTIL’, or ‘ASYML’)

  • P for a second-order-polynomial interpolation. (such as SYM = ‘SYMMP’, ‘ANTIP’, or ‘ASYMP’)

  • integer for a hybrid cubic spline and linear interpolation scheme. (such as SYM = ‘SYMM1’, ‘SYMM2’, ‘ANTI3’, etc.)

  • (Default = SYMML)

fixint

Identification number of a FIXHATM, FIXMATM, FIXMACH, or FIXMDEN bulk data card. (Integer > 0)

nmodeint

Number of structural modes used in the flutter analysis. (Integer >= 0)

tabdmpint

Identification number of a TABDMP1 bulk data card specifying modal damping as

a function of natural frequency. (Integer ≥ 0)

mlistint

Identification number of a SET1 or SETADD bulk data card specifying a list of normal modes to be omitted from the flutter analysis. (Integer >= 0)

conmlstint

Identification number of a CONMLST bulk data card specifying a list of identification numbers of the CONM1 bulk data cards for mass perturbation. (Integer >= 0) (See Remark 8)

nkstepint; default=25

Number of reduced frequency steps for the reduced-frequency-sweep technique of the g-Method flutter solution. (Integer >= 0)

classmethod add_card(card, comment='')[source]

Adds a FLUTTER card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]
cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors=None)[source]
type = 'FLUTTER_ZONA'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.MKAEROZ(sid, mach, flt_id, filename, print_flag, freqs, method=0, save=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Parameters
sidint

the MKAEROZ id

machfloat

the mach number for the TRIM solution

savestr

save the AIC data to the filename SAVE save the AICs ACQUIRE load an AIC database ADD append the new acids to the existing AIC database RESTART continue an analysis

filenamestr

the length of the file must be at most 56 characters

print_flagint

???

freqsList[float]

???

methodint

???

save???

???

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MKAEROZ'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.PAFOIL7(pid, i_axial, i_thickness_root, i_camber_root, le_radius_root, i_thickness_tip, i_camber_tip, le_radius_tip, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines an aerodynamic body macroelement of a body-like component. Similar to Nastran’s CAERO2.

1

2

3

4

5

6

7

8

9

PAFOIL7

ID

ITAX

ITHR

ICAMR

RADR

ITHT

ICAMT

RADT

PAFOIL7

1

-201

202

203

0.1

211

212

0.1

Defines a BODY7 card, which defines a slender body (e.g., fuselage/wingtip tank).

Parameters
pidint

PAFOIL7 identification number.

i_axialstr

Identification number of an AEFACT bulk data card used to specify the xcoordinate locations, in percentage of the chord length, where the thickness and camber are specified. ITAX can be a negative number (where ABS (ITAX) = AEFACT bulk data card identification number) to request linear interpolation.

i_thickness_root / i_thickness_tipint

Identification number of an AEFACT bulk data card used to specify the half thickness of the airfoil at the wing root/tip.

i_camberint; default=0

Identification number of an AEFACT bulk data card used to specify the camber of the airfoil at the wing root.

le_radius_root / le_radius_root: float

Leading edge radius at the root/tip normalized by the root/tip chord.

i_thickness_tipint

Identification number of an AEFACT bulk data card used to specify the half thickness at the wing tip.

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a PAFOIL7 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]

Should this be converted to a DMIG?

1

2

3

4

5

6

7

8

9

PAFOIL7

ID

ITAX

ITHR

ICAMR

RADR

ITHT

ICAMT

RADT

PAFOIL7

1

-201

202

203

0.1

211

212

0.1

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

The fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PAFOIL7'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.PANLST1(eid, macro_id, box1, box2, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines a set of aerodynamic boxes by the LABEL entry in CAERO7 or BODY7 bulk data cards.

1

2

3

4

5

6

7

8

9

SPLINE1

EID

MODEL

CP

SETK

SETG

DZ

EPS

SPLINE1

100

1

10

1

2

3

4

5

6

7

8

9

PANLST1

SETID

MACROID

BOX1

BOX2

PANLST1

100

111

111

118

PANLST1 is referred to by SPLINEi, ATTACH, LOADMOD, CPFACT, JETFRC, and/or AESURFZ bulk data card.

Creates a PANLST1 card

Parameters
eidint

spline id

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a PANLST3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PANLST1'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.PANLST3(eid, panel_groups, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines a set of aerodynamic boxes by the LABEL entry in CAERO7 or BODY7 bulk data cards.

1

2

3

4

5

6

7

8

9

SPLINE1

EID

MODEL

CP

SETK

SETG

DZ

EPS

SPLINE1

100

1

10

1

2

3

4

5

6

7

8

9

PANLST3

SETID

LABEL1

LABEL2

LABEL3

etc

PANLST3

100

WING

HTAIL

PANLST3 is referred to by SPLINEi, ATTACH, LOADMOD, CPFACT, JETFRC, and/or AESURFZ bulk data card.

Creates a PANLST3 card

Parameters
eidint

spline id

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a PANLST3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'PANLST3'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.SEGMESH(segmesh_id, naxial, nradial, nose_radius, iaxis, itypes, xs, cambers, ys, zs, idys, idzs, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a grid system for a body segment; referenced by the BODY7 bulk data card.

1

2

3

4

5

6

7

8

9

SEGMESH

IDMESH

NAXIS

NRAD

NOSERAD

IAXIS

ITYPE1

X1

CAM1

YR1

ZR1

IDY1

IDZ1

ITYPE2

X2

CAM2

YR2

ZR2

IDY2

IDZ2

ITYPE3

X3

CAM3

YR3

ZR3

IDY3

IDZ3

SEGMESH

2

3

6

1

0.0

0.0

0.0

1

1.0

0.0

0.5

3

2.0

103

104

Defines a SEGMESH card, which defines a cross-section for a PBODY7.

Parameters
segmesh_idint

Body segment mesh identification number.

naxialint

Number of axial stations (i.e., divisions) of the segment. (min=2).

nradialint

Number of circumferential points of the segment (min=3).

nose_radiusfloat

Nose radius of blunt body. NOSERAD is active only if ZONA7U (Hypersonic Aerodynamic Method) is used (the METHOD entry of the MKAEROZ Bulk Data equals 2 or –2). Furthermore, NOSERAD is used only if the SEGMESH bulk data card is the first segment defined in the BODY7 bulk data card.

iaxisint

The index of the axial station where the blunt nose ends. IAXIS is active only if ZONA7U (Hypersonic Aerodynamic Method) is used.

ITYPEiint

Type of input used to define the circumferential box cuts - 1 body of revolution - 2 elliptical body - 3 arbitrary body

XiList[float]

X-location of the axial station; Xi must be in ascending order. (i.e., Xi+1 > Xi)

cambersList[float]

Body camber at the Xi axial station. (Real)

YRiList[float]

Body cross-sectional radius if ITYPEi = 1 or the semi-axis length of the elliptical body parallel to the Y-axis if ITYPEi=2.

ZRiList[float]

The semi-axis length of the elliptical body parallel to the Z-axis. Used only if ITYPEi=2. (Real)

IDYiint

Identification number of AEFACT bulk data card that specifies NRAD number of the Y-coordinate locations of the circumferential points at the Xi axial station. Use only if ITYPEi=3.

IDZiint

Identification number of AEFACT bulk data card that specifies NRAD number of the Z-coordinate locations of the circumferential points at the Xi axial station. Use only if ITYPEi=3.

commentstr; default=’’

a comment for the card

Cp()[source]
Pid()[source]
classmethod add_card(card, comment='')[source]

Adds a SEGMESH card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property pid
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist

The fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldslist

The fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
shift(dxyz)[source]

shifts the aero panel

type = 'SEGMESH'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.SPLINE1_ZONA(eid, panlst, setg, model=None, cp=None, dz=None, eps=0.01, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines an infinite plate spline method for displacements and loads transferal between CAERO7 macroelement and structural grid points.

1

2

3

4

5

6

7

8

9

SPLINE1

EID

CAERO

BOX1

BOX2

SETG

DZ

METH

USAGE

NELEM

MELEM

SPLINE1

3

111

115

122

14

1

2

3

4

5

6

7

8

9

SPLINE1

EID

MODEL

CP

SETK

SETG

DZ

EPS

SPLINE1

100

1

10

Creates a SPLINE1 card, which is useful for control surface constraints.

Parameters
eidint

spline id

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a SPLINE1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]

1

2

3

4

5

6

7

8

9

SPLINE1

EID

CAERO

BOX1

BOX2

SETG

DZ

METH

USAGE

NELEM

MELEM

SPLINE1

3

111

115

122

14

1

2

3

4

5

6

7

8

9

SPLINE1

EID

MODEL

CP

SETK

SETG

DZ

EPS

SPLINE1

100

1

10

cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE1_ZONA'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.SPLINE2_ZONA(eid, panlst, setg, model=None, dz=None, eps=0.01, cp=None, curvature=None, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines an infinite plate spline method for displacements and loads transferal between CAERO7 macroelement and structural grid points.

1

2

3

5

6

6

7

8

9

SPLINE2

EID

MODEL

SETK

SETG

DZ

EPS

CP

CURV

SPLINE2

100

1

10

Creates a SPLINE1 card, which is useful for control surface constraints.

Parameters
eidint

spline id

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a SPLINE1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE2_ZONA'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.SPLINE3_ZONA(eid, panlst, setg, model=None, cp=None, dz=None, eps=0.01, comment='')[source]

Bases: pyNastran.bdf.cards.aero.aero.Spline

Defines a 3-D spline for the BODY7 and CAERO7 macroelement.

1

2

3

4

5

6

7

8

9

SPLINE3

EID

MODEL

CP

SETK

SETG

DZ

EPS

SPLINE3

100

N/A

1

10

Creates a SPLINE3 card, which is useful for control surface constraints.

Parameters
eidint

spline id

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a SPLINE3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]
cross_reference(model: BDF) → None[source]
raw_fields()[source]

1

2

3

4

5

6

7

8

9

SPLINE3

EID

CAERO

BOXID

COMP

G1

C1

A1

USAGE

G2

C2

A2

G3

C3

A2

G4

C4

A4

etc.

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'SPLINE3_ZONA'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.TRIMLNK(link_id, sym, coeffs, var_ids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a set of coefficient and trim variable identification number pairs for trim variable linking.

+=========+========+========+========+========+========+========+========+========+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +———+——–+——–+——–+——–+——–+——–+——–+——–+ | TRIMLNK | IDLINK | SYM | COEFF1 | IDVAR1 | COEFF2 | IDVAR2 | COEFF3 | IDVAR3 | +———+——–+——–+——–+——–+——–+——–+——–+——–+ | | COEFF4 | IDVAR4 | etc. | | | | | | +———+——–+——–+——–+——–+——–+——–+——–+——–+

Creates a TRIMLNK card

Parameters
link_idint

the TRIMLNK id

sym???

???

coeffs???

???

var_ids???

???

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a TRIMLNK card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]
cross_reference(model: BDF) → None[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
type = 'TRIMLNK'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.TRIMVAR(var_id, label, lower, upper, trimlnk, dmi, sym, initial, dcd, dcy, dcl, dcr, dcm, dcn, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies a trim variable for static aeroelastic trim variables.

Creates a TRIMVAR card for a static aero (144) analysis.

Parameters
var_idint

the trim id; referenced by the Case Control TRIM field

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a TRIMVAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]
cross_reference(model: BDF) → None[source]
raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
type = 'TRIMVAR'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.TRIM_ZONA(sid, mkaeroz, q, cg, true_g, nxyz, pqr, loadset, labels, uxs, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies constraints for aeroelastic trim variables.

Creates a TRIM card for a static aero (144) analysis.

Parameters
sidint

the trim id; referenced by the Case Control TRIM field

qfloat

dynamic pressure

true_gfloat

???

nxyzList[float]

???

pqrList[float]

[roll_rate, pitch_rate, yaw_rate]

loadsetint

Identification number of a SET1 or SETADD bulk data card that specifies a set of identification numbers of TRIMFNC or TRIMADD bulk data card. All values of the trim functions defined by the TRIMFNC or TRIMADD bulk data card are computed and printed out.

labelsList[str]

names of the fixed variables

uxsList[float]

values corresponding to labels

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a TRIM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

convert_to_nastran(model)[source]
cross_reference(model: BDF) → None[source]
labels = None

The label identifying aerodynamic trim variables defined on an AESTAT or AESURF entry.

q = None

Dynamic pressure. (Real > 0.0)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
sid = None

Trim set identification number. (Integer > 0)

type = 'TRIM_ZONA'
uncross_reference() → None[source]

Removes cross-reference links

uxs = None

The magnitude of the aerodynamic extra point degree-of-freedom. (Real)

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.zona.ZONA(model)[source]

Bases: object

PAFOIL(pid, msg='')[source]

gets a pafoil profile (PAFOIL7/PAFOIL8)

_add_aesurfz_object(aesurf: pyNastran.bdf.cards.aero.zona.AESURFZ) → None[source]

adds an AESURFZ object

_add_caero2s(caero2s, add=False)[source]

Converts ZONA BODY7 to CAERO2/PAERO2/AEFACT

_add_mkaeroz_object(mkaeroz: pyNastran.bdf.cards.aero.zona.MKAEROZ) → None[source]

adds an MKAEROZ object

_add_pafoil_object(pafoil: pyNastran.bdf.cards.aero.zona.PAFOIL7) → None[source]

adds an PAFOIL7/PAFOIL8 object

_add_panlst_object(panlst: Union[pyNastran.bdf.cards.aero.zona.PANLST1, pyNastran.bdf.cards.aero.zona.PANLST3]) → None[source]

adds an PANLST1/PANLST2/PANLST3 object

_add_trimlnk_object(trimlnk: pyNastran.bdf.cards.aero.zona.TRIMLNK) → None[source]

adds an TRIMLNK object

_add_trimvar_object(trimvar: pyNastran.bdf.cards.aero.zona.TRIMVAR) → None[source]

adds an TRIMVAR object

_convert_aesurf_aelist()[source]

Converts ZONA AESURFZ to AESURF/AELIST

1

2

3

4

5

6

7

AESURFZ

LABEL

TYPE

CID

SETK

SETG

ACTID

AESURFZ

RUDDER

ASYM

1

10

20

0

_convert_caeros()[source]

Converts ZONA CAERO7/BODY7 to CAERO1/CAERO2

_convert_splines()[source]

Converts ZONA splines to splines

_convert_trim()[source]

Converts ZONA TRIM to TRIM

_convert_trimlnk()[source]

Converts ZONA TRIMLNK to AELINK

classmethod _init_from_self(model)[source]

helper method for dict_to_h5py

clear()[source]

clears out the ZONA object

convert_to_nastran(save=True)[source]

Converts a ZONA model to Nastran

cross_reference()[source]
object_attributes(mode: str = 'public', keys_to_skip: Optional[List[str]] = None, filter_properties: bool = False)[source]

List the names of attributes of a class as strings. Returns public attributes as default.

Parameters
modestr

defines what kind of attributes will be listed * ‘public’ - names that do not begin with underscore * ‘private’ - names that begin with single underscore * ‘both’ - private and public * ‘all’ - all attributes that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
attribute_namesList[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

object_methods(mode: str = 'public', keys_to_skip: Optional[List[str]] = None) → List[str][source]

List the names of methods of a class as strings. Returns public methods as default.

Parameters
objinstance

the object for checking

modestr

defines what kind of methods will be listed * “public” - names that do not begin with underscore * “private” - names that begin with single underscore * “both” - private and public * “all” - all methods that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
methodList[str]

sorted list of the names of methods of a given type or None if the mode is wrong

pafoil = None

store PAFOIL7/PAFOIL8

panlsts = None

store PANLST1,PANLST2,PANLST3

safe_cross_reference()[source]
update_for_zona()[source]

updates for zona

validate()[source]
verify(xref)[source]
write_bdf(bdf_file, size=8, is_double=False)[source]
elements Package
axisymmetric Module
Inheritance diagram of pyNastran.bdf.cards.axisymmetric.axisymmetric
All axisymmetric shell elements are defined in this file. This includes:
  • AXIC

  • AXIF

  • CCONEAX

  • PCONEAX

  • POINTAX

  • RINGFL

  • RINGAX

class pyNastran.bdf.cards.axisymmetric.axisymmetric.AXIC(nharmonics, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a AXIC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'AXIC'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.AXIF(cid, g, drho, db, no_sym, f, n, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

AXIF CID G DRHO DB NOSYM F

N1 N2 N3 N4 N5 etc.

cidint

Fluid coordinate system identification number. (Integer > 0)

Gfloat

Value of gravity for fluid elements in the axial direction. (Real)

drhofloat

Default mass density for fluid elements. (Real > 0.0 or blank)

dbfloat

Default bulk modulus for fluid elements.

no_symstr

Request for nonsymmetric (sine) terms of series. {YES, NO}

Fstr; default=None

Flag specifying harmonics. (Blank if harmonic is specified, or Character: ‘NONE’)

NiList[int]

Harmonic numbers for the solution, represented by an increasing sequence of integers. On continuation entries, without the ‘THRU’ option, blank fields are ignored. ‘THRU’ implies all numbers including upper and lower harmonics. (0 < Integer < 100, or Character: ‘THRU’, ‘STEP’ or blank)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a AXIF card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'AXIF'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.CCONEAX(eid, pid, rings, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Element

1

2

3

4

5

CCONEAX

EID

PID

N1

N2

Creates a CCONEAX card

Parameters
eidint

element id

pidint

property id (PCONEAX)

nidsList[int, int]

node ids

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CCONEAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property node_ids
property nodes
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

property ring_ids
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CCONEAX'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.PCONEAX(pid, mid1, t1=None, mid2=0, i=None, mid3=None, t2=None, nsm=0.0, z1=None, z2=None, phi=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

8

9

PCONEAX

ID

MID1

T1

MID2

I

MID3

T2

NSM

Z1

Z2

PHIl

PHI2

PHI3

PHI4

PHI5

PHI6

PHI7

PHI8

PHI9

PHI10

PHI11

PHI12

PHI13

PHI14

PCONEAX

2

4

1.0

6

16.3

8

2.1

0.5

0.001

-0.002

23.6

42.9

Creates a PCONEAX

Parameters
pidint

PCONEAX property id for a CCONEAX.

mid1int

Membrane material id

mid2int

bending material id

mid3int

transverse shear material id

t1float

Membrane thickness. (Real > 0.0 if MID1 = 0)

t2float

Transverse shear thickness. (Real > 0.0 if MID3 = 0)

Ifloat

Moment of inertia per unit width.

nsmfloat

Nonstructural mass per unit area.

z1, z2float

Fiber distances from the middle surface for stress recovery.

phiList[float]

Azimuthal coordinates (in degrees) for stress recovery.

commentstr; default=’’

a comment for the card

Mid1()[source]
Mid2()[source]
Mid3()[source]
Mids()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PCONEAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property mid_ref
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PCONEAX'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.POINTAX(nid, ringax, phi, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

POINTAX

ID

RID

PHI

POINTAX

2

3

30.0

Creates a POINTAX card

Parameters
nidint

Point identification number.

ringaxint

Identification number of a RINGAX entry.

phifloat

Azimuthal angle in degrees.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RINGAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'POINTAX'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.RINGAX(nid: int, R: float, z: float, ps: Optional[str] = None, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a ring for conical shell problems.

1

2

3

4

5

6

7

8

RINGAX

MID

R

Z

PS

Creates the RINGAX card

R = None

Radius

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RINGAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

nid = None

Node ID

ps = None

local SPC constraint

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

type = 'RINGAX'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.axisymmetric.axisymmetric.RINGFL(ringfl: int, xa: float, xb: float, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Creates the RINGFL card

classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a RINGAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[varies]

the fields that define the card

type = 'RINGFL'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

axisymmetric_shells Module
Inheritance diagram of pyNastran.bdf.cards.elements.axisymmetric_shells
All axisymmetric shell elements are defined in this file. This includes:
  • CTRAX3

  • CTRAX6

  • CTRIAX

  • CTRIAX6

  • CQUADX

  • CQUADX4

  • CQUADX8

All tris are TriShell, ShellElement, and Element objects. All quads are QuadShell, ShellElement, and Element objects.

class pyNastran.bdf.cards.elements.axisymmetric_shells.CTRAX3(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.axisymmetric_shells.AxisymmetricTri

1

2

3

4

5

6

7

CTRAX3

EID

PID

N1

N2

N3

THETA

CTRAX3 is NX only!

dummy init

Area()[source]

Get the area, \(A\).

\[A = \frac{1}{2} \lvert (n_1-n_2) \times (n_1-n_3) \rvert\]
AreaCentroidNormal()[source]

Returns area, centroid, normal as it’s more efficient to do them together

Mass()[source]
classmethod add_card(card, comment='')[source]

Adds a CTRAX3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTRAX3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.axisymmetric_shells.CTRAX6(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.axisymmetric_shells.AxisymmetricTri

1

2

3

4

5

6

7

8

9

CTRAX6

EID

PID

N1

N2

N3

N4

N5

N6

THETA

Theta/Mcid is NX only!

dummy init

Area()[source]

Get the area, \(A\).

\[A = \frac{1}{2} \lvert (n_1-n_2) \times (n_1-n_3) \rvert\]
AreaCentroidNormal()[source]

Returns area, centroid, normal as it’s more efficient to do them together

classmethod add_card(card, comment='')[source]

Adds a CTRAX6 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTRAX6'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.axisymmetric_shells.CTRIAX(eid, pid, nids, theta_mcid=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.axisymmetric_shells.AxisymmetricTri

1

2

3

4

5

6

7

8

9

CTRIAX

EID

PID

N1

N2

N3

N4

N5

N6

THETA/MCID

Theta/Mcid is MSC only!

dummy init

Area()[source]

Get the area, \(A\).

\[A = \frac{1}{2} \lvert (n_1-n_2) \times (n_1-n_3) \rvert\]
AreaCentroidNormal()[source]

Returns area, centroid, normal as it’s more efficient to do them together

classmethod add_card(card, comment='')[source]

Adds a CTRIAX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTRIAX'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.axisymmetric_shells.CTRIAX6(eid, mid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.TriShell

1

2

3

4 | 5

6

7

8

9

CTRIAX6

EID

MID

N1 | N2

N3

G4

G5

G6

THETA

NX/MSC : Nodes are defined in a non-standard way:

    5
   /          6   4
/             1----2----3

dummy init

Area()[source]

Get the normal vector.

\[A = \frac{1}{2} \lvert (n_1-n_3) \times (n_1-n_5) \rvert\]
AreaCentroidNormal()[source]

Returns area, centroid, normal as it’s more efficient to do them together

Centroid()[source]

Get the centroid.

\[CG = \frac{1}{3} (n_0+n_1+n_2)\]
Mass()[source]
\[m = \frac{m}{A} A \f]\]
MassPerArea()[source]

Returns the mass per area

Mid()[source]

Returns the material ID

Todo

possibly remove this

Normal()[source]

Get the normal vector, \(n\).

5

/

6 4

/

1—-2—-3

\[n = \frac{(n_0-n_1) \times (n_0-n_2)} {\lvert (n_0-n_1) \times (n_0-n_2) \lvert}\]
Nsm()[source]

Returns the non-structural mass

Pid()[source]

Gets the Property ID of an element

Returns
pidint

the Property ID

classmethod add_card(card, comment='')[source]

Adds a CTRIAX6 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
     5               5
    / \             / \
   6   4   -->     6   4
 /       \       /       \
1----2----3     1----2----3
get_edge_ids()[source]

Return the edge IDs

property node_ids

5

/ 6 4

/ 1—-2—-3

pid = -53
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

theta = None

theta

type = 'CTRIAX6'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.axisymmetric_shells.CQUADX(eid, pid, nids, theta_mcid=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.axisymmetric_shells.AxisymmetricQuad

Defines an axisymmetric quadrilateral element with up to nine grid points for use in fully nonlinear (i.e., large strain and large rotations) analysis or a linear harmonic or rotordynamic analysis. The element has between four and eight grid points

1

2

3

4

5

6

7

8

9

CQUADX

EID

PID

N1

N2

N3

N4

G5

G6

G7

G8

G9

THETA/MCID

Theta/Mcid is MSC only!

dummy init

Thickness()[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUADX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1--5--2       1--8--4
|     |  -->  |     |
8  9  6       5  9  7
|     |       |     |
4--7--3       2--6--3
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CQUADX'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.axisymmetric_shells.CQUADX4(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.axisymmetric_shells.AxisymmetricQuad

Defines an isoparametric and axisymmetric quadrilateral cross-section ring element for use in linear and fully nonlinear (i.e., large strain and large rotations) hyperelastic analysis.

1

2

3

4

5

6

7

8

CQUADX4

EID

PID

N1

N2

N3

N4

THETA

CQUADX4 is an NX card only!

dummy init

classmethod add_card(card, comment='')[source]

Adds a CQUADX4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1--5--2       1--8--4
|     |  -->  |     |
8  9  6       5  9  7
|     |       |     |
4--7--3       2--6--3
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CQUADX4'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.axisymmetric_shells.CQUADX8(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.axisymmetric_shells.AxisymmetricQuad

Defines an isoparametric and axisymmetric quadrilateral cross-section ring element with midside nodes for use in linear and fully nonlinear (i.e., large strain and large rotations) hyperelastic analysis.

1

2

3

4

5

6

7

8

9

CQUADX8

EID

PID

N1

N2

N3

N4

G5

G6

G7

G8

THETA

CQUADX8 is an NX card only!

dummy init

Mass()[source]
Normal()[source]
classmethod add_card(card, comment='')[source]

Adds a CQUADX8 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1--5--2       1--8--4
|     |  -->  |     |
8     6       5     7
|     |       |     |
4--7--3       2--6--3
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CQUADX8'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

bars Module
Inheritance diagram of pyNastran.bdf.cards.elements.bars
defines:
  • CBAR

  • CBARAO

  • BAROR

  • CBEAM3

  • CBEND

class pyNastran.bdf.cards.elements.bars.BAROR(pid, is_g0, g0, x, offt='GGG', comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

BAROR

PID

G0/X1

X2

X3

OFFT

BAROR

39

0.6

2.9

-5.87

GOG

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
raw_fields()[source]

Gets the fields of the card in their full form

type = 'BAROR'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.bars.CBAR(eid, pid, nids, x, g0, offt='GGG', pa=0, pb=0, wa=None, wb=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bars.LineElement

1

2

3

4

5

6

7

8

9

CBAR

EID

PID

GA

GB

X1

X2

X3

OFFT

PA

PB

W1A

W2A

W3A

W1B

W2B

W3B

or

1

2

3

4

5

6

7

8

9

CBAR

EID

PID

GA

GB

G0

OFFT

PA

PB

W1A

W2A

W3A

W1B

W2B

W3B

1

2

3

4

5

6

7

8

9

CBAR

2

39

7

6

105

GGG

513

0.0

0.0

-9.

0.0

0.0

-9.

Adds a CBAR card

Parameters
pidint

property id

midint

material id

nidsList[int, int]

node ids; connected grid points at ends A and B

xList[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offtstr; default=’GGG’

Offset vector interpretation flag

pa / pbint; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wbList[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

commentstr; default=’’

a comment for the card

Area()[source]

returns the area of the element face

Centroid()[source]
G0()[source]

gets G0

Ga()[source]

gets Ga/G1

Gb()[source]

gets Gb/G2

I1()[source]
I2()[source]
J()[source]

returns the Polar Moment of Inertia, \(J\)

Length()[source]

Gets the length, \(L\), of the element.

\[L = \sqrt{ (n_{x2}-n_{x1})^2+(n_{y2}-n_{y1})^2+(n_{z2}-n_{z1})^2 }\]
Mid()[source]
Nsm()[source]

Placeholder method for the non-structural mass, \(nsm\)

classmethod add_card(card, baror=None, comment='')[source]

Adds a CBAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

beamorBAROR() or None

defines the defaults

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_axes(model)[source]

Gets the axes of a CBAR/CBEAM, while respecting the OFFT flag.

Notes

pyNastran.bdf.cards.elements.bars.rotate_v_wa_wb() for a description of the OFFT flag.

is_passed: bool out: (wa, wb, ihat, jhat, khat)

get_axes_by_nodes(model, pid_ref, node1, node2, xyz1, xyz2, log)[source]

Gets the axes of a CBAR/CBEAM, while respecting the OFFT flag.

Notes

pyNastran.bdf.cards.elements.bars.rotate_v_wa_wb() for a description of the OFFT flag.

get_edge_ids()[source]

Return the edge IDs

get_orientation_vector(xyz)[source]

Element offsets are defined in a Cartesian system located at the connecting grid point. The components of the offsets are always defined in units of translation, even if the displacement coordinate system is cylindrical or spherical.

For example, in Figure 11-11, the grid point displacement coordinate system is cylindrical, and the offset vector is defined using Cartesian coordinates u1, u2, and u3 in units of translation.

get_x_g0_defaults()[source]

X and G0 compete for the same fields, so the method exists to make it easier to write the card

Returns
x_g0varies

g0 : List[int, None, None] x : List[float, float, float]

Notes

Used by CBAR and CBEAM

property node_ids
property nodes
property nodes_ref
raw_fields()[source]

Gets the fields of the card in their full form

repr_fields()[source]

Gets the fields of the card in their reduced form

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CBAR'
uncross_reference() → None[source]

Removes cross-reference links

update_by_cp_name(cp_name, value)[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.bars.CBARAO(eid, scale, x, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Per MSC 2016.1 +——–+——+——-+——+—–+——–+—–+—-+—-+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +========+======+=======+======+=====+========+=====+====+====+ | CBARAO | EID | SCALE | X1 | X2 | X3 | X4 | X5 | X6 | +——–+——+——-+——+—–+——–+—–+—-+—-+ | CBARAO | 1065 | FR | 0.2 | 0.4 | 0.6 | 0.8 | | | +——–+——+——-+——+—–+——–+—–+—-+—-+

Alternate form (not supported): +——–+——+——-+——+—–+——–+—–+—-+—-+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +========+======+=======+======+=====+========+=====+====+====+ | CBARAO | EID | SCALE | NPTS | X1 | DELTAX | | | | +——–+——+——-+——+—–+——–+—–+—-+—-+ | CBARAO | 1065 | FR | 4 | 0.2 | 0.2 | | | | +——–+——+——-+——+—–+——–+—–+—-+—-+

Creates a CBARAO card, which defines additional output locations for the CBAR card.

It also changes the OP2 element type from a CBAR-34 to a CBAR-100. However, it is ignored if there are no PLOAD1s in the model. Furthermore, the type is changed for the whole deck, regardless of whether there are PLOAD1s in the other load cases.

Parameters
eidint

element id

scalestr

defines what x means LE : x is in absolute coordinates along the bar FR : x is in fractional

xList[float]

the additional output locations (doesn’t include the end points) len(x) <= 6

commentstr; default=’’

a comment for the card

MSC only
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CBARAO card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'CBARAO'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.bars.CBEAM3(eid, pid, nids, x, g0, wa=None, wb=None, wc=None, tw=None, s=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bars.LineElement

dummy init

Area()[source]

returns the area of the element face

Centroid()[source]
G0()[source]

gets the orientation vector node

Ga()[source]

gets node 1

Gb()[source]

gets node 2

Gc()[source]

gets the node between node 1 and 2

Length()[source]

We’ll fit a 2nd order polynomial to the x, y, and z coefficients. We know GA (t=0), GB(t=1), and GC (t=0.5 assumed). This gives us A, for:

  • y1 = a1*t^2 = b1*t + c1

where:
  • yi is for the x, y, and z terms

[xa, xb, xc] = [A][a1, b1, c1].T [ya, yb, yc] = [A][a2, b2, c2].T [za, zb, zc] = [A][a3, b3, c3].T

[a1, b1, c1] = [A^-1][[xa, xb, xc].T A = [0. , 0. , 1. ]

[1. , 1. , 1. ] [0.25, 0.5 , 1. ]

Ainv = [ 2., 2., -4.]

[-3., -1., 4.] [ 1., 0., 0.]

MassPerLength()[source]

Get the mass per unit length, :math:` rac{m}{L}`

Nsm()[source]

Placeholder method for the non-structural mass, \(nsm\)

Volume()[source]
classmethod _init_from_empty()[source]
_integrate(xabc, yabc, zabc)[source]
We integrate:

y = sqrt(x’(t)^2 + y’(t)^2 + z’(t)^2)*dt from 0 to 1 y = sqrt(r)

/where:
  • x(t) = a*t^2 + b*t + c

  • x’(t) = 2*a*t + b

  • x’(t)^2 = 4*(a*t)^2 + 2*a*b*t + b^2

expanding terms:
  • x’(t)^2 = 4*(a1*t)^2 + 2*a1*b1*t + b1^2

  • y’(t)^2 = 4*(a2*t)^2 + 2*a2*b2*t + b2^2

  • z’(t)^2 = 4*(a3*t)^2 + 2*a3*b3*t + b3^2

grouping terms:
  • a = 4 * (a1 ** 2 + a2 ** 2 + a3 ** 2) * t^2

  • b = 2 * (a1 * b1 + a2 * b2 + a3 * b3) * t

  • c = b1 ** 2 + b2 ** 2 + b3 ** 2

  • y = integrate(sqrt(a*t^2 + b*t + t), t, 0., 1.)

Looking up integral formulas, we get a really complicated integral.

for a = 0 (and rewriting):
  • y = integrate(sqrt(a*t + b), t, 0., 1.)

  • y = (2*b/3a + 2*t/3) * sqrt(at + b)

or:
  • y = (2*c/3b + 2*t/3) * sqrt(b*t + c)

_properties = ['node_ids', 'nodes']

Defines a three-node beam element

classmethod add_card(card, comment='')[source]

Adds a CBEAM3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_edge_ids()[source]

Return the edge IDs

get_x_g0_defaults()[source]

X and G0 compete for the same fields, so the method exists to make it easier to write the card

Returns
x_g0varies

g0 : List[int, None, None] x : List[float, float, float]

Notes

Used by CBAR, CBEAM, and CBEAM3

property node_ids
property nodes
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CBEAM3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.bars.CBEND(eid, pid, nids, g0, x, geom, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bars.LineElement

Creates a CBEND card

Parameters
eidint

element id

pidint

property id (PBEND)

nidsList[int, int]

node ids; connected grid points at ends A and B

g0int

???

xList[float, float, float]

???

geomint

1 : The center of curvature lies on the line AO (or its extension) or vector v. 2 : The tangent of centroid arc at end A is parallel to line AO or vector v.

Point O (or vector v) and the arc must be on the same side of the chord AB.

3The bend radius (RB) is specified on the PBEND entry:

Points A, B, and O (or vector v) define a plane parallel or coincident with the plane of the element arc. Point O (or vector v) lies on the opposite side of line AB from the center of the curvature.

4THETAB is specified on the PBEND entry. Points A, B, and O (or vector v)

define a plane parallel or coincident with the plane of the element arc. Point O (or vector v) lies on the opposite side of line AB from the center of curvature.

commentstr; default=’’

a comment for the card

Area()[source]

returns the area of the element face

Centroid()[source]
Ga()[source]
Gb()[source]
Length()[source]

Gets the length, \(L\), of the element.

\[L = \sqrt{ (n_{x2}-n_{x1})^2+(n_{y2}-n_{y1})^2+(n_{z2}-n_{z1})^2 }\]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CBEND card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_x_g0_defaults()[source]
property node_ids
property nodes
property nodes_ref
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CBEND'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.bars.LineElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

Area()[source]

returns the area of the element face

C()[source]

torsional constant

E()[source]

returns the Young’s Modulus, \(E\)

G()[source]

returns the Shear Modulus, \(G\)

I11()[source]

returns the Moment of Inertia, \(I_{11}\)

I12()[source]

returns the Moment of Inertia, \(I_{12}\)

I22()[source]

returns the Moment of Inertia, \(I_{22}\)

J()[source]

returns the Polar Moment of Inertia, \(J\)

Length()[source]

Gets the length, \(L\), of the element.

\[L = \sqrt{ (n_{x2}-n_{x1})^2+(n_{y2}-n_{y1})^2+(n_{z2}-n_{z1})^2 }\]
Mass()[source]

Get the mass of the element.

\[m = \left( \rho A + nsm \right) L\]
MassPerLength()[source]

Get the mass per unit length, :math:` rac{m}{L}`

Nsm()[source]

Placeholder method for the non-structural mass, \(nsm\)

Nu()[source]

Get Poisson’s Ratio, :math:` u`

Rho()[source]

Get the material density, :math:` ho`

get_edge_ids()[source]

Return the edge IDs

uncross_reference() → None[source]

Removes cross-reference links

pyNastran.bdf.cards.elements.bars.check_offt(element)[source]

B,G,O Note: The character ‘O’ in the table replaces the obsolete character ‘E’

pyNastran.bdf.cards.elements.bars.get_bar_vector(model, elem, node1, node2, xyz1)[source]

helper method for rotate_v_wa_wb

pyNastran.bdf.cards.elements.bars.get_bar_yz_transform(v, ihat, eid, xyz1, xyz2, nid1, nid2, i, Li)[source]

helper method for _get_bar_yz_arrays

Parameters
vList[float, float, float]

the projection vector that defines the y-axis (jhat)

ihat(3, ) float ndarray

the normalized x-axis (not including the CBEAM offset)

eidint

the element id

xyz1 / xyz2(3, ) float ndarray

the xyz locations for node 1 / 2

nid1 / nid2int

the node ids for xyz1 / xyz2

i(3, ) float ndarray

the unnormalized x-axis (not including the CBEAM offset)

Lifloat

the length of the CBAR/CBEAM (not including the CBEAM offset)

Returns
yhat (3, ) float ndarray

the CBAR/CBEAM’s y-axis

zhat (3, ) float ndarray

the CBAR/CBEAM’s z-axis

pyNastran.bdf.cards.elements.bars.init_x_g0(card, eid, x1_default, x2_default, x3_default)[source]

common method to read the x/g0 field for the CBAR, CBEAM, CBEAM3

pyNastran.bdf.cards.elements.bars.init_x_g0_cbeam3(card, eid, x1_default, x2_default, x3_default)[source]

reads the x/g0 field for the CBEAM3

pyNastran.bdf.cards.elements.bars.rotate_v_wa_wb(model: BDF, elem, xyz1, xyz2, node1, node2, ihat_offset, i_offset, eid, Li_offset, log: SimpleLogger) → Tuple[NDArray3float, NDArray3float, NDArray3float, NDArray33float][source]

Rotates v, wa, wb

Parameters
modelBDF()

BDF : assume the model isn’t xref’d None : use the xref’d values

elemCBAR() / CBEAM()

the CBAR/CBEAM

xyz1 / xyz2(3, ) float ndarray

the xyz locations for node 1 / 2

node1 / node2GRID()

the xyz object for node 1 / 2

ihat_offset(3, ) float ndarray

the normalized x-axis (not including the CBEAM offset)

i_offset(3, ) float ndarray

the unnormalized x-axis (not including the CBEAM offset)

eidint

the element id

Li_offsetfloat

the length of the CBAR/CBEAM (not including the CBEAM offset)

logLog()

a logging object or None

Returns
vList[float, float, float]

the projection vector that defines the y-axis (jhat)

waList[float, float, float]

the offset vector at A

wbList[float, float, float]

the offset vector at B

xform(3, 3) float ndarray

a vstack of the [ihat, jhat, khat] axes

Notes

This section details the OFFT flag.

ABC or A-B-C (an example is G-G-G or B-G-G) while the slots are:

  • A -> orientation; values=[G, B]

  • B -> End A; values=[G, O]

  • C -> End B; values=[G, O]

and the values for A,B,C mean:
  • B -> basic

  • G -> global

  • O -> orientation

so for example G-G-G, that’s global for all terms. BOG means basic orientation, orientation end A, global end B

so now we’re left with what does basic/global/orientation mean? - basic -> the global coordinate system defined by cid=0 - global -> the local coordinate system defined by the

CD field on the GRID card, but referenced by the CBAR/CBEAM

  • orientation -> wa/wb are defined in the xform_offset (yz) frame;

    this is likely the easiest frame for a user

beam Module
Inheritance diagram of pyNastran.bdf.cards.elements.beam
defines:
  • CBEAM

  • BEAMOR

class pyNastran.bdf.cards.elements.beam.BEAMOR(pid, is_g0, g0, x, offt='GGG', comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

BEAMOR

PID

G0/X1

X2

X3

OFFT

BEAMOR

39

0.6

2.9

-5.87

GOG

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
raw_fields()[source]
type = 'BEAMOR'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.beam.CBEAM(eid, pid, nids, x, g0, offt='GGG', bit=None, pa=0, pb=0, wa=None, wb=None, sa=0, sb=0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bars.LineElement

1

2

3

4

5

6

7

8

9

CBEAM

EID

PID

GA

GB

X1

X2

X3

OFFT/BIT

PA

PB

W1A

W2A

W3A

W1B

W2B

W3B

SA

SB

or

1

2

3

4

5

6

7

8

9

CBEAM

EID

PID

GA

GB

G0

OFFT/BIT

PA

PB

W1A

W2A

W3A

W1B

W2B

W3B

SA

SB

bit is an MSC specific field NX 2020 added offt

Adds a CBEAM card

Parameters
pidint

property id

midint

material id

nidsList[int, int]

node ids; connected grid points at ends A and B

xList[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offtstr; default=’GGG’

Offset vector interpretation flag None : bit is active

bitfloat; default=None

Built-in twist of the cross-sectional axes about the beam axis at end B relative to end A. For beam p-elements ONLY! None : offt is active

pa / pbint; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wbList[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

sa / sbint; default=0

Scalar or grid point identification numbers for the ends A and B, respectively. The degrees-of-freedom at these points are the warping variables . SA and SB cannot be specified for beam p-elements

commentstr; default=’’

a comment for the card

offt/bit are MSC specific fields
Area()[source]

returns the area of the element face

Centroid()[source]
G0() → int[source]

gets G0

Ga() → int[source]

gets Ga/G1

Gb() → int[source]

gets Gb/G2

Mid()[source]
Nodes()[source]
Nsm()[source]

Placeholder method for the non-structural mass, \(nsm\)

classmethod add_card(card, beamor=None, comment='')[source]

Adds a CBEAM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

beamorBEAMOR() or None

defines the defaults

commentstr; default=’’

a comment for the card

center_of_mass()[source]

the centroid formuala is way more complicated if you consider the nonstructural mass axis

center_of_mass_xform()[source]

A B ———- ^ ^ | wa | wb | | 1———-2

1-2 are the nodes of the bar A-B defines the axis of the shear center

^ z

+–+ | | | | | | 2—> y | +–+ | | +—–+

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_axes(model: BDF) → Tuple[Any, Any, Any, Any, Any][source]

Gets the axes of a CBAR/CBEAM, while respecting the OFFT flag.

Notes

pyNastran.bdf.cards.elements.bars.rotate_v_wa_wb() for a description of the OFFT flag.

is_passed: bool out: (wa, wb, ihat, jhat, khat)

get_axes_by_nodes(model: BDF, pid_ref, node1, node2, xyz1, xyz2, log)[source]

Gets the axes of a CBAR/CBEAM, while respecting the OFFT flag.

Notes

pyNastran.bdf.cards.elements.bars.rotate_v_wa_wb() for a description of the OFFT flag.

get_edge_ids()[source]

Return the edge IDs

get_offt_bit_defaults()[source]

offt doesn’t exist in NX nastran

get_x_g0_defaults()[source]

X and G0 compete for the same fields, so the method exists to make it easier to write the card

Returns
x_g0varies

g0 : List[int, None, None] x : List[float, float, float]

Notes

Used by CBAR and CBEAM

property is_bit

is the bit flag active?

property is_offt

is the offt flag active?

property node_ids
property nodes
property nodes_ref
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CBEAM'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
pyNastran.bdf.cards.elements.beam._init_offt_bit(card, unused_eid: int, offt_default)[source]

offt doesn’t exist in NX nastran

beam_connectivity Module

Defines the faces for representing the PBARL/PBEAML cards as 3D objects instead of just 1D elements.

These functions intentionally do not handle offsets. Node 1/2 should be the offset/actual coordinates.

The following shapes are fully supported:
  • ROD

  • TUBE

  • BAR

  • BOX

  • L

  • H

  • I1 (I1 is handled correctly because it’s doubly symmetric)

  • T

  • T1

  • T2

  • Z

  • HEXA

The following shapes don’t do the shear center correctly:
  • CHAN

  • CHAN1

  • I

  • HAT

The following shapes aren’t supported:
  • CROSS

  • TUBE2

  • CHAN2 (will be a shear center issue)

  • BOX1 (will be a shear center issue)

  • HAT1 (will be a shear center issue)

  • DBOX (will be a shear center issue)

pyNastran.bdf.cards.elements.beam_connectivity.bar_faces(n1: int, n2: int, xform, dim1: Tuple[float, float], dim2: Tuple[float, float])[source]

^y |

0—–3 | | | |—-> z | | 1—–2

pyNastran.bdf.cards.elements.beam_connectivity.box_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^ y |

0———3 | | | 4—7 | | | + | |—> z | 5—6 | | | 1———2

pyNastran.bdf.cards.elements.beam_connectivity.chan1_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^y | 0——–7 ^ hall | | | | | | 5—–6 | ^ | | | | | hweb +–|--|——-> z | |

| | v
4—–3 | ^
| | | tflange

1——–2 v v

<–> tweb

<—–> bflange_out

<——–> bflange

pyNastran.bdf.cards.elements.beam_connectivity.chan_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^y | 0——–7 | | | | | 5—–6 | | | +–|--|——-> z

4—–3

1——–2

<—-> e/zsc

<——–> bflange

pyNastran.bdf.cards.elements.beam_connectivity.h_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^y |

0—-11 | 8—-7 | | | | | | 10—-9 | | | | | | | | +–|----|—> z | | | | | 3—–4 | | | | | | | | | 1—-2 5—-6

<—> dim1

<—-> 0.5*dim2 <—————> w_all

pyNastran.bdf.cards.elements.beam_connectivity.hat_faces(n1: int, n2: int, xform, dim1: Tuple[float, float], dim2: Tuple[float, float])[source]

<——–d3——->

0—————-11 ^ –y3

d4 | A | d4 |

<—-> +-d2-5——-6-d2-+ <—-> | –y2
B | | B | | d1

2——1—-+ +—-10—–9 | –y1 | C | | C | t=d2 | 3———–4 7———–8 v –y0 | -z0 |-z1 |-z2 |z2 |z1 |z0

pyNastran.bdf.cards.elements.beam_connectivity.hexa_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float], dim2: Tuple[float, float, float])[source]

^ y |

0—–5 ^ hall

/ | |

/ | |

1 +—–4—z | / |

/ |
2_______3 v

<-> wtri

<———–> wall

pyNastran.bdf.cards.elements.beam_connectivity.i1_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^y |

0———-11 - y3 | | 1—2 9—10 - y2

4—3 8—7 - y1 | | 5—–+—-6—–> z

pyNastran.bdf.cards.elements.beam_connectivity.i_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float, float, float], dim2: Tuple[float, float, float, float, float, float])[source]

^y |

0———-11 - y3 | | 1—2 9—10 - y2

4—3 8—7 - y1 | | 5—–+—-6—–> z

pyNastran.bdf.cards.elements.beam_connectivity.l_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^y |

0—–5 ^ hall | | | | | | | | | | | | | | 4—3 | ^ tflange | +——|——-> z | | 1———2 v v

<—-> tweb <———> bflange

pyNastran.bdf.cards.elements.beam_connectivity.rod_faces(n1: int, n2: int, xform, dim1: Tuple[float, float], dim2: Tuple[float, float])[source]

defines points in a circle with triangle based end caps

pyNastran.bdf.cards.elements.beam_connectivity.t1_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^ y |

6—5 ^ hall | | | | | | | |

0———-7 | | | ^ | +-|—> z | | tflange 1———-2 | | v

| |
| |

3—4 v

<———><—>

bfoot tweb

bflange

<———->

pyNastran.bdf.cards.elements.beam_connectivity.t2_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]
<–> tweb

^y |

0–7 ^ | | | hweb | | V

2–1 6–5 ^ hflange | |-|–>z 3——–4 v

bflange

<——–>

pyNastran.bdf.cards.elements.beam_connectivity.t_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^ y |

0———-7 | + |—-> z 1—2 5—6

3–4

bflange

<———->

8———-15 | + | 9—10 13–14

11-12

pyNastran.bdf.cards.elements.beam_connectivity.tube_faces(n1: int, n2: int, xform, dim1: Tuple[float, float], dim2: Tuple[float, float])[source]

defines a rod with a hole

pyNastran.bdf.cards.elements.beam_connectivity.z_faces(n1: int, n2: int, xform, dim1: Tuple[float, float, float, float], dim2: Tuple[float, float, float, float])[source]

^ y |

0——–7 ^ hall | | | | 1—-2 | | | ^

| | z | | hin
+-|—> | |
| | v
6—–5 |
| |

3———4 v <—> tweb

<—–> bfoot

<———–> bflange

beam_line_connectivity Module

Defines the faces for representing the PBARL/PBEAML cards as 3D objects instead of just 1D elements.

These functions intentionally do not handle offsets. Node 1/2 should be the offset/actual coordinates.

The following shapes are fully supported:
  • ROD

  • TUBE

  • BAR

  • BOX

  • L

  • H

  • I1 (I1 is handled correctly because it’s doubly symmetric)

  • T

  • T1

  • T2

  • Z

  • HEXA

The following shapes don’t do the shear center correctly:
  • CHAN

  • CHAN1

  • I

  • HAT

The following shapes aren’t supported:
  • CROSS

  • TUBE2

  • CHAN2 (will be a shear center issue)

  • BOX1 (will be a shear center issue)

  • HAT1 (will be a shear center issue)

  • DBOX (will be a shear center issue)

pyNastran.bdf.cards.elements.beam_line_connectivity.bar_lines(dim)[source]

^y |

0—-3 | | | |—-> z | | 1—-2

pyNastran.bdf.cards.elements.beam_line_connectivity.box_lines(dim)[source]

^ y |

0———3 | | | 4—7 | | | + | |—> z | 5—6 | | | 1———2

pyNastran.bdf.cards.elements.beam_line_connectivity.chan1_lines(n1, n2, xform, dim)[source]

^y | 0——–7 ^ hall | | | | | | 5—–6 | ^ | | | | | hweb +–|--|——-> z | |

| | v
4—–3 | ^
| | | tflange

1——–2 v v

<–> tweb

<—–> bflange_out

<——–> bflange

pyNastran.bdf.cards.elements.beam_line_connectivity.chan_faces(n1, n2, xform, dim)[source]

^y | 0——–7 | | | | | 5—–6 | | | +–|--|——-> z

4—–3

1——–2

<—-> e/zsc

<——–> bflange

pyNastran.bdf.cards.elements.beam_line_connectivity.h_lines(dim)[source]

^y |

0—-11 | 8—-7 | | | | | | 10—-9 | | | | | | | | +–|----|—> z | | | | | 3—–4 | | | | | | | | | 1—-2 5—-6

<—> dim1

<—-> 0.5*dim2 <—————> w_all

pyNastran.bdf.cards.elements.beam_line_connectivity.hat_lines(dim)[source]

<——–d3——->

0—————-11 ^ –y3

d4 | A | d4 |

<—-> +-d2-5——-6-d2-+ <—-> | –y2
B | | B | | d1

2——1—-+ +—-10—–9 | –y1 | C | | C | t=d2 | 3———–4 7———–8 v –y0 | -z0 |-z1 |-z2 |z2 |z1 |z0

pyNastran.bdf.cards.elements.beam_line_connectivity.hexa_lines(dim)[source]

^ y |

0—–5 ^ hall

/ | |

/ | |

1 +—–4—z | / |

/ |
2_______3 v

<-> wtri

<———–> wall

pyNastran.bdf.cards.elements.beam_line_connectivity.i1_lines(dim)[source]

^y |

0———-11 - y3 | | 1—2 9—10 - y2

4—3 8—7 - y1 | | 5—–+—-6—–> z

pyNastran.bdf.cards.elements.beam_line_connectivity.i_lines(dim)[source]

^y |

0———-11 - y3 | | 1—2 9—10 - y2

4—3 8—7 - y1 | | 5—–+—-6—–> z

pyNastran.bdf.cards.elements.beam_line_connectivity.l_lines(dim)[source]

^y |

0—–5 ^ hall | | | | | | | | | | | | | | 4—3 | ^ tflange | +——|——-> z | | 1———2 v v

<—-> tweb <———> bflange

pyNastran.bdf.cards.elements.beam_line_connectivity.rod_faces(n1, n2, xform, dim1, dim2)[source]

defines points in a circle with triangle based end caps

pyNastran.bdf.cards.elements.beam_line_connectivity.t1_lines(dim)[source]

^ y |

6—5 ^ hall | | | | | | | |

0———-7 | | | ^ | +-|—> z | | tflange 1———-2 | | v

| |
| |

3—4 v

<———><—>

bfoot tweb

bflange

<———->

pyNastran.bdf.cards.elements.beam_line_connectivity.t2_lines(n1, n2, xform, dim)[source]

^y |

0–7 | | | |

2–1 6–5 | |—->z 3——–4

bflange

<———->

pyNastran.bdf.cards.elements.beam_line_connectivity.t_lines(dim)[source]

^ y |

0———-7 | + |—-> z 1—2 5—6

3–4

bflange

<———->

pyNastran.bdf.cards.elements.beam_line_connectivity.tube_faces(n1, n2, xform, dim1, dim2)[source]

defines a rod with a hole

pyNastran.bdf.cards.elements.beam_line_connectivity.z_lines(dim)[source]

^ y |

0——–7 ^ hall | | | | 1—-2 | | | ^

| | z | | hin
+-|—> | |
| | v
6—–5 |
| |

3———4 v <—> tweb

<—–> bfoot

<———–> bflange

bush Module
Inheritance diagram of pyNastran.bdf.cards.elements.bush

All bush elements are defined in this file. This includes:

  • CBUSH

  • CBUSH1D

  • CBUSH2D

All bush elements are BushElement and Element objects.

class pyNastran.bdf.cards.elements.bush.BushElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

Cid()[source]
Mass()[source]
get_edge_ids()[source]

Return the edge IDs

class pyNastran.bdf.cards.elements.bush.CBUSH(eid, pid, nids, x, g0, cid=None, s=0.5, ocid=-1, si=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bush.BushElement

Generalized Spring-and-Damper Connection

Defines a generalized spring-and-damper structural element that may be nonlinear or frequency dependent.

1

2

3

4

5

6

7

8

9

CBUSH

EID

PID

GA

GB

GO/X1

X2

X3

CID

S

OCID

S1

S2

S3

Creates a CBUSH card

Parameters
eidint

Element id

pidint

Property id (PBUSH)

nidsList[int, int]

node ids; connected grid points at ends A and B The nodes may be coincident, but then cid is required.

xList[float, float, float]; None
Listthe directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use g0

g0int/None
intthe directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use x

cidint; default=None

Element coordinate system identification. A 0 means the basic coordinate system. If CID is blank, then the element coordinate system is determined from GO or Xi.

s: float; default=0.5

Location of spring damper (0 <= s <= 1.0)

ocidint; default=-1

Coordinate system identification of spring-damper offset. (Integer > -1; Default = -1, which means the offset point lies on the line between GA and GB)

siList[float, float, float]; default=None

Components of spring-damper offset in the OCID coordinate system if OCID > 0. None : [None, None, None]

commentstr; default=’’

a comment for the card

Cid()[source]
G0()[source]
Ga()[source]
Gb()[source]
OCid()[source]
_get_x_g0()[source]
_properties = ['_field_map']
classmethod add_card(card, comment='')[source]

Adds a CBUSH card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CBUSH'
uncross_reference() → None[source]

Removes cross-reference links

update_by_cp_name(cp_name, value)[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.bush.CBUSH1D(eid, pid, nids, cid=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bush.BushElement

dummy init

Ga()[source]
Gb()[source]
classmethod add_card(card, comment='')[source]

Adds a CBUSH1D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

property node_ids
property nodes
property nodes_ref
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CBUSH1D'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.bush.CBUSH2D(eid, pid, nids, cid=0, plane='XY', sptid=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.bush.BushElement

2-D Linear-Nonlinear Connection Defines the connectivity of a two-dimensional Linear-Nonlinear element.

dummy init

Ga()[source]
Gb()[source]
classmethod add_card(card, comment='')[source]

Adds a CBUSH2D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids, encoding='ascii')[source]

exports the elements in a vectorized way

property node_ids
property nodes
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CBUSH2D'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

damper Module
Inheritance diagram of pyNastran.bdf.cards.elements.damper

All damper elements are defined in this file. This includes:

  • CDAMP1

  • CDAMP2

  • CDAMP3

  • CDAMP4

  • CDAMP5

  • CVISC

All damper elements are DamperElement and Element objects.

class pyNastran.bdf.cards.elements.damper.CDAMP1(eid, pid, nids, c1=0, c2=0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.damper.LineDamper

Creates a CDAMP1 card

Parameters
eidint

element id

pidint

property id (PDAMP)

nidsList[int, int]

node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

B()[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CDAMP1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.damper.CDAMP2(eid, b, nids, c1=0, c2=0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.damper.LineDamper

Creates a CDAMP2 card

Parameters
eidint

element id

bfloat

damping

nidsList[int, int]

SPOINT ids node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

B()[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

b = None

Value of the scalar damper (Real)

c1 = None

component number

cp_name_map = {'B': 'b'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CDAMP2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.damper.CDAMP3(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.damper.LineDamper

1

2

3

4

5

CDAMP3

EID

PID

S1

S2

Creates a CDAMP3 card

Parameters
eidint

element id

pidint

property id (PDAMP)

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

B()[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CDAMP3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.damper.CDAMP4(eid, b, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.damper.LineDamper

Creates a CDAMP4 card

Parameters
eidint

element id

bfloat

damping

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

B()[source]
classmethod add_card(card, icard=0, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CDAMP4'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.damper.CDAMP5(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.damper.LineDamper

Defines a damping element that refers to a material property entry and connection to grid or scalar points.

Creates a CDAMP5 card

Parameters
eidint

element id

pidint

property id (PDAMP5)

nidsList[int, int]

GRID/SPOINT ids

commentstr; default=’’

a comment for the card

B()[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CDAMP5'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.damper.CVISC(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.damper.LineDamper

Viscous Damper Connection Defines a viscous damper element.

1

2

3

4

5

CVISC

EID

PID

G1

G2

Creates a CVISC card

Parameters
eidint

element id

pidint

property id (PVISC)

nidsList[int, int]

GRID ids

commentstr; default=’’

a comment for the card

B()[source]
classmethod add_card(card, comment='')[source]

Adds a CVISC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CVISC'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.damper.DamperElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

class pyNastran.bdf.cards.elements.damper.LineDamper[source]

Bases: pyNastran.bdf.cards.elements.damper.DamperElement

dummy init

elements Module
Inheritance diagram of pyNastran.bdf.cards.elements.elements

All ungrouped elements are defined in this file. This includes:

  • CFAST

  • CGAP

  • CRAC2D

  • CRAC3D

  • PLOTEL

  • GENEL

All ungrouped elements are Element objects.

class pyNastran.bdf.cards.elements.elements.CFAST(eid, pid, Type, ida, idb, gs=None, ga=None, gb=None, xs=None, ys=None, zs=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Element

defines the CFAST element

dummy init

Ga()[source]

Gets the GA node

Gb()[source]

Gets the GB node

Gs()[source]

Gets the GS node

_gs_xyz() → Tuple[Optional[int], Optional[float], Optional[float], Optional[float]][source]
classmethod _init_from_empty()[source]
_properties = ['node_ids', 'nodes']
classmethod add_card(card, comment='')[source]

Adds a CFAST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp_name_map = {}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_edge_ids()[source]
property node_ids

gets all the node ids used on the CFAST (Gs, Ga, Gb)

property nodes

gets all the nodes used on the CFAST (Gs, Ga, Gb)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CFAST'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.elements.CGAP(eid, pid, nids, x, g0, cid=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Element

1

2

3

4

5

6

7

8

9

CGAP

EID

PID

GA

GB

X1

X2

X3

CID

CGAP

17

2

110

112

5.2

0.3

-6.1

or

1

2

3

4

5

6

7

8

9

CGAP

EID

PID

GA

GB

GO

CID

CGAP

17

2

110

112

13

Creates a CGAP card

Parameters
eidint

Element ID

pidint

Property ID (PGAP)

nidsList[int, int]

node ids; connected grid points at ends A and B

xList[float, float, float]

Components of the orientation vector, from GA, in the displacement coordinate system at GA

g0int

GO Alternate method to supply the orientation vector using grid point GO. Direction of is from GA to GO

cidint; default=None

Element coordinate system identification number. CID must be specified if GA and GB are coincident (distance from GA to GB < 10^-4)

commentstr; default=’’

a comment for the card

Cid()[source]
G0()[source]
Ga()[source]
Gb()[source]
classmethod add_card(card, comment='')[source]

Adds a CGAP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
property nodes
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CGAP'
uncross_reference() → None[source]

Removes cross-reference links

update_by_cp_name(cp_name, value)[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.elements.CRAC2D(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.elements.CrackElement

dummy init

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CRAC2D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

get_edge_ids()[source]
property node_ids
raw_fields()[source]
type = 'CRAC2D'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.elements.CRAC3D(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.elements.CrackElement

dummy init

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CRAC3D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

get_edge_ids()[source]
property node_ids
raw_fields()[source]
type = 'CRAC3D'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.elements.CrackElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'Crack'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.elements.elements.GENEL(eid, ul, ud, k, z, s=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

GENEL

EID

UI1

CI1

UI2

CI2

UI3

CI3

UI4

CI4

UI5

CI5

etc.

UD

UD1

CD1

UD2

CD2

etc.

K/Z

KZ11

KZ21

KZ31

etc.

KZ22

KZ32

etc.

KZ33

KZ43

etc.

S

S11

S12

etc.

S21

etc.

GENEL

629

1

1

13

4

42

0

24

2

UD

6

2

33

0

Z

1.0

2.0

3.0

4.0

5.0

6.0

7.0

8.0

9.0

10.0

S

1.5

2.5

3.5

4.5

5.5

6.5

7.5

8.5

creates a GENEL card

The required input is the {UL} list and the lower triangular portion of [K] or [Z]. Additional input may include the {UD} list and [S]. If [S] is input, must also be input. If {UD} is input but [S] is omitted, [S] is internally calculated. In this case, {UD} must contain six and only six degrees-of freedom.

_finalize_hdf5(encoding)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids', 'ul_nodes', 'ud_nodes', 'nodes']
classmethod add_card(card, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
property nodes
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'GENEL'
property ud_nodes

gets the {UD} nodes

property ul_nodes

gets the {UL} nodes

uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.elements.PLOTEL(eid, nodes, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a 1D dummy element used for plotting.

This element is not used in the model during any of the solution phases of a problem. It is used to simplify plotting of structures with large numbers of colinear grid points, where the plotting of each grid point along with the elements connecting them would result in a confusing plot.

1

2

3

4

PLOTEL

EID

G1

G2

Adds a PLOTEL card

Parameters
eidint

Element ID

nodesList[int, int]

Unique GRID point IDs

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, icard: int, comment='')[source]

Adds a PLOTEL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'PLOTEL'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.elements.elements._get_genel_offset(n_ul)[source]

we add to to represent the GENEL,eid fields

pyNastran.bdf.cards.elements.elements._read_genel_fields_until_char_blank(card_fields, istart)[source]

somewhat loose parser helper function for GENEL

mass Module
Inheritance diagram of pyNastran.bdf.cards.elements.mass

All mass elements are defined in this file. This includes:

  • CMASS1

  • CMASS2

  • CMASS3

  • CMASS4

  • CONM1

  • CONM2

All mass elements are PointMassElement and Element objects.

class pyNastran.bdf.cards.elements.mass.CMASS1(eid: int, pid: int, nids: List[int], c1: int = 0, c2: int = 0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.elements.mass.PointMassElement

Defines a scalar mass element.

1

2

3

4

5

6

7

CMASS1

EID

PID

G1

C1

G2

C2

Creates a CMASS1 card

Parameters
eidint

element id

pidint

property id (PMASS)

nidsList[int, int]

node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

Centroid()[source]

Centroid is assumed to be c=(g1+g2)/2. If g2 is blank, then the centroid is the location of g1.

G1()[source]
G2()[source]
Mass()[source]
Pid()[source]

Gets the Property ID of an element

Returns
pidint

the Property ID

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CMASS1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CMASS1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.mass.CMASS2(eid, mass, nids, c1, c2, comment='')[source]

Bases: pyNastran.bdf.cards.elements.mass.PointMassElement

Defines a scalar mass element without reference to a property entry.

1

2

3

4

5

6

7

CMASS2

EID

M

G1

C1

G2

C2

Creates a CMASS2 card

Parameters
eidint

element id

massfloat

mass

nidsList[int, int]

node ids

c1 / c2int; default=None

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

Centroid()[source]

Centroid is assumed to be c=(g1+g2)/2. If g2 is blank, then the centroid is the location of g1.

G1()[source]
G2()[source]
Mass()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CMASS2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cp_name_map = {'M': 'mass'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the masses in a vectorized way

property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CMASS2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.mass.CMASS3(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.mass.PointMassElement

Defines a scalar mass element that is connected only to scalar points.

1

2

3

4

5

CMASS3

EID

PID

S1

S2

Creates a CMASS3 card

Parameters
eidint

element id

pidint

property id (PMASS)

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

Centroid()[source]
Mass()[source]
S1()[source]
S2()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CMASS3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
type = 'CMASS3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.mass.CMASS4(eid, mass, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.mass.PointMassElement

Defines a scalar mass element that is connected only to scalar points, without reference to a property entry

1

2

3

4

5

CMASS4

EID

M

S1

S2

Creates a CMASS4 card

Parameters
eidint

element id

massfloat

SPOINT mass

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

Centroid()[source]
Mass()[source]
S1()[source]
S2()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, icard=0, comment='')[source]
center_of_mass()[source]
cp_name_map = {'M': 'mass'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CMASS4'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.mass.CONM1(eid, nid, mass_matrix, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.mass.PointMassElement

Concentrated Mass Element Connection, General Form Defines a 6 x 6 symmetric mass matrix at a geometric grid point

1

2

3

4

5

6

7

8

9

CONM1

EID

G

CID

M11

M21

M22

M31

M32

M33

M41

M42

M43

M44

M51

M52

M53

M54

M55

M61

M62

M63

M64

M65

M66

Creates a CONM1 card

Parameters
eidint

element id

nidint

the node to put the mass matrix

mass_matrix(6, 6) float ndarray

the 6x6 mass matrix, M

cidint; default=0

the coordinate system for the mass matrix

commentstr; default=’’

a comment for the card

::
[M] = [M11 M21 M31 M41 M51 M61]

[ M22 M32 M42 M52 M62] [ M33 M43 M53 M63] [ M44 M54 M64] [ Sym M55 M65] [ M66]

static Centroid()[source]
Cid()[source]
static Mass()[source]
MassMatrix()[source]
Nid()[source]
_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CONM2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CONM1'
uncross_reference() → None[source]

Removes cross-reference links

update_by_cp_name(name, value)[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.mass.CONM2(eid, nid, mass, cid=0, X=None, I=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.mass.PointMassElement

1

2

3

4

5

6

7

8

CONM2

EID

NID

CID

MASS

X1

X2

X3

I11

I21

I22

I31

I32

I33

CONM2

501274

11064

132.274

Creates a CONM2 card

Parameters
eidint

element id

nidint

node id

massfloat

the mass of the CONM2

cidint; default=0

coordinate frame of the offset (-1=absolute coordinates)

X(3, ) List[float]; default=None -> [0., 0., 0.]

xyz offset vector relative to nid

I(6, ) List[float]; default=None -> [0., 0., 0., 0., 0., 0.]

mass moment of inertia matrix about the CG I11, I21, I22, I31, I32, I33 = I

commentstr; default=’’

a comment for the card

Centroid()[source]

This method seems way more complicated than it needs to be thanks to all these little caveats that don’t seem to be supported.

Centroid_no_xref(model: BDF) → np.ndarray[source]

This method seems way more complicated than it needs to be thanks to all these little caveats that don’t seem to be supported.

Cid()[source]
I = None

Mass moments of inertia measured at the mass center of gravity in the coordinate system defined by field 4. If CID = -1, the basic coordinate system is implied. (Real) I11, I21, I22, I31, I32, I33 = I

Inertia()[source]

Returns the 3x3 inertia matrix .. warning:: doesnt handle offsets or coordinate systems

Mass()[source]
Nid()[source]
X = None

Offset distances from the grid point to the center of gravity of the mass in the coordinate system defined in field 4, unless CID = -1, in which case X1, X2, X3 are the coordinates, not offsets, of the center of gravity of the mass in the basic coordinate system. (Real)

classmethod add_card(card, comment='')[source]

Adds a CONM2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass() → numpy.ndarray[source]
centroid_mass_inertia() → Tuple[numpy.ndarray, float, numpy.ndarray][source]
cid = None

Coordinate system identification number. For CID of -1; see X1, X2, X3 below. (Integer > -1; Default = 0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element identification number. (0 < Integer < 100,000,000)

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

mass = None

Mass value. (Real)

nid = None

Grid point identification number. (Integer > 0)

property node_ids
offset(xyz_nid)[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CONM2'
uncross_reference() → None[source]

Removes cross-reference links

update_by_cp_name(name, value)[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.mass.PointMassElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

repr_fields() → List[Union[int, float, str, None]][source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double: bool = False) → str[source]
pyNastran.bdf.cards.elements.mass.is_positive_semi_definite(A, tol=1e-08)[source]

is the 3x3 matrix positive within tolerance

rigid Module
Inheritance diagram of pyNastran.bdf.cards.elements.rigid

All rigid elements are defined in this file. This includes:

  • RBAR

  • RBAR1

  • RBE1

  • RBE2

  • RBE3

  • RSPLINE

  • RSSCON

All rigid elements are RigidElement and Element objects.

class pyNastran.bdf.cards.elements.rigid.RBAR(eid, nids, cna, cnb, cma, cmb, alpha=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

Defines a rigid bar with six degrees-of-freedom at each end.

1

2

3

4

5

6

7

8

9

RBAR

EID

GA

GB

CNA

CNB

CMA

CMB

ALPHA

RBAR

5

1

2

123456

6.5-6

Creates a RBAR element

Parameters
eidint

element id

nidsList[int, int]

node ids; connected grid points at ends A and B

cna / cnbstr

independent DOFs in ‘123456’

cma / cmbstr

dependent DOFs in ‘123456’

alphafloat; default=0.0

coefficient of thermal expansion

commentstr; default=’’

a comment for the card

Ga()[source]
Gb()[source]
classmethod _init_from_empty()[source]
_properties = ['dependent_nodes', 'independent_nodes', 'nodes']
classmethod add_card(card, comment='')[source]

Adds a RBAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

property nodes
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RBAR'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RBAR1(eid, nids, cb, alpha=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

1

2

3

4

5

6

RBAR1

EID

GA

GB

CB

ALPHA

RBAR1

5

1

2

123

6.5-6

dummy init

Ga()[source]
Gb()[source]
classmethod _init_from_empty()[source]
_properties = ['dependent_nodes', 'independent_nodes', 'nodes']
classmethod add_card(card, comment='')[source]

Adds a RBAR1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RBAR1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RBE1(eid, Gni, Cni, Gmi, Cmi, alpha=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

1

2

3

4

5

6

7

8

RBE1

EID

GN1

CN1

GN2

CN2

GN3

CN3

GN4

CN4

GN5

CN5

GN6

CN6

UM

GM1

CM1

GM2

CM2

GM3

CM3

GM4

CM4

etc

ALPHA

RBE1

59

59

123

60

456

UM

61

246

Creates an RBE1 element

Parameters
eidint

element id

GniList[int]

independent node ids

CniList[str]

the independent components (e.g., ‘123456’)

GmiList[int]

dependent node ids

CmiList[str]

the dependent components (e.g., ‘123456’)

alphafloat; default=0.

thermal expansion coefficient

commentstr; default=’’

a comment for the card

property Gmi_node_ids
property Gni_node_ids
classmethod _init_from_empty()[source]
_properties = ['Gmi_node_ids', 'Gni_node_ids', 'dependent_nodes', 'independent_nodes']
classmethod add_card(card, comment='')[source]

Adds a RBE1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RBE1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RBE2(eid: int, gn: int, cm: str, Gmi: List[int], alpha: float = 0.0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

1

2

3

4

5

6

7

8

9

RBE2

EID

GN

CM

GM1

GM2

GM3

GM4

GM5

GM6

GM7

GM8

etc.

ALPHA

TREF

TREF was added in MSC 2021 (not supported)

Creates an RBE2 element

Parameters
eidint

element id

gnint

Identification number of grid point to which all six independent degrees-of-freedom for the element are assigned.

cmstr

Component numbers of the dependent degrees-of-freedom in the global coordinate system at grid points GMi.

GmiList[int]

dependent nodes

alphafloat; default=0.0

thermal expansion coefficient

property Gmi_node_ids
Gn()[source]
classmethod _init_from_empty()[source]
_properties = ['Gmi_node_ids', 'dependent_nodes', 'independent_nodes']
classmethod add_card(card, comment='')[source]

Adds a RBE2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cm = None

Component numbers of the dependent degrees-of-freedom in the global coordinate system at grid points GMi. (Integers 1 through 6 with no embedded blanks.)

convert_to_mpc(mpc_id)[source]
\[-A_i u_i + A_j u_j = 0\]

where \(u_i\) are the base DOFs (max=6)

1

2

3

4

5

6

7

8

MPC

sid

g1

c1

a1

g2

c2

a2

RBE2

eid

gn

cm

g1

g2

g3

g4

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

eid = None

Element identification number

gn = None

Identification number of grid point to which all six independent degrees-of-freedom for the element are assigned. (Integer > 0)

property independent_nodes

gets the independent node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RBE2'
uncross_reference() → None[source]

Removes cross-reference links

update(maps)[source]

Updates the card without xref

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.rigid.RBE3(eid: int, refgrid: int, refc: str, weights: List[float], comps: List[str], Gijs: List[int], Gmi=None, Cmi=None, alpha: float = 0.0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

1

2

3

4

5

6

7

8

9

RBE3

EID

REFGRID

REFC

WT1

C1

G1,1

G1,2

G1,3

WT2

C2

G2,1

G2,2

etc.

WT3

C3

G3,1

G3,2

etc.

WT4

C4

G4,1

G4,2

etc.

‘UM’

GM1

CM1

GM2

CM2

GM3

CM3

GM4

CM4

GM5

CM5

etc.

‘ALPHA’

ALPHA

Creates an RBE3 element

Parameters
eidint

element id

refgridint

dependent node

refcstr

dependent components for refgrid???

GiJsList[int, …, int]

independent nodes

compsList[str, …, str]

independent components

weightsList[float, …, float]

weights for the importance of the DOF

GmiList[int, …, int]; default=None -> []

dependent nodes / UM Set

CmiList[str, …, str]; default=None -> []

dependent components / UM Set

alphafloat; default=0.0

thermal expansion coefficient

commentstr; default=’’

a comment for the card

property Gijs_node_ids
property Gmi_node_ids
classmethod _init_from_empty()[source]
_properties = ['wt_cg_groups', 'ref_grid_id', 'Gijs_node_ids', 'dependent_nodes', 'independent_nodes']
classmethod add_card(card, comment='')[source]

Adds a RBE3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

raw_fields()[source]
property ref_grid_id
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, debug: bool = True) → int[source]
type = 'RBE3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

property wt_cg_groups
class pyNastran.bdf.cards.elements.rigid.RROD(eid, nids, cma=None, cmb=None, alpha=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

Rigid Pin-Ended Element Connection Defines a pin-ended element that is rigid in translation

1

2

3

4

5

6

7

RROD

EID

GA

GB

CMA

CMB

ALPHA

RROD

5

1

2

6.5-6

Creates a RROD element

Parameters
eidint

element id

nidsList[int, int]

node ids; connected grid points at ends A and B

cma / cmbstr; default=None

dependent DOF must be in [None, ‘1’, ‘2’, ‘3’] one of them must be None

alphafloat; default=0.0

coefficient of thermal expansion

commentstr; default=’’

a comment for the card

Ga()[source]
Gb()[source]
classmethod _init_from_empty()[source]
_properties = ['dependent_nodes', 'independent_nodes']
classmethod add_card(card, comment='')[source]

Adds a RROD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RROD'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RSPLINE(eid, independent_nid, dependent_nids, dependent_components, diameter_ratio=0.1, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

Creates a RSPLINE card, which uses multipoint constraints for the interpolation of displacements at grid points

Parameters
eidint

element id

independent_nidint

the independent node id

dependent_nidsList[int]

the dependent node ids

dependent_componentsList[str]

Components to be constrained

diameter_ratiofloat; default=0.1

Ratio of the diameter of the elastic tube to the sum of the lengths of all segments

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['dependent_nodes', 'independent_nodes']

Defines multipoint constraints for the interpolation of displacements at grid points.

1

2

3

4

5

6

7

8

9

RSPLINE

EID

D/L

G1

G2

C2

G3

C3

G4

C4

G5

C5

G6

etc.

classmethod add_card(card, comment='')[source]

Adds a RSPLINE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RSPLINE'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RSSCON(eid, rigid_type, shell_eid=None, solid_eid=None, a_solid_grids=None, b_solid_grids=None, shell_grids=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

Creates an RSSCON card, which defines multipoint constraints to model clamped connections of shell-to-solid elements.

Parameters
eidint

element id

rigid_typestr

GRID/ELEM

shell/solid_eidint; default=None

the shell/solid element id (if rigid_type=ELEM)

shell/solid_gridsList[int, int]; default=None

the shell/solid node ids (if rigid_type=GRID)

commentstr; default=’’

a comment for the card

B—-S—-A
EidShell()[source]
EidSolid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RSSCON card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property dependent_nodes

gets the dependent node ids

property independent_nodes

gets the independent node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'RSSCON'

Defines multipoint constraints to model clamped connections of shell-to-solid elements.

1

2

3

4

5

6

7

8

9

RSSCON

RBID

TYPE

ES1

EA1

EB1

ES2

EA2

EB2

RSSCON

110

GRID

11

12

13

14

15

16

RSSCON

111

GRID

31

74

75

RSSCON

115

ELEM

311

741

RSSCON

116

INTC

2

1

3

uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RigidElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

cross_reference(model: BDF) → None[source]
rods Module
Inheritance diagram of pyNastran.bdf.cards.elements.rods
class pyNastran.bdf.cards.elements.rods.CONROD(eid, mid, nids, A=0.0, j=0.0, c=0.0, nsm=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rods.RodElement

1

2

3

4

5

6

7

8

9

CONROD

EID

N1

N2

MID

A

J

C

NSM

Creates a CONROD card

Parameters
eidint

element id

midint

material id

nidsList[int, int]

node ids

Afloat

area

jfloat; default=0.

polar moment of inertia

cfloat; default=0.

stress factor

nsmfloat; default=0.

non-structural mass per unit length

commentstr; default=’’

a comment for the card

Area()[source]
C()[source]

torsional constant

Centroid()[source]

Get the centroid of the element (save as the center of mass for the CONROD)

E()[source]

returns the Young’s Modulus, :math:`E`$

G()[source]

returns the Shear Modulus, \(G\)

J()[source]

returns the Polar Moment of Inertia, \(J\)

Length()[source]

Gets the length of the element.

\[L = \sqrt{ (n_{x2}-n_{x1})^2+(n_{y2}-n_{y1})^2+(n_{z2}-n_{z1})^2 }\]
MassPerLength()[source]

Gets the mass per length of the CONROD

Mid()[source]
Nsm()[source]

Placeholder method for the non-structural mass

Pid()[source]

Spoofs the property id for the CONROD

Rho()[source]

returns the material density f$ rho f$

classmethod add_card(card, comment='')[source]

Adds a CONROD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]

Get the center of mass of the element (save as the centroid for the CONROD)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

pid = -10
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CONROD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rods.CROD(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rods.RodElement

1

2

3

4

5

CROD

EID

PID

N1

N2

Creates a CROD card

Parameters
eidint

element id

pidint

property id (PROD)

nidsList[int, int]

node ids

commentstr; default=’’

a comment for the card

Area()[source]
C()[source]
Centroid()[source]
E()[source]
G()[source]
J()[source]
Length()[source]

Gets the length of the element.

\[L = \sqrt{ (n_{x2}-n_{x1})^2+(n_{y2}-n_{y1})^2+(n_{z2}-n_{z1})^2 }\]
MassPerLength()[source]
Mid()[source]
Nsm()[source]
Rho()[source]

returns the material density f$ rho f$

classmethod add_card(card, comment='')[source]

Adds a CROD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]
classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CROD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.rods.CTUBE(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rods.RodElement

1

2

3

4

5

CTUBE

EID

PID

N1

N2

Creates a CTUBE card

Parameters
eidint

element id

pidint

property id

nidsList[int, int]

node ids

commentstr; default=’’

a comment for the card

Area() → float[source]
Centroid()[source]
E() → float[source]
G() → float[source]
J()[source]
Length()[source]

Gets the length of the element.

\[L = \sqrt{ (n_{x2}-n_{x1})^2+(n_{y2}-n_{y1})^2+(n_{z2}-n_{z1})^2 }\]
Mass() → float[source]

get the mass of the element.

\[m = \left( \rho A + nsm \right) L\]
Mid()[source]
Nsm() → float[source]
Rho()[source]

returns the material density f$ rho f$

classmethod add_card(card, comment='')[source]

Adds a CTUBE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]
classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTUBE'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.rods.RodElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

Mass()[source]

get the mass of the element.

\[m = \left( \rho A + nsm \right) L\]
get_edge_ids()[source]
property node_ids
shell Module
Inheritance diagram of pyNastran.bdf.cards.elements.shell

All shell elements are defined in this file. This includes:

  • CTRIA3

  • CTRIA6

  • CSHEAR

  • CQUAD

  • CQUAD4

  • CQUAD8

  • CQUADR

  • CPLTSN3

  • CPLSTN4

  • CPLSTN6

  • CPLSTN8

  • SNORM

All tris are TriShell, ShellElement, and Element objects. All quads are QuadShell, ShellElement, and Element objects.

class pyNastran.bdf.cards.elements.shell.CTRIA3(eid: int, pid: int, nids: List[int], zoffset: float = 0.0, theta_mcid: Union[int, float] = 0.0, tflag: int = 0, T1: Optional[float] = None, T2: Optional[float] = None, T3: Optional[float] = None, comment: str = '')[source]

Bases: pyNastran.bdf.cards.elements.shell.TriShell

1

2

3

4 | 5

6

7

8

CTRIA3

EID

PID

N1 | N2

N3

THETA/MCID

ZOFFSET

TFLAG

T1

T2

T3

Creates a CTRIA3 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

_get_repr_defaults()[source]
_properties = ['cp_name_map', '_field_map']
classmethod add_card(card: str, comment: str = '')[source]

Adds a CTRIA3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp_name_map = {'T1': 'T1', 'T2': 'T2', 'T3': 'T3'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]

Flips normal of element.

   1           1
  * *   -->   * *
 *   *       *   *
2-----3     3-----2
get_thickness_scale()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTRIA3'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CTRIA6(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.TriShell

1

2

3

4 | 5

6

7

8

9

CTRIA3

EID

PID

N1 | N2

N3

N4

N5

N6

THETA/MCID

ZOFFSET

T1

T2

T3

Creates a CTRIA6 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int/None, int/None, int/None]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

Area()[source]

Get the area, \(A\).

\[A = \frac{1}{2} (n_0-n_1) \times (n_0-n_2)\]
AreaCentroidNormal()[source]

Returns area, centroid, normal as it’s more efficient to do them together

Centroid()[source]

Get the centroid.

\[CG = \frac{1}{3} (n_1+n_2+n_3)\]
Normal()[source]

Get the normal vector, \(n\).

\[n = \frac{(n_0-n_1) \times (n_0-n_2)}{\lvert (n_0-n_1) \times (n_0-n_2) \lvert}\]
Thickness()[source]

Returns the thickness, \(t\)

_get_repr_defaults()[source]
classmethod add_card(card, comment='')[source]

Adds a CTRIA6 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]

Flips normal of element.

    1                1
    **               **
   *  *             *  *
  4    6   -->     6    4
 *      *         *      *
2----5---3       3----5---2
get_thickness_scale()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTRIA6'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CSHEAR(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.QuadShell

1

2

3

4 | 5

6

7

CSHEAR

EID

PID

N1 | N2

N3

N4

Creates a CSHEAR card

Parameters
eidint

element id

pidint

property id (PSHEAR)

nidsList[int, int, int, int]

node ids

commentstr; default=’’

a comment for the card

Area() → float[source]
\[A = \frac{1}{2} \lvert (n_1-n_3) \times (n_2-n_4) \rvert\]

where a and b are the quad’s cross node point vectors

AreaCentroid() → Tuple[NDArray3float, NDArray3float][source]
::

1—–2 | /| | A1/ | | / | |/ A2 | 4—–3

AreaCentroidNormal() → Tuple[NDArray3float, NDArray3float, NDArray3float][source]
Centroid() → NDArray3float[source]
G() → float[source]
Mass() → float[source]
\[m = \frac{m}{A} A \f]\]
Normal()[source]
Thickness() → float[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CSHEAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

center_of_mass() → NDArray3float[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1---2       1---4
|   |  -->  |   |
|   |       |   |
4---3       2---3
property node_ids
raw_fields() → List[Union[str, int]][source]
repr_fields() → List[Union[str, int]][source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CSHEAR'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CQUAD(eid, pid, nids, theta_mcid=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.QuadShell

1

2

3

4

5

6

7

8

9

CQUAD

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

G9

THETA/MCID

theta_mcid is an MSC specific variable

Creates a CQUAD card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int, int/None, int/None,

int/None, int/None, int/None]

node ids

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

commentstr; default=’’

a comment for the card

Area()[source]
\[A = \frac{1}{2} \lvert (n_1-n_3) \times (n_2-n_4) \rvert\]

where a and b are the quad’s cross node point vectors

Mass() → float[source]
\[m = \frac{m}{A} A \f]\]
Thickness() → float[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUAD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal() → None[source]
1--5--2       1--8--4
|     |  -->  |     |
8  9  6       5  9  7
|     |       |     |
4--7--3       2--6--3
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CQUAD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CQUAD4(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.QuadShell

1

2

3

4 | 5

6

7

8

9

CQUAD4

EID

PID

N1 | N2

N3

N4

THETA/MCID

ZOFFSET

TFLAG

T1

T2

T3

T4

Creates a CQUAD4 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

_properties = ['cp_name_map', '_field_map']
classmethod add_card(card, comment='')[source]

Adds a CQUAD4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp_name_map = {'T1': 'T1', 'T2': 'T2', 'T3': 'T3', 'T4': 'T4'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1---2       1---4
|   |  -->  |   |
|   |       |   |
4---3       2---3
get_thickness_scale()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

split_to_ctria3(eida, eidb)[source]

Splits a CQUAD4 into two CTRIA3s

Todo

doesn’t consider theta_mcid if a float correctly (use an integer)

Todo

doesn’t optimize the orientation of the nodes yet…

type = 'CQUAD4'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_as_ctria3(new_eid)[source]

triangle - 012 triangle - 023

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CQUAD8(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.QuadShell

1

2

3

4

5

6

7

8

9

CQUAD8

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

T1

T2

T3

T4

THETA/MCID

ZOFFS

TFLAG

Creates a CQUAD8 card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int, int/None, int/None, int/None, int/None]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

Area() → float[source]
\[A = \frac{1}{2} \lvert (n_1-n_3) \times (n_2-n_4) \rvert\]

where a and b are the quad’s cross node point vectors

AreaCentroid() → Tuple[float, numpy.ndarray][source]
1-----2
|    /|
| A1/ |
|  /  |
|/ A2 |
4-----3

centroid
   c = sum(ci*Ai)/sum(A)
   where:
     c=centroid
     A=area
Normal()[source]
Thickness()[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUAD8 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file: Any, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1--5--2       1--8--4
|     |  -->  |     |
8     6       5     7
|     |       |     |
4--7--3       2--6--3
get_thickness_scale()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CQUAD8'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CQUADR(eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.QuadShell

1

2

3

4 | 5

6

7

8

9

CQUADR

EID

PID

N1 | N2

N3

N4

THETA/MCID

ZOFFSET

TFLAG

T1

T2

T3

T4

Creates a CQUADR card

Parameters
eidint

element id

pidint

property id (PSHELL/PCOMP/PCOMPG)

nidsList[int, int, int, int]

node ids

zoffsetfloat; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcidfloat; default=0.0
floatmaterial coordinate system angle (theta) is defined

relative to the element coordinate system

intx-axis from material coordinate system angle defined by

mcid is projected onto the element

tflagint; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

commentstr; default=’’

a comment for the card

Thickness()[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUADR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal()[source]
1---2       1---4
|   |  -->  |   |
|   |       |   |
4---3       2---3
get_thickness_scale()[source]
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CQUADR'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CPLSTN3(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx3

NX specific card

type = 'CPLSTN3'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CPLSTN4(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx4

dummy init

type = 'CPLSTN4'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CPLSTN6(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx6

dummy init

type = 'CPLSTN6'
class pyNastran.bdf.cards.elements.shell.CPLSTN8(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx8

dummy init

type = 'CPLSTN8'
class pyNastran.bdf.cards.elements.shell.CPLSTS3(eid, pid, nids, theta=0.0, tflag=0, T1=1.0, T2=1.0, T3=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.TriShell

1

2

3

4 | 5

6

7

8

9

CPLSTS3

EID

PID

N1 | N2

N3

THETA

TFLAG

T1

T2

T3

dummy init

Mass() → float[source]
\[m = \frac{m}{A} A \f]\]
_get_repr_defaults()[source]
classmethod add_card(card, comment='')[source]

Adds a CPLSTS3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

flip_normal()[source]

Flips normal of element.

   1           1
  * *   -->   * *
 *   *       *   *
2-----3     3-----2
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CPLSTS3'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CPLSTS4(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx4

1

2

3

4

5

6

7

8

9

CPLSTS4

EID

PID

N1

N2

N3

N4

THETA

TFLAG

T1

T2

T3

T4

[‘CPLSTS4’, ‘1’, ‘5’, ‘17’, ‘18’, ‘19’, ‘20’, ‘0.0’]

dummy init

type = 'CPLSTS4'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.shell.CPLSTS6(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx6

dummy init

type = 'CPLSTS6'
class pyNastran.bdf.cards.elements.shell.CPLSTS8(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx8

dummy init

type = 'CPLSTS8'
pyNastran.bdf.cards.elements.shell._triangle_area_centroid_normal(nodes, card)[source]

Gets the area, centroid and normal for a triangle.

Parameters
nodesList[np.ndarray]

List of three triangle vertices.

Returns
areafloat

Area of triangle.

centroidndarray

Centroid of triangle.

unit_normalndarray

Unit normal of triangles.

cardCTRIA3(), CTRIA6()

the self parameter

::

n = Normal = a x b Area = 1/2 * |a x b| V = <v1,v2,v3> |V| = sqrt(v1^0.5+v2^0.5+v3^0.5) = norm(V)

Area = 0.5 * |n| unit_normal = n/|n|

pyNastran.bdf.cards.elements.shell._normal(a, b)[source]

Finds the unit normal vector of 2 vectors

pyNastran.bdf.cards.elements.shell.transform_shell_material_coordinate_system(cids: List[int], iaxes, theta_mcid, normal, p1, p2, idtype='int32', fdtype='float64')[source]

calculate the material transformation matrix

solid Module
Inheritance diagram of pyNastran.bdf.cards.elements.solid

All solid elements are defined in this file. This includes:

  • CHEXA8

  • CHEXA20

  • CPENTA6

  • CPENTA15

  • CTETRA4

  • CTETRA10

  • CIHEX1

  • CIHEX2

All solid elements are SolidElement and Element objects.

class pyNastran.bdf.cards.elements.solid.CHEXA20(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

9

CHEXA

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

G9

G10

G11

G12

G13

G14

G15

G16

G17

G18

G19

G20

Creates a CHEXA20

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=20

Centroid()[source]

See also

CHEXA8.Centroid

Volume()[source]

See also

CHEXA8.Volume

classmethod add_card(card, comment='')[source]

Adds a CHEXA20 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
get_edge_ids()[source]

Return the edge IDs

get_face(nid_opposite, nid)[source]
get_face_area_centroid_normal(nid, nid_opposite)[source]
Parameters
nidint

G1 - a grid point on the corner of a face

nid_oppositeint

G3 - the grid point diagonally opposite of G1

property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CHEXA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CHEXA8(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

9

CHEXA

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

Creates a CHEXA8

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=8

Centroid()[source]

Averages the centroids at the two faces

Volume()[source]

Calculate the volume of the hex

classmethod add_card(card, comment='')[source]

Adds a CHEXA8 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
flip_normal()[source]

flips the element inside out

get_edge_ids()[source]

Return the edge IDs # top (5-6-7-8) # btm (1-2-3-4) # left (1-2-3-4) # right (5-6-7-8) # front (1-5-8-4) # back (2-6-7-3)

get_face(nid_opposite, nid)[source]
get_face_area_centroid_normal(nid, nid_opposite)[source]
Parameters
nidint

G1 - a grid point on the corner of a face

nid_oppositeint

G3 - the grid point diagonally opposite of G1

material_coordinate_system(xyz=None)[source]

http://www.ipes.dk/Files/Ipes/Filer/nastran_2016_doc_release.pdf

property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CHEXA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CIHEX1(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.CHEXA8

Creates a CHEXA8

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=8

type = 'CIHEX1'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CIHEX2(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.CHEXA20

Creates a CHEXA20

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=20

type = 'CIHEX2'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CPENTA15(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

9

CPENTA

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

G9

G10

G11

G12

G13

G14

G15

Creates a CPENTA15

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=15

Centroid()[source]

See also

CPENTA6.Centroid

Volume()[source]

See also

CPENTA6.Volume

classmethod add_card(card, comment='')[source]

Adds a CPENTA15 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
get_edge_ids()[source]

Return the edge IDs

get_face(nid, nid_opposite)[source]
get_face_area_centroid_normal(nid, nid_opposite=None)[source]
property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CPENTA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CPENTA6(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

9

CPENTA

EID

PID

G1

G2

G3

G4

G5

G6

::

3 6

———-

/ /

/ A / c —–—– 1 2 4 5 V = (A1+A2)/2 * norm(c1-c2) C = (c1-c2)/2

Creates a CPENTA6

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=6

Centroid()[source]
Volume()[source]

Calculate the volume of the penta

classmethod add_card(card, comment='')[source]

Adds a CPENTA6 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
get_edge_ids()[source]

Return the edge IDs

get_face(nid, nid_opposite=None)[source]
get_face_area_centroid_normal(nid, nid_opposite=None)[source]
get_face_nodes_and_area(nid, nid_opposite)[source]
material_coordinate_system(xyz=None)[source]

http://www.ipes.dk/Files/Ipes/Filer/nastran_2016_doc_release.pdf

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CPENTA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CPYRAM13(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

9

CPYRAM

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

G9

G10

G11

G12

dummy init

Centroid()[source]

See also

CPYRAM5.Centroid

Volume() → float[source]

See also

CPYRAM5.Volume

V = (l * w) * h / 3 V = A * h / 3

classmethod add_card(card, comment='')[source]

Adds a CPYRAM13 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
get_edge_ids()[source]

Return the edge IDs

property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CPYRAM'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CPYRAM5(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

CPYRAM

EID

PID

G1

G2

G3

G4

G5

dummy init

Centroid()[source]

See also

CPYRAM5.Centroid

Volume()[source]

See also

CPYRAM5.Volume

V = (l * w) * h / 3 V = A * h / 3

classmethod add_card(card, comment='')[source]

Adds a CPYRAM5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
get_edge_ids()[source]

Return the edge IDs

property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CPYRAM'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CTETRA10(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

8

9

CTETRA

EID

PID

G1

G2

G3

G4

G5

G6

G7

G8

G9

G10

CTETRA

1

1

239

229

516

99

335

103

265

334

101

102

Creates a CTETRA10

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=10

Centroid()[source]

Gets the cenroid of the primary tetrahedron.

See also

CTETRA4.Centroid

Volume()[source]

Gets the volume, \(V\), of the primary tetrahedron.

See also

CTETRA4.Volume

classmethod add_card(card, comment='')[source]

Adds a CTETRA10 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Note

The order of the nodes are consistent with ANSYS numbering; is this current? ..

Warning

higher order element ids not verified with ANSYS; is this current? ..

Examples

>>> print(element.faces)
get_edge_ids()[source]

Return the edge IDs

get_face_area_centroid_normal(nid_opposite, nid=None)[source]
get_face_nodes(nid_opposite, nid=None)[source]
material_coordinate_system(xyz=None)[source]
Returns
centroid: (3,) float ndarray

the centoid

xe, ye, ze: (3,) float ndarray

the element coordinate system

property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTETRA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CTETRA4(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.SolidElement

1

2

3

4

5

6

7

CTETRA

EID

PID

G1

G2

G3

G4

Creates a CTETRA4

Parameters
eidint

element id

pidint

property id (PSOLID, PLSOLID)

nidsList[int]

node ids; n=4

commentstr; default=’’

a comment for the card

Centroid()[source]
Volume()[source]

Calculate the volume of the tet

classmethod add_card(card, comment='')[source]

Adds a CTETRA4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property ansys_faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with ANSYS numbering. ..

Warning

higher order element ids not verified with ANSYS. ..

Examples

>>> print(element.faces)
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Element ID

property faces

Gets the faces of the element

Returns
facesDict[int] = [face1, face2, …]

key = face number value = a list of nodes (integer pointers) as the values.

Note

The order of the nodes are consistent with normals that point outwards The face numbering is meaningless

Examples

>>> print(element.faces)
flip_normal()[source]

flips the element inside out

get_edge_ids()[source]

Return the edge IDs

get_face(nid_opposite, nid)[source]
get_face_area_centroid_normal(nid, nid_opposite)[source]
get_face_nodes(nid_opposite, nid=None)[source]
material_coordinate_system(xyz=None)[source]
Returns
centroid: (3,) float ndarray

the centoid

xe, ye, ze: (3,) float ndarray

the element coordinate system

property node_ids
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CTETRA'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.SolidElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

E() → float[source]
G() → float[source]
Mass() → float[source]

Calculates the mass of the solid element Mass = Rho * Volume

Mid() → int[source]

Returns the material ID as an integer

Nu() → float[source]
Rho() → float[source]

Returns the density

Volume() → float[source]

Base volume method that should be overwritten

_properties = ['faces']
center_of_mass()[source]
cross_reference(model: BDF) → None[source]
classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_face_area_centroid_normal(nid_opposite, nid=None)[source]
raw_fields()[source]
uncross_reference() → None[source]

Removes cross-reference links

pyNastran.bdf.cards.elements.solid._ctetra_element_coordinate_system(element: Union[pyNastran.bdf.cards.elements.solid.CTETRA4, pyNastran.bdf.cards.elements.solid.CTETRA10], xyz=None)[source]
Returns
centroid: (3,) float ndarray

the centoid

xe, ye, ze: (3,) float ndarray

the element coordinate system

http://www.ipes.dk/Files/Ipes/Filer/nastran_2016_doc_release.pdf
pyNastran.bdf.cards.elements.solid.area_centroid(n1: Any, n2: Any, n3: Any, n4: Any) → Tuple[float, float][source]

Gets the area, \(A\), and centroid of a quad.:

1-----2
|   / |
| /   |
4-----3
pyNastran.bdf.cards.elements.solid.chexa_face(nid_opposite, nid, nids)[source]
pyNastran.bdf.cards.elements.solid.chexa_face_area_centroid_normal(nid, nid_opposite, nids, nodes_ref)[source]
Parameters
nidint

G1 - a grid point on the corner of a face

nid_oppositeint

G3 - the grid point diagonally opposite of G1

nodes_refList[GRID]

the GRID objects

# top (7-6-5-4)
# btm (0-1-2-3)
# left (0-3-7-4)
# right (5-6-2-1)
# front (4-5-1-0)
# back (2-6-7-3)
pyNastran.bdf.cards.elements.solid.cpenta_face(nid, nid_opposite, nids)[source]
pyNastran.bdf.cards.elements.solid.cpenta_face_area_centroid_normal(nid, nid_opposite, nids, nodes_ref)[source]
Parameters
nidint

G1 - a grid point on the corner of a face

nid_oppositeint / None

G3 - the grid point diagonally opposite of G1

pyNastran.bdf.cards.elements.solid.ctetra_face(nid, nid_opposite, nids)[source]
pyNastran.bdf.cards.elements.solid.ctetra_face_area_centroid_normal(nid, nid_opposite, nids, nodes_ref)[source]
Parameters
nidint

G1 - a grid point on the corner of a face

nid_oppositeint

G4 - a grid point not being loaded

pyNastran.bdf.cards.elements.solid.volume4(n1: Any, n2: Any, n3: Any, n4: Any) → float[source]

Gets the volume, \(V\), of the tetrahedron.

\[V = \frac{(a-d) \cdot \left( (b-d) \times (c-d) \right) }{6}\]
springs Module
Inheritance diagram of pyNastran.bdf.cards.elements.springs

All spring elements are defined in this file. This includes:

  • CELAS1

  • CELAS2

  • CELAS3

  • CELAS4

All spring elements are SpringElement and Element objects.

class pyNastran.bdf.cards.elements.springs.CELAS1(eid, pid, nids, c1=0, c2=0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.springs.SpringElement

1

2

3

4

5

6

7

CELAS1

EID

PID

G1

C1

G2

C2

Creates a CELAS1 card

Parameters
eidint

element id

pidint

property id (PELAS)

nidsList[int, int]

node ids

c1 / c2int; default=0

DOF for nid1 / nid2

commentstr; default=’’

a comment for the card

K()[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

c1 = None

component number

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CELAS1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.springs.CELAS2(eid, k, nids, c1=0, c2=0, ge=0.0, s=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.springs.SpringElement

1

2

3

4

5

6

7

8

9

CELAS2

EID

K

G1

C1

G2

C2

GE

S

Creates a CELAS2 card

Parameters
eidint

element id

kfloat

spring stiffness

nidsList[int, int]

SPOINT ids node ids

c1 / c2int; default=0

DOF for nid1 / nid2

geint; default=0.0

damping coefficient

sfloat; default=0.0

stress coefficient

commentstr; default=’’

a comment for the card

K()[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

c1 = None

component number

cp_name_map = {'GE': 'ge', 'K': 'k', 'S': 's'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

ge = None

damping coefficient

get_edge_ids()[source]
k = None

stiffness of the scalar spring

property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

s = None

stress coefficient

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CELAS2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.springs.CELAS3(eid, pid, nodes, comment='')[source]

Bases: pyNastran.bdf.cards.elements.springs.SpringElement

1

2

3

4

5

CELAS3

EID

PID

S1

S2

Creates a CELAS3 card

Parameters
eidint

element id

pidint

property id (PELAS)

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

K()[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
property node_ids
nodes = None

Scalar point identification numbers

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CELAS3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.springs.CELAS4(eid, k, nodes, comment='')[source]

Bases: pyNastran.bdf.cards.elements.springs.SpringElement

1

2

3

4

5

CELAS4

EID

K

S1

S2

Creates a CELAS4 card

Parameters
eidint

element id

kfloat

spring stiffness

nidsList[int, int]

SPOINT ids

commentstr; default=’’

a comment for the card

K()[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cp_name_map = {'K': 'k'}
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids()[source]
k = None

stiffness of the scalar spring

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'CELAS4'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.elements.springs.SpringElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

dummy init

Mass()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

write_card_16(is_double=False)[source]
properties Package
bars Module
Inheritance diagram of pyNastran.bdf.cards.properties.bars
All bar properties are defined in this file. This includes:
  • PBAR

  • PBARL

  • PBEAM3

  • PBEND

  • PBRSECT

All bars are LineProperty objects. Multi-segment beams are IntegratedLineProperty objects.

pyNastran.bdf.cards.properties.bars.A_I1_I2_I12(prop, beam_type: str, dim: List[float]) → Tuple[float, float, float, float][source]
BAR
    2
    ^
    |
*---|--*
|   |  |
|   |  |
|h  *-----------> 1
|      |
|   b  |
*------*
\[I_1 = \frac{1}{12} b h^3\]
\[I_2 = \frac{1}{12} h b^3\]
class pyNastran.bdf.cards.properties.bars.IntegratedLineProperty[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

dummy init

Area() → float[source]

gets area

I11() → float[source]

gets I11

I12() → float[source]
I22() → float[source]

gets I22

J() → float[source]

gets J

Nsm() → float[source]

gets nonstructural mass per unit length

pyNastran.bdf.cards.properties.bars.Iyy_beam(b, h)[source]

gets the Iyy for a solid beam

class pyNastran.bdf.cards.properties.bars.LineProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

dummy init

Area() → float[source]

gets area

E() → float[source]

gets the material Young’s ratio

G() → float[source]

gets the material Shear ratio

I11() → float[source]

gets I11

I22() → float[source]

gets I22

J() → float[source]

gets J

Nsm() → float[source]

gets nonstructural mass per unit length

Nu() → float[source]

gets the material Poisson’s ratio

Rho() → float[source]

gets the material density

class pyNastran.bdf.cards.properties.bars.PBAR(pid, mid, A=0.0, i1=0.0, i2=0.0, i12=0.0, j=0.0, nsm=0.0, c1=0.0, c2=0.0, d1=0.0, d2=0.0, e1=0.0, e2=0.0, f1=0.0, f2=0.0, k1=100000000.0, k2=100000000.0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

Defines the properties of a simple beam element (CBAR entry).

1

2

3

4

5

6

7

8

9

PBAR

PID

MID

A

I1

I2

J

NSM

C1

C2

D1

D2

E1

E2

F1

F2

K1

K2

I12

Todo

support solution 600 default do a check for mid -> MAT1 for structural do a check for mid -> MAT4/MAT5 for thermal

Creates a PBAR card

Parameters
pidint

property id

midint

material id

areafloat

area

i1, i2, i12, jfloat

moments of inertia

nsmfloat; default=0.

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2float

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2float; default=1.e8

Shear stiffness factor K in K*A*G for plane 1/2.

commentstr; default=’’

a comment for the card

A = None

Area -> use Area()

Area() → float[source]

Gets the area \(A\) of the CBAR.

I11() → float[source]

gets the section I11 moment of inertia

I12() → float[source]

gets the section I12 moment of inertia

I22() → float[source]

gets the section I22 moment of inertia

MassPerLength() → float[source]

Gets the mass per length \(\frac{m}{L}\) of the CBAR.

\[\frac{m}{L} = \rho A + nsm\]
classmethod add_card(card, comment='')[source]

Adds a PBAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

get_cdef()[source]
i1 = None

I1 -> use I1()

i12 = None

I12 -> use I12()

i2 = None

I2 -> use I2()

j = None

Polar Moment of Inertia J -> use J() default=1/2(I1+I2) for SOL=600, otherwise 0.0 .. todo:: support SOL 600 default

k1 = None

default=infinite; assume 1e8

k2 = None

default=infinite; assume 1e8

mid = None

material ID -> use Mid()

nsm = None

nonstructral mass -> use Nsm()

pid = None

property ID -> use Pid()

pname_fid_map = {4: 'A', 'A': 'A', 5: 'i1', 'I1': 'i1', 6: 'i2', 'I2': 'i2', 7: 'j', 'J': 'j', 10: 'c1', 11: 'c2', 12: 'd1', 13: 'd2', 14: 'e1', 15: 'e2', 16: 'f1', 17: 'f2', 18: 'k1', 19: 'k1', 20: 'i12', 'I12': 'i12'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBAR'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bars.PBARL(pid, mid, Type, dim, group='MSCBML0', nsm=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

Todo

doesnt support user-defined types

1

2

3

4

5

6

7

8

9

PBARL

PID

MID

GROUP

TYPE

DIM1

DIM2

DIM3

DIM4

DIM5

DIM6

DIM7

DIM8

DIM9

etc.

NSM

Creates a PBARL card, which defines A, I1, I2, I12, and J using dimensions rather than explicit values.

Parameters
pidint

property id

midint

material id

Typestr

type of the bar {ROD, TUBE, TUBE2, I, CHAN, T, BOX, BAR, CROSS, H, T1, I1, CHAN1, Z, CHAN2, T2, BOX1, HEXA, HAT, HAT1, DBOX}

dimList[float]

dimensions for cross-section corresponding to Type; the length varies

groupstr; default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

nsmfloat; default=0.

non-structural mass

commentstr; default=’’

a comment for the card

The shear center and neutral axis do not coincide when:
  • Type = I and dim2 != dim3

  • Type = CHAN, CHAN1, CHAN2

  • Type = T

  • Type = T1, T2

  • Type = BOX1

  • Type = HAT, HAT1

  • Type = DBOX

Area() → float[source]

Gets the area \(A\) of the CBAR.

I1() → float[source]

gets the section I1 moment of inertia

I11() → float[source]

gets I11

I12() → float[source]

gets the section I12 moment of inertia

I2() → float[source]

gets the section I2 moment of inertia

I22() → float[source]

gets I22

J() → float[source]

gets J

MassPerLength() → float[source]

Gets the mass per length \(\frac{m}{L}\) of the CBAR.

\[\frac{m}{L} = A \rho + nsm\]
Nsm() → float[source]

Gets the non-structural mass \(nsm\) of the CBAR.

property Type

Section Type (e.g. ‘ROD’, ‘TUBE’, ‘I’, ‘H’)

classmethod _init_from_empty()[source]
_points(beam_type, dim)[source]
_properties = ['Type', 'valid_types']
classmethod add_card(card, comment='')[source]

Adds a PBARL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_cdef()[source]

these axes are backwards…

^ y

+—|—+ | | | | +——> z | | +——-+

mid = None

Material ID

nsm = None

non-structural mass

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBARL'
uncross_reference() → None[source]

Removes cross-reference links

update_by_pname_fid(pname_fid, value)[source]
valid_types = {'BAR': 2, 'BOX': 4, 'BOX1': 6, 'CHAN': 4, 'CHAN1': 4, 'CHAN2': 4, 'CROSS': 4, 'DBOX': 10, 'H': 4, 'HAT': 4, 'HAT1': 5, 'HEXA': 3, 'I': 6, 'I1': 4, 'L': 4, 'ROD': 1, 'T': 4, 'T1': 4, 'T2': 4, 'TUBE': 2, 'TUBE2': 2, 'Z': 4}
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bars.PBEAM3(pid, mid, A, iz, iy, iyz=None, j=None, nsm=0.0, so=None, cy=None, cz=None, dy=None, dz=None, ey=None, ez=None, fy=None, fz=None, ky=1.0, kz=1.0, ny=None, nz=None, my=None, mz=None, nsiy=None, nsiz=None, nsiyz=None, cw=None, stress='GRID', w=None, wy=None, wz=None, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

1

2

3

4

5

6

7

8

9

PBEAM3

PID

MID

A(A)

IZ(A)

IY(A)

IYZ(A)

J(A)

NSM(A)

CY(A)

CZ(A)

DY(A)

DZ(A)

EY(A)

EZ(A)

FY(A)

FZ(A)

SO(B)

A(B)

IZ(B)

IY(B)

IYZ(B)

J(B)

NSM(B)

CY(B)

CZ(B)

DY(B)

DZ(B)

EY(B)

EZ(B)

FY(B)

FZ(B)

SO(C)

A(C)

IZ(C)

IY(C)

IYZ(C)

J(C)

NSM(C)

CY(C)

CZ(C)

DY(C)

DZ(C)

EY(C)

EZ(C)

FY(C)

FZ(C)

KY

KZ

NY(A)

NZ(A)

NY(B)

NZ(B)

NY(C)

NZ(C)

MY(A)

MZ(A)

MY(B)

MZ(B)

MY(C)

MZ(C)

NSIY(A)

NSIZ(A)

NSIYZ(A)

NSIY(B)

NSIZ(B)

NSIYZ(B)

NSIY(C)

NSIZ(C)

NSIYZ(C)

CW(A)

CW(B)

CW(C)

STRESS

WC(A)

WYC(A)

WZC(A)

WD(A)

WYD(A)

WZD(A)

WE(A)

WYE(A)

WZE(A)

WF(A)

WYF(A)

WZF(A)

WC(B)

WYC(B)

WZC(B)

WD(B)

WYD(B)

WZD(B)

WE(B)

WYE(B)

WZE(B)

WF(B)

WYF(B)

WZF(B)

WC(C)

WYC(C)

WZC(C)

WD(C)

WYD(C)

WZD(C)

WE(C)

WYE(C)

WZE(C)

WF(C)

WYF(C)

WZF(C)

Creates a PBEAM3 card

Parameters
pidint

property id

midint

material id

AList[float]

areas for ABC

iz / iy / iyzList[float]

area moment of inertias for ABC

iyzList[float]; default=None -> [0., 0., 0.]

area moment of inertias for ABC

jList[float]; default=None

polar moment of inertias for ABC None -> iy + iz from section A for ABC

soList[str]; default=None

None -> [‘YES’, ‘YESA’, ‘YESA’]

cy / cz / dy / dz / ey / ez / fy / fzList[float]; default=[0., 0., 0.]

stress recovery loctions for ABC

ny / nzList[float]

Local (y, z) coordinates of neutral axis for ABC

my / mzList[float]

Local (y, z) coordinates of nonstructural mass center of gravity for ABC

nsiy / nsiz / nsiyzList[float]

Nonstructural mass moments of inertia per unit length about local y and z-axes, respectively, with regard to the nonstructural mass center of gravity for ABC

cwList[float]

warping coefficients for ABC

stressstr; default=’GRID’

Location selection for stress, strain and force output.

w(4, 3) float numpy array; default=None

Values of warping function at stress recovery points None : array of 0.0

wy / wz(4, 3) float numpy array; default=None

Gradients of warping function in the local (y, z) coordinate system at stress recovery points None : array of 0.0

Nsm() → List[float][source]

Gets the non-structural mass \(nsm\). .. warning:: nsm field not supported fully on PBEAM3 card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBARL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
type = 'PBEAM3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bars.PBEND(pid, mid, beam_type, A, i1, i2, j, c1, c2, d1, d2, e1, e2, f1, f2, k1, k2, nsm, rc, zc, delta_n, fsi, rm, t, p, rb, theta_b, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

MSC/NX Option A

1

2

3

4

5

6

7

7

8

PBEND

PID

MID

A

I1

I2

J

RB

THETAB

C1

C2

D1

D2

E1

E2

F1

F2

K1

K2

NSM

RC

ZC

DELTAN

MSC Option B

1

2

3

4

5

6

7

7

8

PBEND

PID

MID

FSI

RM

T

P

RB

THETAB

NSM

RC

ZC

NX Option B

1

2

3

4

5

6

7

7

8

PBEND

PID

MID

FSI

RM

T

P

RB

THETAB

SACL

ALPHA

NSM

RC

ZC

FLANGE

KX

KY

KZ

SY

SZ

dummy init

MassPerLength() → float[source]

m/L = rho*A + nsm

classmethod _init_from_empty()[source]
classmethod add_beam_type_1(pid, mid, A, i1, i2, j, rb=None, theta_b=None, c1=0.0, c2=0.0, d1=0.0, d2=0.0, e1=0.0, e2=0.0, f1=0.0, f2=0.0, k1=None, k2=None, nsm=0.0, rc=0.0, zc=0.0, delta_n=0.0, comment='')[source]

1

2

3

4

5

6

7

7

8

PBEND

PID

MID

A

I1

I2

J

RB

THETAB

C1

C2

D1

D2

E1

E2

F1

F2

K1

K2

NSM

RC

ZC

DELTAN

Parameters
Afloat

cross-sectional area

i1, i2float

area moments of inertia for plane 1/2

jfloat

torsional stiffness

rbfloat; default=None

bend radius of the line of centroids

theta_bfloat; default=None

arc angle of element (degrees)

c1, c2, d1, d2, e1, e2, f1, f2float; default=0.0

the r/z locations from the geometric centroid for stress recovery

k1, k2float; default=None

Shear stiffness factor K in K*A*G for plane 1 and plane 2

nsmfloat; default=0.

nonstructural mass per unit length???

zcfloat; default=None

Offset of the geometric centroid in a direction perpendicular to the plane of points GA and GB and vector v.

delta_nfloat; default=None

Radial offset of the neutral axis from the geometric centroid, positive is toward the center of curvature

classmethod add_beam_type_2(pid, mid, fsi, rm, t, p=None, rb=None, theta_b=None, nsm=0.0, rc=0.0, zc=0.0, comment='')[source]

1

2

3

4

5

6

7

7

8

PBEND

PID

MID

FSI

RM

T

P

RB

THETAB

NSM

RC

ZC

Parameters
fsiint

Flag selecting the flexibility and stress intensification factors. See Remark 3. (Integer = 1, 2, or 3)

rmfloat

Mean cross-sectional radius of the curved pipe

tfloat

Wall thickness of the curved pipe

pfloat; default=None

Internal pressure

rbfloat; default=None

bend radius of the line of centroids

theta_bfloat; default=None

arc angle of element (degrees)

nsmfloat; default=0.

nonstructural mass per unit length???

rcfloat; default=None

Radial offset of the geometric centroid from points GA and GB.

zcfloat; default=None

Offset of the geometric centroid in a direction perpendicular to the plane of points GA and GB and vector v

classmethod add_card(card, comment='')[source]

Adds a PBEND card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields() → List[Union[int, float, str, None]][source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBEND'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bars.PBRSECT(pid, mid, form, options, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

not done

dummy init

Area() → float[source]

Gets the area \(A\) of the CBAR.

I11()[source]

gets I11

I22()[source]

gets I22

J()[source]

gets J

MassPerLength() → float[source]

Gets the mass per length \(\frac{m}{L}\) of the CBAR.

\[\frac{m}{L} = A \rho + nsm\]
Nsm() → float[source]

Gets the non-structural mass \(nsm\) of the CBAR.

_finalize_hdf5(encoding)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBRSECT card from BDF.add_card(...)

Parameters
cardList[str]

this card is special and is not a BDFCard like other cards

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

plot(model, figure_id=1, show=False)[source]

Plots the beam section

Parameters
modelBDF()

the BDF object

figure_idint; default=1

the figure id

showbool; default=False

show the figure when done

raw_fields()[source]

not done…

repr_fields()[source]

not done…

type = 'PBRSECT'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.properties.bars._IAreaL(prop, dim)[source]
pyNastran.bdf.cards.properties.bars._bar_areaL(x) method for the PBARL and PBEAML classes (pronounced **Area-L**)[source]

Area(x) method for the PBARL and PBEAML classes (pronounced Area-L)

Parameters
dimList[float]

a list of the dimensions associated with beam_type

Returns
Areafloat

Area of the given cross section defined by self.beam_type

Notes

internal method

pyNastran.bdf.cards.properties.bars.bar_section(class_type, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.box1_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.box_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.chan1_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.chan2_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.chan_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.cross_section(class_type, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.dbox_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.get_beam_sections(line: str) → List[str][source]

Splits a PBRSECT/PBMSECT line

>>> line = 'OUTP=10,BRP=20,T=1.0,T(11)=[1.2,PT=(123,204)], NSM=0.01'
>>> sections = get_beam_sections(line)
>>> sections
['OUTP=10', 'BRP=20', 'T=1.0', 'T(11)=[1.2,PT=(123,204)', 'NSM=0.01'], sections
pyNastran.bdf.cards.properties.bars.get_inertia_rectangular(sections)[source]

Calculates the moment of inertia for a section about the CG.

Parameters
sections[[b,h,y,z]_1,…]

[[b,h,y,z]_1,…] y,z is the centroid (x in the direction of the beam, y right, z up)

Returns
interia_parametersList[Area, Iyy, Izz, Iyz]

the inertia parameters

pyNastran.bdf.cards.properties.bars.h_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.hat1_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.hat_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.hexa_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.i1_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.i_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.l_section(class_type, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.plot_arbitrary_section(model, self, inps, ts, branch_paths, nsm, outp_ref, figure_id=1, title='', show=False)[source]

helper for PBRSECT/PBMSECT

pyNastran.bdf.cards.properties.bars.rod_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.split_arbitrary_thickness_section(key: str, value: Union[str, float, List[int]]) → Tuple[int, Union[float, List[int]]][source]

Helper method for PBRSECT/PBMSECT

>>> key = 'T(11)'
>>> value = '[1.2,PT=(123,204)]'
>>> index, out = split_arbitrary_thickness_section(key, value)
>>> index
11
>>> out
[1.2, [123, 204]]
pyNastran.bdf.cards.properties.bars.t1_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.t2_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.t_section(class_name, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.tube2_section(class_type, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.tube_section(class_type, beam_type, dim, prop)[source]
pyNastran.bdf.cards.properties.bars.write_arbitrary_beam_section(inps, ts, branch_paths, nsm, outp_id, core=None)[source]

writes the PBRSECT/PBMSECT card

pyNastran.bdf.cards.properties.bars.zee_section(class_name, beam_type, dim, prop)[source]
beam Module
Inheritance diagram of pyNastran.bdf.cards.properties.beam
All beam properties are defined in this file. This includes:
  • PBEAM

  • PBEAML

  • PBCOMP

  • PBRSECT

All beams are LineProperty objects. Multi-segment beams are IntegratedLineProperty objects.

class pyNastran.bdf.cards.properties.beam.PBCOMP(pid, mid, y, z, c, mids, area=0.0, i1=0.0, i2=0.0, i12=0.0, j=0.0, nsm=0.0, k1=1.0, k2=1.0, m1=0.0, m2=0.0, n1=0.0, n2=0.0, symopt=0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

1

2

3

4

5

6

7

8

9

PBCOMP

PID

MID

A

I1

I2

I12

J

NSM

K1

K2

M1

M2

N1

N2

SYMOPT

Y1

Z1

C1

MID1

Y2

Z2

C2

MID2

Creates a PBCOMP card

Parameters
pidint

Property ID

midint

Material ID

midsList[int]

Material ID for the i-th integration point

y / zList[float]

The (y,z) coordinates of the lumped areas in the element coordinate system

cList[float]; default=0.0

Fraction of the total area for the i-th lumped area default not supported…

areafloat

Area of beam cross section

i1 / i2float; default=0.0

Area moment of inertia about plane 1/2 about the neutral axis

i12float; default=0.0

area product of inertia

jfloat; default=0.0

Torsional moment of interia

nsmfloat; default=0.0

Nonstructural mass per unit length

k1 / k2float; default=1.0

Shear stiffness factor K in K*A*G for plane 1/2

m1 / m2float; default=0.0

The (y,z) coordinates of center of gravity of nonstructural mass

n1 / n2float; default=0.0

The (y,z) coordinates of neutral axis

symoptint; default=0

Symmetry option to input lumped areas for the beam cross section 0 < Integer < 5

commentstr; default=’’

a comment for the card

MassPerLength()[source]
Mids()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBCOMP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

j = None

Polar Moment of Inertia \(J\)

mid = None

Material ID

nsm = None

Non-structural mass per unit length \(\frac{m}{L}\)

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBCOMP'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.beam.PBEAM(pid, mid, xxb, so, area, i1, i2, i12, j, nsm=None, c1=None, c2=None, d1=None, d2=None, e1=None, e2=None, f1=None, f2=None, k1=1.0, k2=1.0, s1=0.0, s2=0.0, nsia=0.0, nsib=None, cwa=0.0, cwb=None, m1a=0.0, m2a=0.0, m1b=None, m2b=None, n1a=0.0, n2a=0.0, n1b=None, n2b=None, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.IntegratedLineProperty

Defines the properties of a beam element (CBEAM entry). This element may be used to model tapered beams.

PBEAM

PID

MID

A(A)

I1(A)

I2(A)

I12(A)

J(A)

NSM(A)

C1(A)

C2(A)

D1(A)

D2(A)

E1(A)

E2(A)

F1(A)

F2(A)

The next two continuations are repeated for each intermediate station as described in Remark 5. and SO and X/XB must be specified.

SO

X/XB

A

I1

I2

I12

J

NSM

C1

C2

D1

D2

E1

E2

F1

F2

The last two continuations are: +——-+——-+——-+——-+——–+——–+——-+——-+ | K1 | K2 | S1 | S2 | NSI(A) | NSI(B) | CW(A) | CW(B) | +——-+——-+——-+——-+——–+——–+——-+——-+ | M1(A) | M2(A) | M1(B) | M2(B) | N1(A) | N2(A) | N1(B) | N2(B) | +——-+——-+——-+——-+——–+——–+——-+——-+

Todo

fix 0th entry of self.so, self.xxb

Creates a PBEAM card

Parameters
pidint

property id

midint

material id

xxbList[float]

The percentage locations along the beam [0., …, 1.]

soList[str]

YES, YESA, NO

areaList[float]

area

i1, i2, i12, jList[float]

moments of inertia

nsmList[float]

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2List[float]; default=None -> [0.]*nxxb

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2float; default=1.

Shear stiffness factor K in K*A*G for plane 1/2.

s1 / s2float; default=0.

Shear relief coefficient due to taper for plane 1/2.

nsia / nsiafloat; default=0. / nsia

non structural mass moment of inertia per unit length about nsm center of gravity at Point A/B.

cwa / cwbfloat; default=0. / cwa

warping coefficient for end A/B.

m1a / m2afloat; default=0. / 0.

y/z coordinate of center of gravity of nonstructural mass for end A.

m1b / m2bfloat; default=m1a / m2a

y/z coordinate of center of gravity of nonstructural mass for end B.

n1a / n2afloat; default=0. / 0.

y/z coordinate of neutral axis for end A.

n1b / n2bfloat; default=n1a / n2a

y/z coordinate of neutral axis for end B.

commentstr; default=’’

a comment for the card

I1_I2_I12() → Tuple[float, float, float][source]
MassPerLength() → float[source]

mass = L*(Area*rho+nsm) mass/L = Area*rho+nsm

classmethod _init_from_empty()[source]
_interpolate_sections()[source]

now we interpolate to fix up missing data from arrays that were potentially out of order (they’re sorted now)

we’ve also already checked xxb=0.0 and xxb=1.0 for I1, I2, I12, J

classmethod add_card(card, comment='')[source]

Adds a PBEAM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

cwa = None

warping coefficient for end A.

cwb = None

warping coefficient for end B.

get_optimization_value(name_str: str) → float[source]
k1 = None

Shear stiffness factor K in K*A*G for plane 1.

k2 = None

Shear stiffness factor K in K*A*G for plane 2.

m1a = None

y coordinate of center of gravity of nonstructural mass for end A.

m1b = None

y coordinate of center of gravity of nonstructural mass for end B.

m2a = None

z coordinate of center of gravity of nonstructural mass for end A.

m2b = None

z coordinate of center of gravity of nonstructural mass for end B.

mid = None

Material ID

n1a = None

y coordinate of neutral axis for end A.

n1b = None

y coordinate of neutral axis for end B.

n2a = None

z coordinate of neutral axis for end A.

n2b = None

z coordinate of neutral axis for end B.

nsia = None

non structural mass moment of inertia per unit length about nsm center of gravity at Point A.

nsib = None

non structural mass moment of inertia per unit length about nsm center of gravity at Point B.

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

s1 = None

Shear relief coefficient due to taper for plane 1.

s2 = None

Shear relief coefficient due to taper for plane 2.

set_optimization_value(name_str: str, value: float) → None[source]
type = 'PBEAM'
uncross_reference() → None[source]

Removes cross-reference links

update_by_pname_fid(pname_fid, value)[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.properties.beam.PBEAML(pid: int, mid: int, beam_type: str, xxb, dims, so=None, nsm=None, group: str = 'MSCBML0', comment: str = '')[source]

Bases: pyNastran.bdf.cards.properties.bars.IntegratedLineProperty

1

2

3

4

5

6

7

8

9

PBEAML

PID

MID

GROUP

TYPE

DIM1(A)

DIM2(A)

etc.

DIMn(A)

NSM(A)

SO(1)

X(1)/XB

DIM1(1)

DIM2(1)

etc.

DIMn(1)

NSM(1)

SO(2)

X(2)/XB

DIM1(2)

DIM2(2)

etc.

DIMn(2)

NSM(m)

etc.

SO(m)

X(m)/XB

DIM1(m)

etc.

DIMn(m)

NSM(m)

SO(B)

1.0

DIM1(B)

DIM2(B)

etc.

DIMn(B)

NSM(B)

Creates a PBEAML card

Parameters
pidint

property id

midint

material id

beam_typestr

the section profile

xxbList[float]

The percentage locations along the beam [0., …, 1.]

dimsList[dim]
dimList[float]

The dimensions for each section

soList[str]; default=None

YES, YESA, NO None : [0.] * len(xxb)

nsmList[float]; default=None

nonstructural mass per unit length None : [0.] * len(xxb)

groupstr; default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

commentstr; default=’’

a comment for the card

Area()[source]

Gets the Area \(A\) of the PBEAML.

\[A = \int \, A(x) dx\]

Notes

a spline is fit to \(A(x)\) and then integrated.

I11()[source]

gets I11

I12()[source]
I22()[source]

gets I22

J()[source]

gets J

MassPerLength()[source]

Gets the mass per length \(\frac{m}{L}\) of the PBEAML.

\[\frac{m}{L} = A(x) \rho + nsm\]
\[\frac{m}{L} = nsm L + \rho \int \, A(x) dx\]
property Type

gets Type

_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
_properties = ['valid_types', 'Type']
classmethod add_card(card, comment='')[source]

Adds a PBEAML card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

beam_type = None

Section Type (e.g. ‘ROD’, ‘TUBE’, ‘I’, ‘H’)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

.. warning:: For structural problems, PBEAML entries must

reference a MAT1 material entry

.. warning:: For heat-transfer problems, the MID must

reference a MAT4 or MAT5 material entry.

.. todo:: What happens when there are 2 subcases?
get_mass_per_lengths()[source]

helper method for MassPerLength a*rho + nsm

mid = None

Material ID

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBEAML'
uncross_reference() → None[source]

Removes cross-reference links

update_by_pname_fid(pname_fid: str, value: float)[source]
valid_types = {'BAR': 2, 'BOX': 4, 'BOX1': 6, 'CHAN': 4, 'CHAN1': 4, 'CHAN2': 4, 'CROSS': 4, 'DBOX': 10, 'H': 4, 'HAT': 4, 'HAT1': 5, 'HEXA': 3, 'I': 6, 'I1': 4, 'L': 4, 'ROD': 1, 'T': 4, 'T1': 4, 'T2': 4, 'TUBE': 2, 'TUBE2': 2, 'Z': 4}
validate()[source]

card checking method that should be overwritten

verify(model, isubcase)[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Todo

having bug with PBEAML

class pyNastran.bdf.cards.properties.beam.PBMSECT(pid, mid, form, options, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

not done

dummy init

Area()[source]

Gets the area \(A\) of the CBEAM.

I11()[source]

gets I11

I22()[source]

gets I22

J()[source]

gets J

MassPerLength()[source]

Gets the mass per length \(\frac{m}{L}\) of the CBEAM.

\[\frac{m}{L} = A \rho + nsm\]
Nsm()[source]

Gets the non-structural mass \(nsm\) of the CBEAM.

_finalize_hdf5(encoding)[source]
classmethod _init_from_empty()[source]
_properties = ['outp_id']
classmethod add_card(card, comment='')[source]

Adds a PBMSECT card from BDF.add_card(...)

Parameters
cardList[str]

this card is special and is not a BDFCard like other cards

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

mid = None

Material ID

property outp_id
pid = None

Property ID

plot(model, figure_id=1, show=False)[source]

Plots the beam section

Parameters
modelBDF()

the BDF object

figure_idint; default=1

the figure id

showbool; default=False

show the figure when done

raw_fields()[source]

not done…

repr_fields()[source]

not done…

type = 'PBMSECT'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.properties.beam.update_pbeam_negative_integer(pname_fid)[source]

Converts the negative PBEAM value to a positive one

Parameters
pname_fidint

for a PBEAM this should be between [-5, -167] the negative values correspond to the numbers in the MPT OP2 table

Returns
pname_fidstr

a pname is of ‘J(3)’ is far more clear than -37

TODO: only handles istation=0 for now (e.g., ‘J(1)’)
bush Module
Inheritance diagram of pyNastran.bdf.cards.properties.bush

All bush properties are defined in this file. This includes:

  • PBUSH

  • PBUSH1D

  • PBUSH2D (not implemented)

  • PBUSHT

All bush properties are BushingProperty and Property objects.

class pyNastran.bdf.cards.properties.bush.BushingProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

dummy init

cross_reference(model: BDF) → None[source]
type = 'BushingProperty'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.properties.bush.PBUSH(pid, k, b, ge, rcv=None, mass=None, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bush.BushingProperty

Generalized Spring-and-Damper Property Defines the nominal property values for a generalized spring-and-damper structural element.

1

2

3

4

5

6

7

8

9

PBUSH

PID

K

K1

K2

K3

K4

K5

K6

B

B1

B2

B3

B4

B5

B6

GE

GE1

GE2

GE3

GE4

GE5

GE6

RCV

SA

ST

EA

ET

M

MASS

Creates a PBUSH card, which defines a property for a CBUSH

Parameters
pidint

property id

kList[float]

Nominal stiffness values in directions 1 through 6. len(k) = 6

bList[float]

Nominal damping coefficients in direction 1 through 6 in units of force per unit velocity len(b) = 6

geList[float]

Nominal structural damping constant in directions 1 through 6. len(ge) = 6

rcvList[float]; default=None -> (None, None, None, None)

[sa, st, ea, et] = rcv_fields length(rcv_fields) = 4

massfloat; default=None

lumped mass of the CBUSH This is an MSC only parameter.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod _read_rcv(card, istart)[source]
classmethod _read_var(card, var_prefix, istart, iend)[source]
classmethod add_card(card, comment='')[source]

Adds a PBUSH card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

pid = None

Property ID

pname_map = {-23: 'ET', -22: 'EA', -21: 'ST', -20: 'SA', -19: 'GE6', -18: 'GE5', -17: 'GE4', -16: 'GE3', -15: 'GE2', -14: 'GE1', -13: 'B6', -12: 'B5', -11: 'B4', -10: 'B3', -9: 'B2', -8: 'B1', -7: 'K6', -6: 'K5', -5: 'K4', -4: 'K3', -3: 'K2', -2: 'K1'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBUSH'
update_by_pname_fid(name, value)[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bush.PBUSH1D(pid: int, k: float = 0.0, c: float = 0.0, m: float = 0.0, sa: float = 0.0, se: float = 0.0, optional_vars=None, comment: str = '')[source]

Bases: pyNastran.bdf.cards.properties.bush.BushingProperty

1

2

3

4

5

6

7

8

PBUSH1D

PID

K

C

M

SA

SE

SHOCKA

TYPE

CVT

CVC

EXPVT

EXPVC

IDTS

IDETS

IDECS

IDETSD

IDECSD

SPRING

TYPE

IDT

IDC

IDTDU

IDCDU

DAMPER

TYPE

IDT

IDC

IDTDV

IDCDV

GENER

IDT

IDC

IDTDU

IDCDU

IDTDV

IDCDV

Creates a PBUSH1D card

Parameters
pidint

property id

kfloat

stiffness

cfloat

Viscous damping

mfloat

mass

safloat

Stress recovery coefficient [1/area].

sefloat

Strain recovery coefficient [1/length].

optional_varsdict[name]value; default=None
namestr

SHOCKA, SPRING, DAMPER, GENER

valuesList[varies]

the values

SHOCKA:

Coefficients of the following force versus velocity/displacement relationship F(u, v) = Cv * S(u) * sign(v) * |v|^EXPV TYPE CVT CVC EXPVT EXPVC IDTS IDETS IDECS IDETSD IDECSD CVT/CVC : int

Viscous damping coefficient CV for tension v > 0, force per unit velocity.

EXPVT/EXPVCint

Exponent of velocity EXPV for tension v > 0 (or compression v < 0).

IDTSint

Identification number of a TABLEDi entry for tension and compression if TYPE=TABLE. The TABLEDi entry defines the scale factor S, versus displacement u.

IDETS/IDECSint

Identification number of a DEQATN entry for tension if TYPE=EQUAT. The DEQATN entry defines the scale factor S, versus displacement u, for tension u > 0 (or compression v < 0).

IDETSD/IDECSDint

Identification number of a DEQATN entry for tension if TYPE=EQUAT. The DEQATN entry defines the defines the scale factor S, versus displacement u, for tension u > 0 (or compression v < 0).

SPRING:

Nonlinear elastic spring element in terms of a force versus displacement relationship TYPE IDT IDC IDTDU IDCDU

DAMPER:

Nonlinear viscous element in terms of a force versus velocity relationship. TYPE IDT IDC IDTDV IDCDV

GENER:

General nonlinear elastic spring and viscous damper element in terms of a force versus displacement and velocity relationship. For this element, the relationship can only be defined with TYPE=EQUAT (and it’s implicit). IDT IDC IDTDU IDCDU IDTDV IDCDV

TYPEint

the type of the result; {TABLE, EQUAT}

IDT/IDCint

tension/compression table/equation

IDTDU/IDCDUint

du/dt tension/compression table/eq

IDTDV/IDCDVint

dv/dt tension/compression table/eq

_damper_fields()[source]
_gener_fields()[source]
classmethod _init_from_empty()[source]
_properties = ['pname_fid_map']
static _read_damper(v) = Ft(u)[source]
static _read_gener(u, v) = Ft(u, v)[source]
static _read_shock(card, istart)[source]

F(u, v) = Cv * S(u) * sign(v) * |v|^ev

static _read_spring(u) = Ft(u)[source]
_shock_fields()[source]
_spring_fields()[source]
classmethod add_card(card, comment='')[source]

Adds a PBUSH1D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

pid = None

Property ID

pname_fid_map = {'C': 'c', 'K': 'k', 'M': 'm'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PBUSH1D'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bush.PBUSH2D(card=None, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bush.BushingProperty

dummy init

type = 'PBUSH2D'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.bush.PBUSHT(pid, k_tables, b_tables, ge_tables, kn_tables, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bush.BushingProperty

dummy init

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBUSHT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'PBUSHT'
update_by_pname_fid(name, value)[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.properties.bush._append_nones(list_obj, nrequired)[source]

this function has side effects

damper Module
Inheritance diagram of pyNastran.bdf.cards.properties.damper

All damper properties are defined in this file. This includes:

  • PDAMP

  • PDAMP5 (not implemented)

  • PDAMPT

  • PVISC

All damper properties are DamperProperty and Property objects.

class pyNastran.bdf.cards.properties.damper.DamperProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

dummy init

cross_reference(model: BDF) → None[source]
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.properties.damper.PDAMP(pid, b, comment='')[source]

Bases: pyNastran.bdf.cards.properties.damper.DamperProperty

1

2

3

4

5

6

7

8

9

PDAMP

PID1

B1

PID2

B2

PID3

B3

PID4

B4

PDAMP

1

2.0

dummy init

B()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a PDAMP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

the index of the card that’s being parsed

commentstr; default=’’

a comment for the card

b = None

Force per unit velocity (Real)

pid = None

Property ID

pname_fid_map = {3: 'b', 'B1': 'b'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PDAMP'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.damper.PDAMP5(pid, mid, b, comment='')[source]

Bases: pyNastran.bdf.cards.properties.damper.DamperProperty

Defines the damping multiplier and references the material properties for damping. CDAMP5 is intended for heat transfer analysis only.

Mid()[source]

returns the material ID of an element

Returns
midint

the Material ID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PDAMP5 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

b = None

Damping multiplier. (Real > 0.0) B is the mass that multiplies the heat capacity CP on the MAT4 or MAT5 entry.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PDAMP5'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.damper.PDAMPT(pid, tbid, comment='')[source]

Bases: pyNastran.bdf.cards.properties.damper.DamperProperty

dummy init

Tbid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PDAMPT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

pid = None

Property ID

pname_fid_map = {}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

tbid = None

Identification number of a TABLEDi entry that defines the damping force per-unit velocity versus frequency relationship

type = 'PDAMPT'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.damper.PVISC(pid, ce, cr, comment='')[source]

Bases: pyNastran.bdf.cards.properties.damper.DamperProperty

Viscous Damping Element Property Defines properties of a one-dimensional viscous damping element (CVISC entry).

1

2

3

4

5

6

7

PVISC

PID1

CE1

CR1

PID2

CE2

CR2

PVISC

3

6.2

3.94

Creates a PVISC card

Parameters
pidint

property id for a CVISC

cefloat

Viscous damping values for extension in units of force per unit velocity

crfloat

Viscous damping values for rotation in units of moment per unit velocity.

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a PMASS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

the index of the card that’s being parsed

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
pname_fid_map = {'CE1': 'ce'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PVISC'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

mass Module
Inheritance diagram of pyNastran.bdf.cards.properties.mass

All mass properties are defined in this file. This includes:

  • NSM

  • PMASS

All mass properties are PointProperty and Property objects.

class pyNastran.bdf.cards.properties.mass.NSM(sid, nsm_type, pid_eid, value, comment='')[source]

Bases: pyNastran.bdf.cards.properties.mass.NSMx

Defines a set of non structural mass.

1

2

3

4

5

6

7

8

9

NSM

SID

TYPE

ID

VALUE

ID

VALUE

ID

VALUE

See NSMx

classmethod _init_from_empty()[source]
_properties = ['ids']
type = 'NSM'
class pyNastran.bdf.cards.properties.mass.NSM1(sid, nsm_type, value, pid_eid, comment='')[source]

Bases: pyNastran.bdf.cards.properties.mass.NSM1x

Defines a set of non structural mass.

1

2

3

4

5

6

7

8

9

NSM1

SID

TYPE

VALUE

ID

ID

ID

ID

ID

ID

ID

ID

etc

See NSM1x

classmethod _init_from_empty()[source]
type = 'NSM1'
class pyNastran.bdf.cards.properties.mass.NSM1x(sid, nsm_type, value, ids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

Common class for NSM1 and NSML1

Creates an NSM1/NSML1 card

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

valuefloat

NSM1: the non-structural pass per unit length/area NSML1: the total non-structural pass per unit length/area;

the nsm will be broken down based on a weighted area/length

idsList[int]

property ids or element ids depending on nsm_type

commentstr; default=’’

a comment for the card

property Type

gets the nsm_type

classmethod add_card(card, comment='')[source]

Adds a NSM1/NSML1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

valid_properties = ['PSHELL', 'PCOMP', 'PBAR', 'PBARL', 'PBEAM', 'PBEAML', 'PBCOMP', 'PROD', 'CONROD', 'PBEND', 'PSHEAR', 'PTUBE', 'PCONEAX', 'PRAC2D', 'ELEMENT']
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.mass.NSMADD(sid, sets, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines non structural mass as the sum of the sets listed.

1

2

3

4

NSMADD

2

1

3

Creates an NSMADD card, which sum NSM sets

Parameters
sidint

the NSM Case Control value

setsList[int]

the NSM, NSM1, NSML, NSML1 values

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['nsm_ids']
classmethod add_card(card, comment='')[source]

Adds a NSMADD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property nsm_ids

gets the nonstructural-mass ids

raw_fields()[source]
safe_cross_reference(model: BDF, debug=True)[source]
type = 'NSMADD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.properties.mass.NSML(sid, nsm_type, pid_eid, value, comment='')[source]

Bases: pyNastran.bdf.cards.properties.mass.NSMx

Defines a set of lumped non structural mass.

1

2

3

4

5

6

7

8

9

NSML

SID

TYPE

ID

VALUE

ID

VALUE

ID

VALUE

Creates an NSML card, which defines lumped non-structural mass

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

pid_eidint

property id or element id depending on nsm_type

valuefloat

the non-structural pass per unit length/area

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['ids']
type = 'NSML'
class pyNastran.bdf.cards.properties.mass.NSML1(sid, nsm_type, value, ids, comment='')[source]

Bases: pyNastran.bdf.cards.properties.mass.NSM1x

Defines lumped non structural mass entries by VALUE,ID list.

1

2

3

4

5

6

7

8

9

NSML1

SID

TYPE

VALUE

ID

ID

ID

ID

ID

ID

ID

ID

etc

NSML1

3

ELEMENT

.044

1240

1500

NSML1

SID

TYPE

VALUE

ID

THRU

ID

ID

THRU

ID

ID

THRU

ID

ID

THRU

ID

ID

THRU

ID

NSML1

15

PSHELL

.067

1240

THRU

1760

2567

THRU

2568

35689

THRU

40998

76

THRU

300

NSML1

SID

TYPE

VALUE

ID

THRU

ID

BY

N

ID

THRU

ID

BY

N

NSML1

3

PSHELL

.067

1240

THRU

1760

1763

1764

2567

THRU

2568

35689

TO

40999

BY

2

76666

76668

79834

Creates an NSML card, which defines lumped non-structural mass

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

valuefloat

the non-structural pass per unit length/area

idsList[int]

property ids or element ids depending on nsm_type

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
type = 'NSML1'
class pyNastran.bdf.cards.properties.mass.NSMx(sid, nsm_type, pid_eid, value, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

Common class for NSM and NSML

Creates an NSM/NSM1 card

Parameters
sidint

Case control NSM id

nsm_typestr

Type of card the NSM is applied to valid_properties = {

PSHELL, PCOMP, PBAR, PBARL, PBEAM, PBEAML, PBCOMP, PROD, CONROD, PBEND, PSHEAR, PTUBE, PCONEAX, PRAC2D, ELEMENT

}

pid_eidint

property id or element id depending on nsm_type

valuefloat

the non-structural pass per unit length/area

commentstr; default=’’

a comment for the card

property Type

gets the nsm_type

classmethod add_card(card, icard=0, comment='')[source]

Adds an NSM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

the index of the card that’s being parsed

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

valid_properties = ['PSHELL', 'PCOMP', 'PBAR', 'PBARL', 'PBEAM', 'PBEAML', 'PBCOMP', 'PROD', 'CONROD', 'PBEND', 'PSHEAR', 'PTUBE', 'PCONEAX', 'PRAC2D', 'ELEMENT', 'PDUM8']

Set points to either Property entries or Element entries. Properties are:

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.mass.PMASS(pid, mass, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

Scalar Mass Property Specifies the mass value of a scalar mass element (CMASS1 or CMASS3 entries).

1

2

3

4

5

6

7

8

9

PMASS

PID1

M1

PID2

M2

PID3

M3

PID4

M4

PMASS

7

4.29

6

13.2

Creates an PMASS card, which defines a mass applied to a single DOF

Parameters
pidint

Property id used by a CMASS1/CMASS3 card

massfloat

the mass to apply

commentstr; default=’’

a comment for the card

Mass()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, icard=0, comment='')[source]

Adds a PMASS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

the index of the card that’s being parsed

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
pname_fid_map = {3: 'mass'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PMASS'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

properties Module
Inheritance diagram of pyNastran.bdf.cards.properties.properties
All ungrouped properties are defined in this file. This includes:
  • PFAST

  • PGAP

  • PRAC2D (CrackProperty)

  • PRAC3D (CrackProperty)

  • PCONEAX (not done)

class pyNastran.bdf.cards.properties.properties.CrackProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

dummy init

Mid() → int[source]

returns the material ID of an element

Returns
midint

the Material ID

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.properties.PFAST(pid, d, kt1, kt2, kt3, mcid=-1, mflag=0, kr1=0.0, kr2=0.0, kr3=0.0, mass=0.0, ge=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

8

9

PFAST

PID

D

MCID

MFLAG

KT1

KT2

KT3

KR1

KR2

KR3

MASS

GE

PFAST

7

1.1

70

Creates a PFAST card

Parameters
pidint

property id

dfloat

diameter of the fastener

kt1, kt2, kt3float

stiffness values in directions 1-3

mcidint; default=01

specifies the element stiffness coordinate system

mflagint; default=0

0-absolute; 1-relative

kr1, kr2, kr3float; default=0.0

rotational stiffness values in directions 1-3

massfloat; default=0.0

lumped mass of the fastener

gefloat; default=0.0

structural damping

commentstr; default=’’

a comment for the card

Mass()[source]
Mcid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PFAST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

d = None

diameter of the fastener

ge = None

Structural damping

kr1 = None

Rotational stiffness values in directions 1-3

kt1 = None

stiffness values in directions 1-3

mass = None

Lumped mass of fastener

mcid = None

Specifies the element stiffness coordinate system

mflag = None

0-absolute 1-relative

pid = None

Property ID

pname_fid_map = {'KR1': 'kr1', 'KR2': 'kr2', 'KR3': 'kr3', 'KT1': 'kt1', 'KT2': 'kt2', 'KT3': 'kt3', 'MASS': 'mass'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PFAST'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.properties.PGAP(pid, u0=0.0, f0=0.0, ka=100000000.0, kb=None, mu1=0.0, kt=None, mu2=None, tmax=0.0, mar=100.0, trmin=0.001, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

8

9

PGAP

PID

U0

F0

KA

KB

KT

MU1

MU2

TMAX

MAR

TRMIN

PGAP

2

0.025

2.5

1.E6

1.E6

0.25

0.25

Defines the properties of the gap element (CGAP entry).

Parameters
pidint

property id for a CGAP

u0float; default=0.

Initial gap opening

f0float; default=0.

Preload

kafloat; default=1.e8

Axial stiffness for the closed gap

kbfloat; default=None -> 1e-14 * ka

Axial stiffness for the open gap

mu1float; default=0.

Coefficient of static friction for the adaptive gap element or coefficient of friction in the y transverse direction for the nonadaptive gap element

ktfloat; default=None -> mu1*ka

Transverse stiffness when the gap is closed

mu2float; default=None -> mu1

Coefficient of kinetic friction for the adaptive gap element or coefficient of friction in the z transverse direction for the nonadaptive gap element

tmaxfloat; default=0.

Maximum allowable penetration used in the adjustment of penalty values. The positive value activates the penalty value adjustment

marfloat; default=100.

Maximum allowable adjustment ratio for adaptive penalty values KA and KT

trminfloat; default=0.001

Fraction of TMAX defining the lower bound for the allowable penetration

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PGAP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
f0 = None

preload

ka = None

axial stiffness of closed gap

kb = None

axial stiffness of open gap

kt = None

transverse stiffness of closed gap

mu1 = None

static friction coeff

mu2 = None

kinetic friction coeff

pid = None

Property ID

pname_fid_map = {5: 'ka', 6: 'kb', 7: 'kt', 8: 'mu1', 9: 'mu2', 10: 'tmax', 11: 'mar', 12: 'trmin', 'KA': 'ka'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PGAP'
u0 = None

initial gap opening

uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.properties.PRAC2D(pid, mid, thick, iplane, nsm=0.0, gamma=0.5, phi=180.0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.properties.CrackProperty

CRAC2D Element Property Defines the properties and stress evaluation techniques to be used with the CRAC2D structural element.

dummy init

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PRAC2D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

gamma = None

Exponent used in the displacement field. See Remark 4. (Real; Default = 0.5)

iplane = None

Plane strain or plane stress option. Use 0 for plane strain; 1 for plane stress. (Integer = 0 or 1)

mid = None

Material ID

nsm = None

Non-structural mass per unit area.(Real >= 0.0; Default = 0)

phi = None

Angle (in degrees) relative to the element x-axis along which stress intensity factors are to be calculated. See Remark 4. (Real; Default = 180.0)

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PRAC2D'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.properties.properties.PRAC3D(pid, mid, gamma=0.5, phi=180.0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.properties.CrackProperty

CRAC3D Element Property Defines the properties of the CRAC3D structural element.

dummy init

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PRAC3D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

gamma = None

Exponent used in the displacement field. See Remark 4. (Real; Default = 0.5)

mid = None

Material ID

phi = None

Angle (in degrees) relative to the element x-axis along which stress intensity factors are to be calculated. See Remark 4. (Real; Default = 180.0)

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PRAC3D'
uncross_reference() → None[source]

Removes cross-reference links

rods Module
Inheritance diagram of pyNastran.bdf.cards.properties.rods
All beam properties are defined in this file. This includes:
  • PBEAM

  • PBEAML

  • PBAR

  • PBARL

All beams are Property objects. Multi-segment beams are IntegratedLineProperty objects.

class pyNastran.bdf.cards.properties.rods.PROD(pid, mid, A, j=0.0, c=0.0, nsm=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

PROD

PID

MID

A

J

C

NSM

PROD

1

2

2.0

3.0

0.5

1.0

Creates a PROD card

Parameters
pidint

property id

midint

material id

Afloat

area

Jfloat; default=0.

polar moment of inertia

cfloat; default=0.

stress factor

nsmfloat; default=0.

nonstructural mass per unit length

commentstr; default=’’

a comment for the card

Area()[source]
C()[source]
E()[source]
G()[source]
J()[source]
MassPerLength()[source]

Gets the mass per length \(\frac{m}{L}\) of the CBEAM.

\[\frac{m}{L} = A \rho + nsm\]
Nsm()[source]
Rho()[source]
classmethod add_card(card, comment='')[source]

Adds a PROD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

pname_fid_map = {4: 'A', 'A': 'A', 5: 'J', 'J': 'j', 6: 'C', 'C': 'c'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'PROD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double=False)[source]
class pyNastran.bdf.cards.properties.rods.PTUBE(pid, mid, OD1, t=None, nsm=0.0, OD2=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

PTUBE

PID

MID

OD

T

NSM

OD2

PTUBE

2

6

6.29

0.25

Adds a PTUBE card

Parameters
pidint

property id

midint

material id

OD1float

outer diameter at End A

tfloat; default=None -> OD1/2.

thickness

nsmfloat; default=0.

non-structural mass per unit length

OD2float; default=None -> OD1

outer diameter at End B

commentstr; default=’’

a comment for the card

Area()[source]

Gets the area \(A\) of the CTUBE.

\[A_1 = \pi \frac{d_1^2}{4} - \pi {(D_1-2t)^2}{4}\]
\[A_2 = \pi \frac{d_2^2}{4} - \pi {(D_2-2t)^2}{4}\]
\[A = A_1 + A_2\]
E()[source]
G()[source]
J()[source]
MassPerLength()[source]

Gets the mass per length \(\frac{m}{L}\) of the CTUBE.

\[\frac{m}{L} = (A \rho) nsm\]
Nsm()[source]

Gets the non-structural mass \(nsm\) of the CTUBE.

Rho()[source]

Gets the density :math:`

ho` of the CTUBE.

_area1()[source]

Gets the Area of Section 1 of the CTUBE.

_area2()[source]

Gets the Area of Section 2 of the CTUBE.

classmethod add_card(card, comment='')[source]

Adds a PTUBE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

pname_fid_map = {4: 'OD1', 'OD': 'OD1', 5: 't', 'T': 't', 7: 'OD2', 'OD2': 'OD2'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

type = 'PTUBE'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

shell Module
Inheritance diagram of pyNastran.bdf.cards.properties.shell

All shell properties are defined in this file. This includes:

  • PCOMP

  • PCOMPG

  • PLPLANE

  • PSHEAR

  • PSHELL

  • PPLANE

All shell properties are Property objects.

class pyNastran.bdf.cards.properties.shell.CompositeShellProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

Common class for:
  • PCOMP

  • PCOMPG

dummy init

MassPerArea(iply='all', method='nplies', tflag: int = 1, tscales=None)[source]
MassPerArea_structure() → float[source]
Material(iply: int) → Union[MAT1, MAT8, MAT9][source]

Gets the material of the \(i^{th}\) ply (not the ID unless it is not cross-referenced).

Parameters
iplyint

the ply ID (starts from 0)

Mid(iply: int) → int[source]

Gets the Material ID of the \(i^{th}\) ply.

Parameters
iplyint/str; default=’all’

the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

Returns
material_idint

the material id of the ith ply

Mids() → List[int][source]
Nsm() → float[source]
Rho(iply: int) → float[source]
property TRef
Theta(iply: int) → float[source]
Thickness(iply: Union[int, str] = 'all', tflag: int = 1, tscales=None)[source]
_adjust_ply_id(iply: int) → int[source]

Gets the ply ID that’s stored in self.plies.

When a ply is not symmetric, this function returns the input iply. When a ply is symmetrical and the iply value is greater than the number of plies, we return the mirrored ply. For the case of a symmetrical ply, the element will always have an even number of layers.

Parameters
iplyint

the ply ID (0-based)

Raises
  • IndexError if iply is invalid
::
Case 1 (nplies=6, len(plies)=3, lam=’SYM’):

ply 2 ply 1 ply 0 ——- sym ply 0 / 3 ply 1 / 4 ply 2 / 5

Ask for ply 3, return ply 0 Ask for ply 4, return ply 1 Ask for ply 5, return ply 2

Case 2 (nplies=5, len(plies)=5, lam=’NO’):

ply 5 ply 4 ply 3 ply 1 ply 0

Ask for ply 3, return ply 1 Ask for ply 4, return ply 2

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_density(iply: int) → float[source]

Gets the density of the \(i^{th}\) ply

Parameters
iplyint

the ply ID (starts from 0)

get_mass_per_area(iply='all', method: str = 'nplies') → float[source]

Gets the Mass/Area for the property.

\[\frac{m}{A} = \sum(\rho t) + nsm\]

or

\[\frac{m}{A} - nsm = \sum(\rho t)\]

and

\[\frac{m_i}{A} = rho_i t_i + nsm_i\]

where \(nsm_i\) is the non-structural mass of the \(i^{th}\) ply

Parameters
iplystr/int; default=’all’

str : the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

methodstr

the method to compute MassPerArea {nplies, rho*t, t}

  • Case 1 (iply = all)

    method has no effect because the total nsm is defined

  • Case 2 (iply != all)

    method ‘nplies’ smear the nsm based on \(n_{plies}\) (default)

    \(nsm_i = nsm / n_{plies}\) # smear based on nplies

  • Case 3 (iply != all)

    method ‘rho*t’ smear the nsm based on the mass distribution

    \[nsm_i = \rho_i t_i \frac{nsm}{\sum(\rho_i t_i)}\]
    \[nsm_i = \rho_i t_i \frac{nsm}{\frac{m}{A} - nsm}\]
  • Case 4 (iply != all)

    method ‘t’ smear the nsm based on the thickness distribution

    \[nsm_i = t_i \frac{nsm}{\sum(t_i)}\]
.. note:: final mass calculation will be done later
get_mass_per_area_rho(rhos: List[float], iply='all', method: str = 'nplies') → float[source]

Gets the Mass/Area for the property.

\[\frac{m}{A} = \sum(\rho t) + nsm\]

or

\[\frac{m}{A} - nsm = \sum(\rho t)\]

and

\[\frac{m_i}{A} = rho_i t_i + nsm_i\]

where \(nsm_i\) is the non-structural mass of the \(i^{th}\) ply

Parameters
rhosList[float]

the densities of each ply

iplystr/int; default=’all’

the mass per area of the \(i^{th}\) ply

methodstr

the method to compute MassPerArea {nplies, rho*t, t}

  • Case 1 (iply = all)

    method has no effect because the total nsm is defined

  • Case 2 (iply != all)

    method ‘nplies’ smear the nsm based on \(n_{plies}\) (default)

    \(nsm_i = nsm / n_{plies}\) # smear based on nplies

  • Case 3 (iply != all)

    method ‘rho*t’ smear the nsm based on the mass distribution

    \[nsm_i = \rho_i t_i \frac{nsm}{\sum(\rho_i t_i)}\]
    \[nsm_i = \rho_i t_i \frac{nsm}{\frac{m}{A} - nsm}\]
  • Case 4 (iply != all)

    method ‘t’ smear the nsm based on the thickness distribution

    \[nsm_i = t_i \frac{nsm}{\sum(t_i)}\]
.. note:: final mass calculation will be done later
get_mass_per_area_structure(rhos: List[float]) → float[source]

Gets the Mass/Area for the property structure only (doesn’t consider nsm).

\[\frac{m}{A} = \sum(\rho t)\]
Parameters
rhosList[float]

the densities of each ply

get_material_id(iply: int) → int[source]

iply - 0 based

get_material_ids(include_symmetry: bool = True)[source]
get_nonstructural_mass() → float[source]

Gets the non-structural mass \(i^{th}\) ply

get_sout(iply: int) → str[source]

Gets the the flag identifying stress/strain outpur of the \(i^{th}\) ply (not the ID). default=’NO’.

Parameters
iplyint

the ply ID (starts from 0)

get_souts(include_symmetry: bool = True) → numpy.ndarray[source]
get_theta(iply: int) → float[source]

Gets the ply angle of the \(i^{th}\) ply (not the ID)

Parameters
iplyint

the ply ID (starts from 0)

get_thetas(include_symmetry: bool = True) → numpy.ndarray[source]
get_thickness(iply: Union[int, str] = 'all') → float[source]

Gets the thickness of the \(i^{th}\) ply.

Parameters
iplyint/str; default=’all’

the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

Returns
thicknessfloat

the thickness of the ply or plies

get_thicknesses(include_symmetry: bool = True) → numpy.ndarray[source]
get_z_locations() → numpy.ndarray[source]

Gets the z locations for the various plies.

Parameters
iplyint

the ply ID (starts from 0)

Assume there are 2 plies, each of 1.0 thick, starting frommath:z=0.
>>> pcomp.get_z_locations()
[0., 1., 2.]
property is_symmetrical

Is the laminate symmetrical?

Returns
is_symmetricalbool

is the SYM flag active?

property material_ids

Gets the material IDs of all the plies

Returns
midsMATx

the material IDs

property nplies

Gets the number of plies including the core.

if Lam=SYM:
  returns nplies * 2   (even)
else:
  returns nplies
sout(iply: int) → str[source]
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.properties.shell.PCOMP(pid: int, mids: List[int], thicknesses: List[float], thetas: Optional[List[float]] = None, souts: Optional[List[str]] = None, nsm: float = 0.0, sb: float = 0.0, ft: Optional[str] = None, tref: float = 0.0, ge: float = 0.0, lam: Optional[str] = None, z0: Optional[float] = None, comment: str = '')[source]

Bases: pyNastran.bdf.cards.properties.shell.CompositeShellProperty

1

2

3

4

5

6

7

8

9

PCOMP

PID

Z0

NSM

SB

FT

TREF

GE

LAM

MID1

T1

THETA1

SOUT1

MID2

T2

THETA2

SOUT2

MID3

T3

THETA3

SOUT3

etc.

PCOMP

701512

0.0+0

1.549-2

0.0+0

0.0+0

SYM

300704

3.7-2

0.0+0

YES

300704

3.7-2

YES

300704

3.7-2

-45.

YES

300704

3.7-2

YES

300705

.5

0.0+0

YES

Creates a PCOMP card

pidint

property id

midsList[int, …, int]

material ids for each ply

thicknessesList[float, …, float]

thicknesses for each ply

thetasList[float, …, float]; default=None

ply angle None : [0.] * nplies

soutsList[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsmfloat; default=0.

nonstructural mass per unit area

sbfloat; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ftstr; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

treffloat; default=0.

reference temperature

gefloat; default=0.

structural damping

lamstr; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['_field_map', 'plies', 'nplies', 'material_ids']
classmethod add_card(card: BDFCard, comment='')[source]

Adds a PCOMP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

ft = None

Failure Theory [‘HILL’, ‘HOFF’, ‘TSAI’, ‘STRN’, None]

get_ABD_matrices(theta_offset: float = 0.0) → numpy.ndarray[source]

Gets the ABD matrix

Parameters
theta_offsetfloat

rotates the ABD matrix; measured in degrees

get_Qbar_matrix(mid_ref: Union[MAT1, MAT8], theta: float) → np.ndarray[source]

theta must be in radians

get_Sbar_matrix(mid_ref, theta: float) → numpy.ndarray[source]

theta must be in radians

get_individual_ABD_matrices(theta_offset: float = 0.0) → Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray][source]

Gets the ABD matrix

Parameters
theta_offsetfloat

rotates the ABD matrix; measured in degrees

get_z0_z1_zmean()[source]
is_balanced_symmetric(debug=True)[source]

assumes materials with different mids are unique

lam = None

symmetric flag - default = No Symmetry (=None)

nsm = None

Non-Structural Mass per unit Area

pid = None

Property ID

property plies
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

tref = None

Reference Temperature (default=0.0)

type = 'PCOMP'
update_by_pname_fid(pname_fid: Union[str, int], value: Union[int, float, str]) → None[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PCOMPG(pid: int, global_ply_ids: List[int], mids: List[int], thicknesses: List[float], thetas: Optional[List[float]] = None, souts: Optional[List[str]] = None, nsm: float = 0.0, sb: float = 0.0, ft: Optional[str] = None, tref: float = 0.0, ge: float = 0.0, lam: Optional[str] = None, z0: Optional[float] = None, comment: str = '')[source]

Bases: pyNastran.bdf.cards.properties.shell.CompositeShellProperty

1

2

3

4

5

6

7

8

9

PCOMPG

PID

Z0

NSM

SB

FT

TREF

GE

LAM

GPLYID1

MID1

T1

THETA1

SOUT1

GPLYID2

MID2

T2

THETA2

SOUT2

Creates a PCOMPG card

Parameters
pidint

property id

global_ply_idsList[int]

the ply id

midsList[int, …, int]

material ids for each ply

thicknessesList[float, …, float]

thicknesses for each ply

thetasList[float, …, float]; default=None

ply angle None : [0.] * nplies

soutsList[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsmfloat; default=0.

nonstructural mass per unit area

sbfloat; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ftstr; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

treffloat; default=0.

reference temperature

gefloat; default=0.

structural damping

lamstr; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

commentstr; default=’’

a comment for the card

GlobalPlyID(iply: int) → int[source]

returns the global ply id for the specified layer

classmethod _init_from_empty()[source]
_properties = ['_field_map', 'plies', 'nplies', 'material_ids']
classmethod add_card(card: BDFCard, comment: str = '')[source]

Adds a PCOMPG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

ft = None

Failure Theory

[‘HILL’, ‘HOFF’, ‘TSAI’, ‘STRN’, None]

get_global_ply_ids(include_symmetry: bool = True) → numpy.ndarray[source]
lam = None

symmetric flag - default = No Symmetry (NO)

nsm = None

Non-Structural Mass per unit Area

pid = None

Property ID

property plies
pname_fid_map = {}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

tref = None

Reference Temperature (default=0.0)

type = 'PCOMPG'
update_by_pname_fid(pname_fid: Union[str, int], value) → None[source]
validate() → None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PLPLANE(pid, mid, cid=0, stress_strain_output_location='GRID', comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

Fully Nonlinear Plane Element Properties (SOL 601) Defines the properties of a fully nonlinear (i.e., large strain and large rotation) hyperelastic plane strain or axisymmetric element.

1

2

3

4

5

PLPLANE

PID

MID

CID

STR

MSC

1

2

3

4

5

6

PLPLANE

PID

MID

CID

STR

T

NX

Referenced by:

#- CQUAD, CQUAD4, CQUAD8, CQUADX, CTRIA3, CTRIA6, CTRIAX (MSC) #- CPLSTS3, CPLSTS4, CPLSTS6, CPLSTS8 entries (NX 10)

Creates a PLPLANE card, which defines the properties of a fully nonlinear (i.e., large strain and large rotation) hyperelastic plane strain or axisymmetric element.

Parameters
pidint

property id

midint

material id; MATHP / MATHE

cidint; default=0

???

stress_strain_output_locationstr; default=’GRID’

???

commentstr; default=’’

a comment for the card

Cid()[source]
Mid()[source]

returns the material id

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PLPLANE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PLPLANE'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PPLANE(pid, mid, t=0.0, nsm=0.0, formulation_option=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

NX specific card

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid()[source]

returns the material id

Thickness()[source]

returns the thickness of the element

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PPLANE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PPLANE'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PSHEAR(pid: int, mid: int, t: float, nsm: float = 0.0, f1: float = 0.0, f2: float = 0.0, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.Property

Defines the properties of a shear panel (CSHEAR entry).

1

2

3

4

5

6

7

PSHEAR

PID

MID

T

NSM

F1

F2

Creates a PSHEAR card

Parameters
pidint

property id

midint

material id

tfloat

shear panel thickness

nsmfloat; default=0.

nonstructural mass per unit length

f1float; default=0.0

Effectiveness factor for extensional stiffness along edges 1-2 and 3-4

f2float; default=0.0

Effectiveness factor for extensional stiffness along edges 2-3 and 1-4

commentstr; default=’’

a comment for the card

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid()[source]

returns the material id

Rho()[source]

returns the material density

Thickness()[source]

returns the thickness of the element

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PSHEAR card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

pname_fid_map = {4: 't', 'T': 't'}
raw_fields()[source]
type = 'PSHEAR'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PSHELL(pid: int, mid1: Optional[int] = None, t: Optional[float] = None, mid2: Optional[int] = None, twelveIt3: float = 1.0, mid3: Optional[int] = None, tst: float = 0.833333, nsm: float = 0.0, z1: Optional[float] = None, z2: Optional[float] = None, mid4: Optional[int] = None, comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

8

9

PSHELL

PID

MID1

T

MID2

12I/T**3

MID3

TS/T

NSM

Z1

Z2

MID4

PSHELL

41111

1

1.0000

1

1

0.02081

Creates a PSHELL card

Parameters
pidint

property id

mid1int; default=None

defines membrane material defines element density (unless blank)

mid2int; default=None

defines bending material defines element density if mid1=None

mid3int; default=None

defines transverse shear material (only defined if mid2 > 0)

mid4int; default=None

defines membrane-bending coupling material (only defined if mid1 > 0 and mid2 > 0; can’t be mid1/mid2)

twelveIt3float; default=1.0

Bending moment of inertia ratio, 12I/T^3. Ratio of the actual bending moment inertia of the shell, I, to the bending moment of inertia of a homogeneous shell, T^3/12. The default value is for a homogeneous shell.

nsmfloat; default=0.0

non-structural mass per unit area

z1 / z2float; default=None

fiber distance location 1/2 for stress/strain calculations z1 default : -t/2 if thickness is defined z2 default : t/2 if thickness is defined

commentstr; default=’’

a comment for the card

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

MassPerArea_no_xref(model, tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

MassPerArea_structure()[source]

Calculates mass per area without considering non-structural mass.

\[\]

rac{m}{A} = nsm + ho t

Mid() → Optional[int][source]

returns the material id used for mass

Mid1() → Optional[int][source]

returns the extension material id

Mid2() → Optional[int][source]

returns the bending material id

Mid3() → Optional[int][source]
Mid4() → Optional[int][source]
Nsm() → float[source]

returns the non-structural mass

Rho() → float[source]

returns the material density

Thickness(tflag: int = 1, tscales=None)[source]

returns the thickness of the element

classmethod add_card(card, comment='')[source]

Adds a PSHELL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

get_ABD_matrices(theta_offset=0.0) → numpy.ndarray[source]

Gets the ABD matrix

Parameters
theta_offsetfloat

rotates the ABD matrix; measured in degrees

get_Qbar_matrix(mid_ref, theta=0.0)[source]

theta must be in radians

get_Sbar_matrix(mid_ref, theta=0.0)[source]

theta must be in radians

get_individual_ABD_matrices(theta_offset: float = 0.0) → Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray][source]

Gets the ABD matrix

Parameters
theta_offsetfloat

rotates the ABD matrix; measured in degrees

http://www2.me.rochester.edu/courses/ME204/nx_help/index.html#uid:id503291
Understanding Classical Lamination Theory
get_z_locations() → List[float][source]

returns the locations of the bottom and top surface of the shell

property material_ids

returns the material ids

materials()[source]

returns the material objects referenced by the shell

mid2 = None

Material identification number for bending -1 for plane strin

property mid_ref

returns the material used for mass

nsm = None

Non-structural Mass

pid = None

Property ID

pname_fid_map = {4: 't', 'T': 't', 6: 'twelveIt3', 8: 'tst'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

t = None

thickness

tst = None

Transverse shear thickness ratio, . Ratio of the shear thickness, ts/t, to the membrane thickness of the shell, t. The default value is for a homogeneous shell.

twelveIt3 = None

Scales the moment of interia of the element based on the moment of interia for a plate

..math:: I = frac{12I}{t^3} I_{plate}

type = 'PSHELL'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.properties.shell.get_2d_plate_transform(theta: float) → numpy.ndarray[source]

theta must be in radians

pyNastran.bdf.cards.properties.shell.map_failure_theory_int(ft: int) → Optional[str][source]
solid Module
Inheritance diagram of pyNastran.bdf.cards.properties.solid
All solid properties are defined in this file. This includes:
  • PCOMPS

  • PLSOLID

  • PSOLID

All solid properties are Property objects.

class pyNastran.bdf.cards.properties.solid.PCOMPS(pid, global_ply_ids, mids, thicknesses, thetas, cordm=0, psdir=13, sb=None, nb=None, tref=0.0, ge=0.0, failure_theories=None, interlaminar_failure_theories=None, souts=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

dummy init

Mid(iply: int = 0)[source]

returns the material ID of an element

Returns
midint

the Material ID

Mids()[source]
Rho()[source]

Returns the density

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PCOMPS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
property material_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PCOMPS'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.solid.PIHEX(pid, mid, cordm=0, integ=None, stress=None, isop=None, fctn='SMECH', comment='')[source]

Bases: pyNastran.bdf.cards.properties.solid.PSOLID

Creates a PSOLID card

Parameters
pidint

property id

midint

material id

cordmint; default=0

material coordinate system

integint; default=None

None-varies depending on element type 0, ‘BUBBLE’ 1, ‘GAUSS’ 2, ‘TWO’ 3, ‘THREE’ REDUCED FULL

stressint/str; default=None

None/GRID, 1-GAUSS

isopint/str; default=None

0-REDUCED 1-FULL

fctnstr; default=’SMECH’

PFLUID/SMECH

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PIHEX'
class pyNastran.bdf.cards.properties.solid.PLSOLID(pid, mid, stress_strain='GRID', ge=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

Defines a fully nonlinear (i.e., large strain and large rotation) hyperelastic solid element.

1

2

3

4

PLSOLID

PID

MID

STR

PLSOLID

20

21

Creates a PLSOLID card

Parameters
pidint

property id

midint

material id

stress_strainstr

Location of stress and strain output valid types = {GRID, GAUSS}

gefloat; default=0.

damping coefficient

commentstr; default=’’

a comment for the card

Rho()[source]

Returns the density

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PLSOLID card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

raw_fields()[source]
stress_strain = None

Location of stress and strain output

type = 'PLSOLID'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.solid.PSOLID(pid, mid, cordm=0, integ=None, stress=None, isop=None, fctn='SMECH', comment='')[source]

Bases: pyNastran.bdf.cards.base_card.Property

1

2

3

4

5

6

7

8

PSOLID

PID

MID

CORDM

IN

STRESS

ISOP

FCTN

PSOLID

1

1

0

PSOLID

2

100

6

TWO

GRID

REDUCED

Creates a PSOLID card

Parameters
pidint

property id

midint

material id

cordmint; default=0

material coordinate system

integint; default=None

None-varies depending on element type 0, ‘BUBBLE’ 1, ‘GAUSS’ 2, ‘TWO’ 3, ‘THREE’ REDUCED FULL

stressint/str; default=None

None/GRID, 1-GAUSS

isopint/str; default=None

0-REDUCED 1-FULL

fctnstr; default=’SMECH’

PFLUID/SMECH

commentstr; default=’’

a comment for the card

E()[source]
G()[source]
Nu()[source]
Rho()[source]

Returns the density

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PSOLID card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

cross reference method for a PSOLID

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

materials()[source]
mid = None

Material ID

pid = None

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PSOLID'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

springs Module
Inheritance diagram of pyNastran.bdf.cards.properties.springs

All spring properties are defined in this file. This includes:

  • PELAS

  • PELAST

All spring properties are SpringProperty and Property objects.

class pyNastran.bdf.cards.properties.springs.PELAS(pid, k, ge=0.0, s=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.springs.SpringProperty

Specifies the stiffness, damping coefficient, and stress coefficient of a scalar elastic (spring) element (CELAS1 or CELAS3 entry).

Creates a PELAS card

Parameters
pidint

property id

kfloat

spring stiffness

geint; default=0.0

damping coefficient

sfloat; default=0.0

stress coefficient

commentstr; default=’’

a comment for the card

K()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a PELAS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

the index of the PELAS card that’s being parsed must be 0 or 1

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
ge = None

Damping coefficient, . See Remarks 5. and 6. (Real) To obtain the damping coefficient GE, multiply the critical damping ratio c/c0 by 2.0.

k = None

Ki Elastic property value. (Real)

pid = None

Property identification number. (Integer > 0)

pname_fid_map = {'GE1': 'ge', 'K1': 'k'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

s = None

Stress coefficient. (Real)

type = 'PELAS'
uncross_reference() → None[source]

Removes cross-reference links

class pyNastran.bdf.cards.properties.springs.PELAST(pid, tkid=0, tgeid=0, tknid=0, comment='')[source]

Bases: pyNastran.bdf.cards.properties.springs.SpringProperty

Frequency Dependent Elastic Property Defines the frequency dependent properties for a PELAS Bulk Data entry.

The PELAST entry is ignored in all solution sequences except frequency response (108) or nonlinear analyses (129).

Creates a PELAST card

Parameters
pidint

property id

tkidfloat

TABLEDx that defines k vs. frequency

tgeidint; default=0

TABLEDx that defines ge vs. frequency

sfloat; default=0.

TABLEDx that defines force vs. displacement

commentstr; default=’’

a comment for the card

Pid()[source]

returns the property ID of an property

Returns
pidint

the Property ID

Tgeid()[source]

Returns the table ID for nondimensional structural damping coefficient vs. frequency (c/c0 vs freq)

Tkid()[source]

Returns the table ID for force per unit displacement vs frequency (k=F/d vs freq)

Tknid()[source]

Returns the table ID for nondimensional force vs. displacement

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PELAST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

pid = None

Property identification number. (Integer > 0)

pname_fid_map = {'TKID': 'tknid'}
raw_fields()[source]
tgeid = None

Identification number of a TABLEDi entry that defines the nondimensional structural damping coefficient vs. frequency relationship. (Integer > 0; Default = 0)

tkid = None

Identification number of a TABLEDi entry that defines the force per unit displacement vs. frequency relationship. (Integer > 0; Default = 0)

tknid = None

Identification number of a TABELDi entry that defines the nonlinear force vs. displacement relationship. (Integer > 0; Default = 0)

type = 'PELAST'
uncross_reference(model)[source]
class pyNastran.bdf.cards.properties.springs.SpringProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

dummy init

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

loads Package
dloads Module
Inheritance diagram of pyNastran.bdf.cards.loads.dloads

All dynamic loads are defined in this file. This includes:

  • ACSRCE

  • DLOAD

  • TLOAD1

  • TLOAD2

  • RLOAD1

  • RLOAD2

class pyNastran.bdf.cards.loads.dloads.ACSRCE(sid, excite_id, rho, b, delay=0, dphase=0, power=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines acoustic source as a function of power vs. frequency.

1

2

3

4

5

6

7

8

ACSRCE

SID

EXCITEID

DELAYI/DELAYR

DPHASEI/DPHASER

TP/RP

RHO

B

..math ::

C = sqrt(B ⁄ ρ) Source Strength = {A} * 1/(2πf) * sqrt( 8πC P(f) / ρ) ^ (ei(θ + 2πfτ))

Creates an ACSRCE card

Parameters
sidint

load set id number (referenced by DLOAD)

excite_idint

Identification number of a DAREA or SLOAD entry that lists each degree of freedom to apply the excitation and the corresponding scale factor, A, for the excitation

rhofloat

Density of the fluid

bfloat

Bulk modulus of the fluid

delayint; default=0

Time delay, τ.

dphaseint / float; default=0

the dphase; if it’s 0/blank there is no phase lag float : delay in units of time int : delay id

powerint; default=0

Power as a function of frequency, P(f). float : value of P(f) used over all frequencies for all

degrees of freedom in EXCITEID entry.

intTABLEDi entry that defines P(f) for all degrees of

freedom in EXCITEID entry.

commentstr; default=’’

a comment for the card

DPhase()[source]
Delay()[source]
Power()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a ACSRCE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_load_at_freq(freq)[source]
..math ::

C = sqrt(B ⁄ ρ) Source_strength = {A} * 1/(2πf) * sqrt( 8πC P(f) / ρ) ^ (ei(θ + 2πfτ))

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'ACSRCE'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.dloads.DLOAD(sid, scale, scale_factors, load_ids, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.LoadCombination

1

2

3

4

5

6

7

8

9

DLOAD

SID

S

S1

L1

S2

L2

S3

L3

S4

L4

etc.

Creates a DLOAD card

Parameters
sidint

Load set identification number. See Remarks 1. and 4. (Integer > 0)

scalefloat

Scale factor. See Remarks 2. and 8. (Real)

SiList[float]

Scale factors. See Remarks 2., 7. and 8. (Real)

load_idsList[int]

Load set identification numbers of RLOAD1, RLOAD2, TLOAD1, TLOAD2, and ACSRCE entries. See Remarks 3 and 7. (Integer > 0)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'DLOAD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.dloads.RLOAD1(sid, excite_id, delay=0, dphase=0, tc=0, td=0, Type='LOAD', comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.DynamicLoad

Defines a frequency-dependent dynamic load of the form for use in frequency response problems.

\[\left\{ P(f) \right\} = \left\{A\right\} [ C(f)+iD(f)] e^{ i \left\{\theta - 2 \pi f \tau \right\} }\]

1

2

3

4

5

6

7

8

RLOAD1

SID

EXCITEID

DELAY

DPHASE

TC

TD

TYPE

RLOAD1

5

3

1

NX allows DELAY and DPHASE to be floats

Creates an RLOAD1 card, which defienes a frequency-dependent load based on TABLEDs.

Parameters
sidint

load id

excite_idint

node id where the load is applied

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

dphaseint/float; default=None

the dphase; if it’s 0/blank there is no phase lag float : delay in units of time int : delay id

tcint/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

tdint/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

commentstr; default=’’

a comment for the card

Tc()[source]
Td()[source]
classmethod _init_from_empty()[source]
_properties = ['delay_id', 'dphase_id']
classmethod add_card(card, comment='')[source]

Adds a RLOAD1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property delay_id
property dphase_id
get_load_at_freq(freq, scale=1.0)[source]
get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'RLOAD1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.dloads.RLOAD2(sid, excite_id, delay=0, dphase=0, tb=0, tp=0, Type='LOAD', comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.DynamicLoad

Defines a frequency-dependent dynamic load of the form for use in frequency response problems.

\[\left\{ P(f) \right\} = \left\{A\right\} * B(f) e^{ i \left\{ \phi(f) + \theta - 2 \pi f \tau \right\} }\]

1

2

3

4

5

6

7

8

RLOAD2

SID

EXCITEID

DELAY

DPHASE

TB

TP

TYPE

RLOAD2

5

3

1

NX allows DELAY and DPHASE to be floats

Creates a nRLOAD2 card, which defienes a frequency-dependent load based on TABLEDs.

Parameters
sidint

load id

excite_idint

node id where the load is applied

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

dphaseint/float; default=None

the dphase; if it’s 0/blank there is no phase lag float : delay in units of time int : delay id

tbint/float; default=0

TABLEDi id that defines B(f) for all degrees of freedom in EXCITEID entry

tcint/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

tdint/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

tpint/float; default=0

TABLEDi id that defines phi(f) for all degrees of freedom in EXCITEID entry

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

commentstr; default=’’

a comment for the card

LoadID()[source]
Tb()[source]
Tp()[source]
classmethod _init_from_empty()[source]
_properties = ['delay_id', 'dphase_id']
classmethod add_card(card, comment='')[source]

Adds a RLOAD2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property delay_id
property dphase_id
get_load_at_freq(freq, scale=1.0)[source]
get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'RLOAD2'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.dloads.TLOAD1(sid, excite_id, tid, delay=0, Type='LOAD', us0=0.0, vs0=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.DynamicLoad

Transient Response Dynamic Excitation, Form 1

Defines a time-dependent dynamic load or enforced motion of the form:

\[\left\{ P(t) \right\} = \left\{ A \right\} \cdot F(t-\tau)\]

for use in transient response analysis.

MSC 20005.2 +——–+—–+———-+——-+——+—–+—–+—–+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +========+=====+==========+=======+======+=====+=====+=====+ | TLOAD1 | SID | EXCITEID | DELAY | TYPE | TID | US0 | VS0 | +——–+—–+———-+——-+——+—–+—–+—–+

NX 11 +——–+—–+———-+——-+——+—–+ | 1 | 2 | 3 | 4 | 5 | 6 | +========+=====+==========+=======+======+=====+ | TLOAD1 | SID | EXCITEID | DELAY | TYPE | TID | +——–+—–+———-+——-+——+—–+

Creates a TLOAD1 card, which defienes a time-dependent load based on a DTABLE.

Parameters
sidint

load id

excite_idint

node id where the load is applied

tidint

TABLEDi id that defines F(t) for all degrees of freedom in EXCITEID entry float : MSC not supported

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

us0float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

commentstr; default=’’

a comment for the card

Tid()[source]
Type = None

Defines the type of the dynamic excitation. (LOAD,DISP, VELO, ACCE)

classmethod _init_from_empty()[source]
_properties = ['delay_id']
classmethod add_card(card, comment='')[source]

Adds a TLOAD1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

delay = None

If it is a non-zero integer, it represents the identification number of DELAY Bulk Data entry that defines . If it is real, then it directly defines the value of that will be used for all degrees-of-freedom that are excited by this dynamic load entry. See also Remark 9. (Integer >= 0, real or blank)

property delay_id
excite_id = None

Identification number of DAREA or SPCD entry set or a thermal load set (in heat transfer analysis) that defines {A}. (Integer > 0)

get_load_at_time(time, scale=1.0)[source]
get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, debug=True)[source]
sid = None

load ID

tid = None

Identification number of TABLEDi entry that gives F(t). (Integer > 0)

type = 'TLOAD1'
uncross_reference() → None[source]

Removes cross-reference links

us0 = None

Factor for initial displacements of the enforced degrees-of-freedom. (Real; Default = 0.0)

validate()[source]

card checking method that should be overwritten

vs0 = None

Factor for initial velocities of the enforced degrees-of-freedom. (Real; Default = 0.0)

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.dloads.TLOAD2(sid, excite_id, delay=0, Type='LOAD', T1=0.0, T2=None, frequency=0.0, phase=0.0, c=0.0, b=0.0, us0=0.0, vs0=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.DynamicLoad

Transient Response Dynamic Excitation, Form 1

Defines a time-dependent dynamic load or enforced motion of the form:

\[\]

left{ P(t) right} = left{ A right} e^(C*t) cos(2 pi f t + phi)

P(t) = 0 (t<T1+tau or t > T2+tau) P(t) = {A} * t^b * e^(C*t) * cos(2*pi*f*t + phase) (T1+tau <= t <= T2+tau)

for use in transient response analysis.

MSC 2016.1 +——–+—–+———-+——-+——+—–+—–+——–+———+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +========+=====+==========+=======+======+=====+=====+========+=========+ | TLOAD2 | SID | EXCITEID | DELAY | TYPE | T1 | T2 | FREQ | PHASE | +——–+—–+———-+——-+——+—–+—–+——–+———+ | | C | B | US0 | VS0 | | | | | +——–+—–+———-+——-+——+—–+—–+——–+———+

NX 11 +——–+—–+———-+——-+——+—–+—–+——–+———+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +========+=====+==========+=======+======+=====+=====+========+=========+ | TLOAD2 | SID | EXCITEID | DELAY | TYPE | T1 | T2 | FREQ | PHASE | +——–+—–+———-+——-+——+—–+—–+——–+———+ | | C | B | | | | | | | +——–+—–+———-+——-+——+—–+—–+——–+———+

Creates a TLOAD2 card, which defines a exponential time dependent load based on constants.

Parameters
sidint

load id

excite_idint

node id where the load is applied

delayint/float; default=None

the delay; if it’s 0/blank there is no delay float : delay in units of time int : delay id

Typeint/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

T1float; default=0.

time constant (t1 > 0.0) times below this are ignored

T2float; default=None

time constant (t2 > t1) times above this are ignored

frequencyfloat; default=0.

Frequency in cycles per unit time.

phasefloat; default=0.

Phase angle in degrees.

cfloat; default=0.

Exponential coefficient.

bfloat; default=0.

Growth coefficient.

us0float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

commentstr; default=’’

a comment for the card

T1 = None

Time constant. (Real >= 0.0)

T2 = None

Time constant. (Real; T2 > T1)

Type = None

Defines the type of the dynamic excitation. (Integer; character or blank; Default = 0)

classmethod _init_from_empty()[source]
_properties = ['delay_id']
classmethod add_card(card, comment='')[source]

Adds a TLOAD2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

b = None

Growth coefficient. (Real; Default = 0.0)

c = None

Exponential coefficient. (Real; Default = 0.0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property delay_id
frequency = None

Frequency in cycles per unit time. (Real >= 0.0; Default = 0.0)

get_load_at_time(time, scale=1.0)[source]
get_loads()[source]
phase = None

Phase angle in degrees. (Real; Default = 0.0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
sid = None

load ID SID must be unique for all TLOAD1, TLOAD2, RLOAD1, RLOAD2, and ACSRCE entries.

type = 'TLOAD2'
uncross_reference() → None[source]

Removes cross-reference links

us0 = None

Factor for initial displacements of the enforced degrees-of-freedom. (Real; Default = 0.0)

validate()[source]

card checking method that should be overwritten

vs0 = None

Factor for initial velocities of the enforced degrees-of-freedom (Real; Default = 0.0)

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

pyNastran.bdf.cards.loads.dloads._cross_reference_excite_id(self, model, msg)[source]

not quite done…not sure how to handle the very odd xref

EXCITEID may refer to one or more static load entries (FORCE, PLOADi, GRAV, etc.).

pyNastran.bdf.cards.loads.dloads._cross_reference_excite_id_backup(self, model, msg)[source]

not quite done…not sure how to handle the very odd xref

EXCITEID may refer to one or more static load entries (FORCE, PLOADi, GRAV, etc.).

pyNastran.bdf.cards.loads.dloads.get_lseqs_by_excite_id(model, excite_id)[source]
pyNastran.bdf.cards.loads.dloads.update_loadtype(load_type)[source]
loads Module
Inheritance diagram of pyNastran.bdf.cards.loads.loads

All static loads are defined in this file. This includes:

  • LSEQ

  • DAREA

  • SLOAD

  • RFORCE

  • RANDPS

class pyNastran.bdf.cards.loads.loads.DAREA(sid, nodes, components, scales, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines scale (area) factors for static and dynamic loads. In dynamic analysis, DAREA is used in conjunction with ACSRCE, RLOADi and TLOADi entries.

RLOAD1 -> DAREA by SID

1

2

3

4

5

6

7

8

DAREA

SID

P1

C1

A1

P2

C2

A2

DAREA

3

6

2

8.2

15

1

10.1

Creates a DAREA card

Parameters
sidint

darea id

nodesList[int]

GRID, EPOINT, SPOINT id

componentsList[int]

Component number. (0-6; 0-EPOINT/SPOINT; 1-6 GRID)

scalesList[float]

Scale (area) factor

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
add(darea)[source]
classmethod add_card(card, icard=0, comment='')[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property node_ids
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'DAREA'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.DEFORM(sid, eid, deformation, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Defines an enforced displacement value for static analysis.

1

2

3

5

6

8

6

8

DEFORM

SID

E1

D1

E2

D2

E3

D3

DEFORM

100

32

-2.6

5

.9

6

.9

Creates an DEFORM card, which defines applied deformation on a 1D elemment. Links to the DEFORM card in the case control deck.

Parameters
sidint

load id

eidint

CTUBE/CROD/CONROD/CBAR/CBEAM element id

deformationfloat

the applied deformation

commentstr; default=’’

a comment for the card

Eid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a DEFORM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'DEFORM'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.DynamicLoad[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

class pyNastran.bdf.cards.loads.loads.LOADCYH(sid, scale, hid, htype, scales, load_ids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Harmonic Load Input for Cyclic Symmetry Defines the harmonic coefficients of a static or dynamic load for use in cyclic symmetry analysis.

1

2

3

4

5

6

7

8

9

LOADCYH

SID

S

HID

HTYPE

S1

L1

S2

L2

Creates a LOADCYH card

Parameters
sidint

loadset id; LOADSET points to this

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a LOADCYH card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'LOADCYH'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.LOADCYN(sid, scale, segment_id, scales, load_ids, segment_type=None, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a LOADCYN card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'LOADCYN'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.LSEQ(sid, excite_id, lid, tid=None, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a sequence of static load sets

Todo

how does this work…

1

2

3

4

5

LSEQ

SID

EXCITEID

LID

TID

ACSRCEIf there is no LOADSET Case Control command, then EXCITEID

may reference DAREA and SLOAD entries. If there is a LOADSET Case Control command, then EXCITEID may reference DAREA entries as well as SLOAD entries specified by the LID field in the selected LSEQ entry corresponding to EXCITEID.

DAREARefer to RLOAD1, RLOAD2, TLOAD1, TLOAD2, or ACSRCE entries

for the formulas that define the scale factor Ai in dynamic analysis.

DPHASE :

SLOADIn the static solution sequences, the load set ID (SID) is

selected by the Case Control command LOAD. In the dynamic solution sequences, SID must be referenced in the LID field of an LSEQ entry, which in turn must be selected by the Case Control command LOADSET.

LSEQ LIDLoad set identification number of a set of static load

entries such as those referenced by the LOAD Case Control command.

LSEQ, SID, EXCITEID, LID, TID

#————————————————————– # F:Program FilesSiemensNXNastrannxn10p1nxn10p1nasttplcube_iter.dat

DLOAD 1001 1.0 1.0 55212 sid = 1001 load_id = [55212] -> RLOAD2.SID

RLOAD2, SID, EXCITEID, DELAYID, DPHASEID, TB, TP, TYPE RLOAD2 55212 55120 55122 55123 55124 EXCITEID = 55120 -> DAREA.SID DPHASEID = 55122 -> DPHASE.SID

DARA SID NID COMP SCALE DAREA 55120 913 3 9.9E+9 SID = 55120 -> RLOAD2.SID

DPHASE SID POINTID C1 TH1 DPHASE 55122 913 3 -90.0 SID = 55122 POINTID = 913 -> GRID.NID

GRID NID X Y Z GRID 913 50. 0.19 -39.9

Creates a LSEQ card

Parameters
sidint

loadset id; LOADSET points to this

excite_idint

set id assigned to this static load vector

lidint

load set id of a set of static load entries; LOAD in the Case Control

tidint; default=None

temperature set id of a set of thermal load entries; TEMP(LOAD) in the Case Control

commentstr; default=’’

a comment for the card

Lid() → int[source]
LoadID(lid: int) → int[source]
Tid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a LSEQ card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads() → Any[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'LSEQ'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.Load[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

defines the DefaultLoad class

property node_ids

get the node ids

type = 'DefLoad'
class pyNastran.bdf.cards.loads.loads.LoadCombination(sid, scale, scale_factors, load_ids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Common method for LOAD, DLOAD

Common method for LOAD, DLOAD

Parameters
sidint

load id

scalefloat

overall scale factor

scale_factorsList[float]

individual scale factors (corresponds to load_ids)

load_idsList[int]

individual load_ids (corresponds to scale_factors)

commentstr; default=’’

a comment for the card

LoadID(lid)[source]
classmethod add_card(card, comment='')[source]
get_load_ids()[source]

xref/non-xref way to get the load ids

get_loads()[source]

Note

requires a cross referenced load

scale = None

overall scale factor

sid = None

load ID

validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.loads.loads.RFORCE(sid, nid, scale, r123, cid=0, method=1, racc=0.0, mb=0, idrf=0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

idrf doesn’t exist in MSC 2005r2; exists in MSC 2016

Parameters
sidint

load set id

nidint

grid point through which the rotation vector acts

scalefloat

scale factor of the angular velocity in revolutions/time

r123List[float, float, float] / (3, ) float ndarray

rectangular components of the rotation vector R that passes through point G (R1**2+R2**2+R3**2 > 0 unless A and RACC are both zero).

cidint; default=0

Coordinate system defining the components of the rotation vector.

methodint; default=1

Method used to compute centrifugal forces due to angular velocity.

raccint; default=0.0

Scale factor of the angular acceleration in revolutions per unit time squared.

mbint; default=0

Indicates whether the CID coordinate system is defined in the main Bulk Data Section (MB = -1) or the partitioned superelement Bulk Data Section (MB = 0). Coordinate systems referenced in the main Bulk Data Section are considered stationary with respect to the assembly basic coordinate system.

idrfint; default=0

ID indicating to which portion of the structure this particular RFORCE entry applies. It is possible to have multiple RFORCE entries in the same subcase for SOL 600 to represent different portions of the structure with different rotational accelerations. IDRF corresponds to a SET3 entry specifying the elements with this acceleration. A BRKSQL entry may also be specified with a matching IDRF entry.

commentstr; default=’’

a comment for the card

Cid()[source]
Nid()[source]
classmethod _init_from_empty()[source]
_properties = ['node_id']
classmethod add_card(card, comment='')[source]

Adds a RFORCE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
property node_id
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'RFORCE'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.RFORCE1(sid, nid, scale, group_id, cid=0, r123=None, racc=0.0, mb=0, method=2, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

NX Nastran specific card

1

2

3

4

5

6

7

8

9

RFORCE1

SID

G

CID

A

R1

R2

R3

METHOD

RACC

MB

GROUPID

Creates an RFORCE1 card

Parameters
sidint

load set id

nidint

grid point through which the rotation vector acts

scalefloat

scale factor of the angular velocity in revolutions/time

r123List[float, float, float] / (3, ) float ndarray

rectangular components of the rotation vector R that passes through point G (R1**2+R2**2+R3**2 > 0 unless A and RACC are both zero).

raccint; default=0.0

Scale factor of the angular acceleration in revolutions per unit time squared.

mbint; default=0

Indicates whether the CID coordinate system is defined in the main Bulk Data Section (MB = -1) or the partitioned superelement Bulk Data Section (MB = 0). Coordinate systems referenced in the main Bulk Data Section are considered stationary with respect to the assembly basic coordinate system.

group_idint

Group identification number. The GROUP entry referenced in the GROUPID field selects the grid points to which the load is applied.

cidint; default=0

Coordinate system defining the components of the rotation vector.

methodint; default=2

Method used to compute centrifugal forces due to angular velocity.

commentstr; default=’’

a comment for the card

Cid()[source]
Nid()[source]
classmethod _init_from_empty()[source]
_properties = ['node_id']
classmethod add_card(card, comment='')[source]

Adds a RFORCE1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
property node_id
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
type = 'RFORCE1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.loads.SLOAD(sid, nodes, mags, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Static Scalar Load Defines concentrated static loads on scalar or grid points.

1

2

3

4

5

6

7

8

SLOAD

SID

S1

F1

S2

F2

S3

F3

SLOAD

16

2

5.9

17

-6.3

14

-2.93

Note

Can be used in statics OR dynamics.

If Si refers to a grid point, the load is applied to component T1 of the displacement coordinate system (see the CD field on the GRID entry).

Creates an SLOAD (GRID/SPOINT load)

Parameters
sidint

load id

nodesint; List[int]

the GRID/SPOINT ids

magsfloat; List[float]

the load magnitude

commentstr; default=’’

a comment for the card

Nid(node)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SLOAD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]

Todo

not done

property node_ids

get the node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

load ID

type = 'SLOAD'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

write_card_16(is_double: bool = False) → str[source]
class pyNastran.bdf.cards.loads.loads.SPCD(sid, nodes, components, enforced, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Defines an enforced displacement value for static analysis and an enforced motion value (displacement, velocity or acceleration) in dynamic analysis.

1

2

3

4

5

6

7

8

SPCD

SID

G1

C1

D1

G2

C2

D2

SPCD

100

32

436

-2.6

5

2

.9

Creates an SPCD card, which defines the degree of freedoms to be set during enforced motion

Parameters
conidint

constraint id

nodesList[int]

GRID/SPOINT ids

componentsList[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforcedList[float]

the constrained value for the given node (typically 0.0)

commentstr; default=’’

a comment for the card

.. note:: len(nodes) == len(components) == len(enforced)
.. warning:: Non-zero enforced deflection requires an SPC/SPC1 as well.

Yes, you really want to constrain the deflection to 0.0 with an SPC1 card and then reset the deflection using an SPCD card.

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SPCD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property constraints
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
property node_ids

get the node ids

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'SPCD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

random_loads Module
Inheritance diagram of pyNastran.bdf.cards.loads.random_loads

All static loads are defined in this file. This includes:

  • LSEQ

  • DAREA

  • SLOAD

  • RFORCE

  • RANDPS

class pyNastran.bdf.cards.loads.random_loads.RANDPS(sid, j, k, x=0.0, y=0.0, tid=0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.random_loads.RandomLoad

Power Spectral Density Specification

Defines load set power spectral density factors for use in random analysis having the frequency dependent form:

\[S_{jk}(F) = (X+iY)G(F)\]

Creates a RANDPS card

Parameters
sidint

random analysis set id defined by RANDOM in the case control deck

jint

Subcase id of the excited load set

kint

Subcase id of the applied load set k > j

x / yfloat; default=0.0

Components of the complex number

tidint; default=0

TABRNDi id that defines G(F)

commentstr; default=’’

a comment for the card

Tid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RANDPS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
j = None

Subcase identification number of the excited load set. (Integer > 0)

k = None

Subcase identification number of the applied load set. (Integer >= 0; K >= J)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Random analysis set identification number. (Integer > 0) Defined by RANDOM in the Case Control Deck.

tid = None

Identification number of a TABRNDi entry that defines G(F).

type = 'RANDPS'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

x = None

Components of the complex number. (Real)

class pyNastran.bdf.cards.loads.random_loads.RANDT1(sid: int, n: int, t0: int, tmax: float, comment: str = '')[source]

Bases: pyNastran.bdf.cards.loads.random_loads.RandomLoad

Creates a RANDT1 card

Parameters
sidint

random analysis set id defined by RANDOM in the case control deck

nint

???

t0int

???

tmaxfloat

???

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RANDT1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Random analysis set identification number. (Integer > 0) Defined by RANDOM in the Case Control Deck.

type = 'RANDT1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.random_loads.RandomLoad(card, data)[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

static_loads Module
Inheritance diagram of pyNastran.bdf.cards.loads.static_loads

All static loads are defined in this file. This includes:

  • LOAD

  • GRAV

  • ACCEL

  • ACCEL1

  • FORCE / MOMENT

  • FORCE1 / MOMENT1

  • FORCE2 / MOMENT2

  • MOMENT

  • PLOAD

  • PLOAD2

  • PLOAD4

class pyNastran.bdf.cards.loads.static_loads.ACCEL(sid, N, direction, locs, vals, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Acceleration Load

Defines static acceleration loads, which may vary over a region of the structural model. The load variation is based upon the tabular input defined on this Bulk Data entry.

1

2

3

4

5

6

7

8

9

ACCEL

SID

CID

N1

N2

N3

DIR

LOC1

VAL1

LOC2

VAL2

Continues in Groups of 2

ACCEL

100

2

0.0

1.0

2.0 | X | |

1.0

1.1

2.0

2.1

3.0

3.1

4.0

4.1

Creates an ACCEL card

Parameters
sidint

load id

N(3, ) float ndarray

the acceleration vector in the cid frame

directionstr

Component direction of acceleration variation {X, Y, Z}

locsList[float]

Location along direction DIR in coordinate system CID for specification of a load scale factor.

valsList[float]

The load scale factor associated with location LOCi

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

Cid()[source]
N = None

Components of the acceleration vector measured in coordinate system CID. (Real; at least one Ni != 0)

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a ACCEL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cid = None

Coordinate system identification number. (Integer>0: Default=0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

direction = None

Component direction of acceleration variation. (Character; one of X,Y or Z)

get_loads()[source]
raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
sid = None

Load set identification number (Integer>0)

type = 'ACCEL'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.ACCEL1(sid, scale, N, nodes, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Acceleration Load

Defines static acceleration loads at individual GRID points.

1

2

3

4

5

6

7

ACCEL1

SID

CID

A

N1

N2

N3

GRIDID1

GRIDID2

etc

Creates an ACCEL1 card

Parameters
sidint

load id

scalefloat

scale factor for load

N(3, ) float ndarray

the acceleration vector in the cid frame

directionstr

Component direction of acceleration variation {X, Y, Z}

nodesList[int]

the nodes to apply acceleration to

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

Cid()[source]
N = None

Components of the acceleration vector measured in coordinate system CID. (Real; at least one Ni != 0)

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a ACCEL1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cid = None

Coordinate system identification number. (Integer>0: Default=0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
property node_ids
nodes = None

nodes to apply the acceleration to

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors)[source]
scale = None

Acceleration vector scale factor. (Real)

sid = None

Load set identification number (Integer>0)

type = 'ACCEL1'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.CLOAD(sid, scale, scale_factors, load_ids, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.LoadCombination

Static Load Combination for Superelement Loads (Superposition)

references excite ids (e.g., an LSEQ); looks like a LOAD

Common method for LOAD, DLOAD

Parameters
sidint

load id

scalefloat

overall scale factor

scale_factorsList[float]

individual scale factors (corresponds to load_ids)

load_idsList[int]

individual load_ids (corresponds to scale_factors)

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_load_ids()[source]

xref/non-xref way to get the load ids

raw_fields()[source]
safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'CLOAD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.FORCE(sid, node, mag, xyz, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.static_loads.Load0

Defines a static concentrated force at a grid point by specifying a scale factor and a vector that determines the direction.

1

2

3

4

5

6

7

8

FORCE

SID

NODE

CID

MAG

FX

FY

FZ

FORCE

3

1

Creates a FORCE card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

xyz(3, ) float ndarray

the load direction in the cid frame

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

type = 'FORCE'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.FORCE1(sid, node, mag, g1, g2, comment='')[source]

Bases: pyNastran.bdf.cards.loads.static_loads.Load1

Defines a static concentrated force at a grid point by specification of a magnitude and two grid points that determine the direction.

1

2

3

4

5

6

FORCE1

SID

G

F

G1

G2

FORCE1

6

13

-2.93

16

13

Creates a FORCE1 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

n1 / n2int / int

defines the load direction n = n2 - n1

commentstr; default=’’

a comment for the card

type = 'FORCE1'
class pyNastran.bdf.cards.loads.static_loads.FORCE2(sid, node, mag, g1, g2, g3, g4, comment='')[source]

Bases: pyNastran.bdf.cards.loads.static_loads.Load2

Defines a static concentrated force at a grid point by specification of a magnitude and four grid points that determine the direction.

1

2

3

4

5

6

7

8

FORCE2

SID

G

F

G1

G2

G3

G4

Creates a FORCE2/MOMENT2 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

g1 / g2 / g3 / g4int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

commentstr; default=’’

a comment for the card

_properties = ['scaled_vector', 'node_id', 'node_ids']
type = 'FORCE2'
class pyNastran.bdf.cards.loads.static_loads.GMLOAD(sid, normal, entity, entity_id, method, load_magnitudes, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Defines a static concentrated force at a grid point by specification of a magnitude and two grid points that determine the direction.

Creates a GMLOAD object

Cid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GMLOAD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model, xref_errors)[source]
type = 'GMLOAD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.loads.static_loads.GRAV(sid, scale, N, cid=0, mb=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines acceleration vectors for gravity or other acceleration loading.

1

2

3

4

5

6

7

8

GRAV

SID

CID

A

N1

N2

N3

MB

GRAV

1

3

32.2

0.0

0.0

-1.0

Creates an GRAV card

Parameters
sidint

load id

scalefloat

scale factor for load

N(3, ) float ndarray

the acceleration vector in the cid frame

cidint; default=0

the coordinate system for the load

mbint; default=0

???

commentstr; default=’’

a comment for the card

Cid()[source]
GravityVector()[source]

returns the gravity vector in absolute coordinates

N = None

Acceleration vector components measured in coordinate system CID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GRAV card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cid = None

Coordinate system identification number.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
mb = None

Indicates whether the CID coordinate system is defined in the main Bulk Data Section (MB = -1) or the partitioned superelement Bulk Data Section (MB = 0). Coordinate systems referenced in the main Bulk Data Section are considered stationary with respect to the assembly basic coordinate system. See Remark 10. (Integer; Default = 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
scale = None

scale factor

sid = None

Set identification number

type = 'GRAV'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.LOAD(sid, scale, scale_factors, load_ids, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.LoadCombination

1

2

3

4

5

6

7

8

9

LOAD

SID

S

S1

L1

S2

L2

S3

L3

S4

L4

etc.

LOAD

101

-0.5

1.0

3

6.2

4

Creates a LOAD card

Parameters
sidint

load id

scalefloat

overall scale factor

scale_factorsList[float]

individual scale factors (corresponds to load_ids)

load_idsList[int]

individual load_ids (corresponds to scale_factors)

commentstr; default=’’

a comment for the card

.. note:: MSC can handle self-referencing loads, NX cannot
classmethod _init_from_empty()[source]
cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_load_types()[source]

Note

requires a cross referenced load

get_reduced_loads(resolve_load_card=False, filter_zero_scale_factors=False)[source]

Get all load objects in a simplified form, which means all scale factors are already applied and only base objects (no LOAD cards) will be returned.

Parameters
resolve_load_cardbool; default=False

Nastran requires that LOAD cards do not reference other load cards This feature can be enabled.

filter_zero_scale_factorsbool; default=False

Nastran does not filter loads with a 0.0 scale factor. So, if you have a 0.0 load, but are missing load ids, Nastran will throw a fatal error.

.. todo:: lots more object types to support
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'LOAD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.Load0(sid, node, mag, xyz, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

common class for FORCE, MOMENT

Creates a FORCE/MOMENT card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

xyz(3, ) float ndarray

the load direction in the cid frame

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

Cid()[source]
classmethod add_card(card, comment='')[source]

Adds a FORCE/MOMENT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, loads)[source]

exports the loads in a vectorized way

get_loads()[source]
property node_id
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
property scaled_vector
to_global()[source]
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.loads.static_loads.Load1(sid, node, mag, g1, g2, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

common class for FORCE1, MOMENT1

Creates a FORCE1/MOMENT1 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

n1 / n2int / int

defines the load direction n = n2 - n1

commentstr; default=’’

a comment for the card

G1()[source]
G2()[source]
classmethod _init_from_empty()[source]
_properties = ['node_id', 'node_ids', 'scaled_vector']
classmethod add_card(card, comment='')[source]

Adds a FORCE1/MOMENT1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
property node_id
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, safe_coord, debug=True)[source]

Todo

cross reference and fix repr function

property scaled_vector
to_global()[source]
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.Load2(sid, node, mag, g1, g2, g3, g4, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

common class for FORCE2, MOMENT2

Creates a FORCE2/MOMENT2 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

g1 / g2 / g3 / g4int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

commentstr; default=’’

a comment for the card

G1()[source]
G2()[source]
G3()[source]
G4()[source]
classmethod _init_from_empty()[source]
_properties = ['node_id', 'node_ids']
classmethod add_card(card, comment='')[source]

Adds a FORCE2/MOMENT2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
property node_id
property node_ids
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, safe_coord, debug=True)[source]

Todo

cross reference and fix repr function

property scaled_vector
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.MOMENT(sid, node, mag, xyz, cid=0, comment='')[source]

Bases: pyNastran.bdf.cards.loads.static_loads.Load0

Defines a static concentrated moment at a grid point by specifying a scale factor and a vector that determines the direction.

1

2

3

4

5

6

7

8

MOMENT

SID

G

CID

M

N1

N2

N3

MOMENT

2

5

6

2.9

0.0

1.0

0.0

Creates a MOMENT card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

xyz(3, ) float ndarray

the load direction in the cid frame

cidint; default=0

the coordinate system for the load

commentstr; default=’’

a comment for the card

property node_id
property node_ids

all the nodes referenced by the load

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'MOMENT'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.loads.static_loads.MOMENT1(sid, node, mag, g1, g2, comment='')[source]

Bases: pyNastran.bdf.cards.loads.static_loads.Load1

Defines a static concentrated moment at a grid point by specifying a magnitude and two grid points that determine the direction.

1

2

3

4

5

6

MOMENT1

SID

G

M

G1

G2

MOMENT1

6

13

-2.93

16

13

Creates a MOMENT1 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

n1 / n2int / int

defines the load direction n = n2 - n1

commentstr; default=’’

a comment for the card

type = 'MOMENT1'
class pyNastran.bdf.cards.loads.static_loads.MOMENT2(sid, node, mag, g1, g2, g3, g4, comment='')[source]

Bases: pyNastran.bdf.cards.loads.static_loads.Load2

Defines a static concentrated moment at a grid point by specification of a magnitude and four grid points that determine the direction.

1

2

3

4

5

6

7

8

MOMENT2

SID

G

M

G1

G2

G3

G4

Creates a FORCE2/MOMENT2 card

Parameters
sidint

load id

nodeint

the node to apply the load to

magfloat

the load’s magnitude

g1 / g2 / g3 / g4int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

commentstr; default=’’

a comment for the card

_properties = ['scaled_vector', 'node_id', 'node_ids']
type = 'MOMENT2'
class pyNastran.bdf.cards.loads.static_loads.PLOAD(sid, pressure, nodes, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Static Pressure Load

Defines a uniform static pressure load on a triangular or quadrilateral surface comprised of surface elements and/or the faces of solid elements.

1

2

3

4

5

6

7

PLOAD

SID

P

G1

G2

G3

G4

PLOAD

1

-4.0

16

32

11

Creates a PLOAD card, which defines a uniform pressure load on a shell/solid face or arbitrarily defined quad/tri face.

Parameters
sidint

load id

pressurefloat

the pressure to apply

nodesList[int]

The nodes that are used to define the normal are defined using the same method as the CTRIA3/CQUAD4 normal. n = 3 or 4

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a PLOAD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, safe_coord)[source]
type = 'PLOAD'
static uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.loads.static_loads.PLOAD1(sid, eid, load_type, scale, x1, p1, x2=None, p2=None, comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Applied Load on CBAR, CBEAM or CBEND Elements

Defines concentrated, uniformly distributed, or linearly distributed applied loads to the CBAR or CBEAM elements at user-chosen points along the axis. For the CBEND element, only distributed loads over an entire length may be defined.

1

2

3

4

5

6

7

8

9

PLOAD1

SID

EID

TYPE

SCALE

X1

P1

X2

P2

PLOAD1

25

1065

MY

FRPR

0.2

2.5E3

0.8

3.5E3

Creates a PLOAD1 card, which may be applied to a CBAR/CBEAM

Parameters
sidint

load id

eidint

element to apply the load to

load_typestr

type of load that’s applied valid_types = {FX, FY, FZ, FXE, FYE, FZE,

MX, MY, MZ, MXE, MYE, MZE}

scalestr

Determines scale factor for X1, X2. {LE, FR, LEPR, FRPR}

x1 / x2float / float

the starting/end position for the load application the default for x2 is x1

p1 / p2float / float

the magnitude of the load at x1 and x2 the default for p2 is p1

commentstr; default=’’

a comment for the card

Point Loadx1 == x2
Distributed Loadx1 != x2
Eid()[source]
property Type
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PLOAD1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, safe_coord)[source]
type = 'PLOAD1'
uncross_reference() → None[source]

Removes cross-reference links

valid_scales = ['LE', 'FR', 'LEPR', 'FRPR']
valid_types = ['FX', 'FY', 'FZ', 'FXE', 'FYE', 'FZE', 'MX', 'MY', 'MZ', 'MXE', 'MYE', 'MZE']
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.loads.static_loads.PLOAD2(sid: int, pressure: float, eids: List[int], comment: str = '')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

1

2

3

4

5

6 | 7

8

9

PLOAD2

SID

P

EID1

EID2

EID3 | EID4

EID5

EID6

PLOAD2

21

-3.6

4

16

2

PLOAD2

SID

P

EID1

THRU

EID2

Creates a PLOAD2 card, which defines an applied load normal to the quad/tri face

Parameters
sidint

load id

pressurefloat

the pressure to apply to the elements

eidsList[int]

the elements to apply pressure to n < 6 or a continouus monotonic list of elements (e.g., [1, 2, …, 1000])

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment: str = '')[source]

Adds a PLOAD2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property element_ids
get_loads()[source]
raw_fields() → List[Any][source]
repr_fields() → List[Any][source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model, safe_coord)[source]
type = 'PLOAD2'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.loads.static_loads.PLOAD4(sid, eids, pressures, g1, g34, cid=0, nvector=None, surf_or_line='SURF', line_load_dir='NORM', comment='')[source]

Bases: pyNastran.bdf.cards.loads.loads.Load

Solid Format

Defines a pressure load on a face of a CHEXA, CPENTA, or CTETRA element.

1

2

3

4

5

6

7

8

9

PLOAD4

SID

EID

P1

P2

P3

P4

G1

G3/G4

CID

N1

N2

N3

SORL

LDIR

Shell Format

Defines a pressure load on a face of a CTRIA3, CTRIA6, CTRIAR, CQUAD4, CQUAD8, or CQUADR element.

1

2

3

4

5

6

7

8

9

PLOAD4

SID

EID

P1

P2

P3

P4

THRU

EID2

CID

N1

N2

N3

SORL

LDIR

Warning

NX does not support SORL and LDIR, MSC does

Creates a PLOAD4 card

Parameters
sidint

the load id

eidsList[int, …]

shells : the range of element ids; must be sequential solids : must be length 1

pressuresList[float, float, float, float] / float

float : turned into a list of length 4 List[float] :

tri : must be length 4 (the last value should be the same as the 0th value) quad : must be length 4

g1int/None

only used for solid elements

g34int / None

only used for solid elements

cidint; default=0

the coordinate system for nvector

nvector(3, ) float ndarray

blank : load acts normal to the face float : the local pressure vector

surf_or_linestr; default=’SURF’

SURF : surface load LINE : line load (only defined for QUADR, TRIAR) not supported

line_load_dirstr; default=’NORM’

direction of the line load (see surf_or_line); {X, Y, Z, TANG, NORM} not supported

commentstr; default=’’

a comment for the card

TODO: fix the way “pressures” works
Cid()[source]

gets the coordinate system object

G1()[source]
G34()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids', 'element_ids']
classmethod add_card(card, comment='')[source]

Adds a PLOAD4 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cid = None

Coordinate system identification number. See Remark 2. (Integer >= 0;Default=0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property element_ids
g1 = None

used for solid element only

g34 = None

g3/g4 - different depending on CHEXA/CPENTA or CTETRA

get_element_ids(eid=None)[source]
get_loads()[source]
property node_ids

get the node ids

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors, debug=True)[source]
type = 'PLOAD4'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

pyNastran.bdf.cards.loads.static_loads.normalize(self, msg: str = '')[source]

adjust the vector to a unit length scale up the magnitude of the vector

pyNastran.bdf.cards.loads.static_loads.update_pload4_vector(pload4: pyNastran.bdf.cards.loads.static_loads.PLOAD4, normal, cid: int)[source]

helper method

thermal Package
loads Module
Inheritance diagram of pyNastran.bdf.cards.thermal.loads
class pyNastran.bdf.cards.thermal.loads.QBDY1(sid, qflux, eids, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines a uniform heat flux into CHBDYj elements.

Eids()[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QBDY1 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property element_ids
get_loads()[source]
nQFluxTerms()[source]
qflux = None

Heat flux into element (FLOAT)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QBDY1'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.QBDY2(sid, eid, qfluxs, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines a uniform heat flux load for a boundary surface.

Eid()[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a QBDY2 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Identification number of an CHBDYj element. (Integer > 0)

get_loads()[source]
nQFluxTerms()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QBDY2'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.QBDY3(sid, q0, cntrlnd, eids, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines a uniform heat flux load for a boundary surface.

Creates a QBDY3 card

Parameters
sidint

Load set identification number. (Integer > 0)

q0float; default=None

Magnitude of thermal flux vector into face

control_idint; default=0

Control point

eidsList[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

commentstr; default=’’

a comment for the card

Eids()[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QBDY3 card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cntrlnd = None

Control point for thermal flux load. (Integer > 0; Default = 0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eids = None

CHBDYj element identification numbers

property element_ids
get_loads()[source]
q0 = None

Heat flux into element

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QBDY3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.QHBDY(sid, flag, q0, grids, af=None, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines a uniform heat flux into a set of grid points.

Creates a QHBDY card

Parameters
sidint

load id

flagstr

valid_flags = {POINT, LINE, REV, AREA3, AREA4, AREA6, AREA8}

q0float

Magnitude of thermal flux into face. Q0 is positive for heat into the surface

affloat; default=None

Area factor depends on type

gridsList[int]

Grid point identification of connected grid points

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['flag_to_nnodes']
classmethod add_card(card, comment='')[source]

Adds a QHBDY card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

af = None

Area factor depends on type. (Real > 0.0 or blank)

cross_reference(model: BDF) → None[source]
flag_to_nnodes = {'AREA3': (3, 3), 'AREA4': (4, 4), 'AREA6': (4, 6), 'AREA8': (5, 8), 'LINE': (2, 2), 'POINT': (1, 1), 'REV': (2, 2)}
get_loads()[source]
grids = None

Grid point identification of connected grid points. (Integer > 0 or blank)

q0 = None

Magnitude of thermal flux into face. Q0 is positive for heat into the surface. (Real)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QHBDY'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.QVECT(sid, q0, eids, t_source=None, ce=0, vector_tableds=None, control_id=0, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Thermal Vector Flux Load

Defines thermal vector flux from a distant source into a face of one or more CHBDYi boundary condition surface elements.

1

2

3

4

5

6

7

8

9

QVECT

SID

Q0

TSOUR

CE

E1/TID1

E2/TID2

E3/TID3

CNTRLND

EID1

EID2

etc.

Creates a QVECT card

Parameters
sidint

Load set identification number. (Integer > 0)

q0float; default=None

Magnitude of thermal flux vector into face

t_sourcefloat; default=None

Temperature of the radiant source

ceint; default=0

Coordinate system identification number for thermal vector flux

vector_tabledsList[int/float, int/float, int/float]
vectorfloat; default=None

directional cosines in coordinate system CE) of the thermal vector flux None : [0.0, 0.0, 0.0]

tabledint

TABLEDi entry identification numbers defining the components as a function of time

control_idint; default=0

Control point

eidsList[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

commentstr; default=’’

a comment for the card

Eids()[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QVECT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property element_ids
get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QVECT'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.QVOL(sid, qvol, control_point, elements, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines a rate of volumetric heat addition in a conduction element.

1

2

3

4

5

6

7

8

9

QVOL

SID

QVOL

CNTRLND

EID1

EID2

EID3

EID4

EID5

EID6

etc.

Eids()[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QVOL card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property element_ids
get_loads()[source]
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QVOL'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.TEMP(sid, temperatures, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines temperature at grid points for determination of thermal loading, temperature-dependent material properties, or stress recovery.

1

2

3

4

5

6

7

8

TEMP

SID

G1

T1

G2

T2

G3

T3

TEMP

3

94

316.2

49

219.8

Creates a TEMP card

Parameters
sidint

Load set identification number

temperaturesdict[nid]temperature
nidint

node id

temperaturefloat

the nodal temperature

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
add(temp_obj)[source]
classmethod add_card(card, comment='')[source]

Adds a TEMP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
classmethod export_to_hdf5(h5_file, model, loads)[source]

exports the loads in a vectorized way

get_loads()[source]
raw_fields()[source]

Writes the TEMP card

repr_fields()[source]

Writes the TEMP card

safe_cross_reference(model: BDF, debug=True)[source]
sid = None

Load set identification number. (Integer > 0)

temperatures = None

dictionary of temperatures where the key is the grid ID (Gi) and the value is the temperature (Ti)

type = 'TEMP'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.TEMPB3(sid, eid, t, tpy, tpz, tc, td, te, tf, eids, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a TEMPD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

sid to be parsed

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
get_loads()[source]
raw_fields()[source]

Writes the TEMP card

type = 'TEMPB3'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.TEMPD(sid, temperature, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines a temperature value for all grid points of the structural model that have not been given a temperature on a TEMP entry

1

2

3

4

5

6

7

8

9

TEMPD

SID1

T1

SID2

T2

SID3

T3

SID4

T4

Creates a TEMPD card

Parameters
sidint

Load set identification number. (Integer > 0)

temperaturefloat

default temperature

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
add(tempd_obj)[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a TEMPD card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

icardint; default=0

sid to be parsed

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
raw_fields()[source]

Writes the TEMPD card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'TEMPD'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.TEMPP1(sid, eid, tbar, tprime, t_stress, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

TEMPP1

SID

EID1

TBAR

TPRIME

T1

T2

EID2

EID3

EID4

EID5

EID6

EID7

etc.

TEMPP1

2

24

62.0

10.0

57.0

67.0

26

21

19

30

Alternate Form +——–+——+——+——+——–+——+——+——+ | | EID2 | THRU | EIDi | EIDj | THRU | EIDk | | +——–+——+——+——+——–+——+——+——+ | | 1 | THRU | 10 | 30 | THRU | 61 | | +——–+——+——+——+——–+——+——+——+

classmethod _init_from_empty()[source]
raw_fields()[source]

Writes the TEMP card

type = 'TEMPP1'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.TEMPRB(sid, ta, tb, tp1, tp2, tai, tbi, eids, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

1

2

3

4

5

6

7

8

TEMPRB

SID

G1

T1

G2

T2

G3

T3

1

2

3

4

5

6

7

8

9

TEMPRB

SID

EID1

TA

TB

TP1A

TP1B

TP2A

TP2B

TCA

TDA

TEA

TFA

TCB

TDB

TEB

TFB

EID2

EID3

EID4

EID5

EID6

EID7

etc.

TEMPRB

200

1

68.0

23.0

0.0

28.0

2.5

68.0

91.0

45.0

48.0

80.0

20.0

9

10

Creates a TEMPRB card

Parameters
sidint

Load set identification number

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TEMPRB card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
get_loads()[source]
raw_fields()[source]

Writes the TEMPRB card

repr_fields()[source]

Writes the TEMPRB card

safe_cross_reference(model: BDF, debug=True)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'TEMPRB'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.thermal.loads.ThermalLoad[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalCard

radiation Module
Inheritance diagram of pyNastran.bdf.cards.thermal.radiation

All set cards are defined in this file. This includes:

  • bcs * RADM, RADBC

  • views * VIEW, VIEW3D

class pyNastran.bdf.cards.thermal.radiation.RADBC(nodamb, famb, cntrlnd, eids, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Specifies an CHBDYi element face for application of radiation boundary conditions

Eids()[source]
classmethod add_card(card, comment='')[source]

Adds a RADBC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cntrlnd = None

Control point for thermal flux load. (Integer > 0; Default = 0)

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

famb = None

Radiation view factor between the face and the ambient point. (Real > 0.0)

nodamb = None

NODAMB Ambient point for radiation exchange. (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'RADBC'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.radiation.RADCAV(icavity, sets, ele_amb=None, shadow='YES', scale=0.0, prtpch=None, nefci=None, rmax=0.1, ncomp=32, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Identifies the characteristics of each radiant enclosure.

1

2

3

4 | 5

6

7

8

9

RADCAV

ICAVITY

ELEAMB

SHADOW | SCALE

PRTPCH

NFECI

RMAX

SET11

SET12

SET21 | SET22

SET31

SET32

etc.

RADCAV

1

1


.99

3

5

4 | 5

7

5

classmethod add_card(card, comment='')[source]

Adds a RADCAV card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'RADCAV'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.radiation.RADLST(icavity, eids, matrix_type=1, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Identifies the characteristics of each radiant enclosure.

1

2

3

4

5

6

7

8

9

RADLST

ICAVITY

MTXTYP

EID1

EID2

EID3

EID4

EID5

EID6

EID7

etc.

RADLST

3

5

4

5

7

5

classmethod add_card(card, comment='')[source]

Adds a RADLST card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'RADCAV'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.radiation.RADM(radmid, absorb, emissivity, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Defines the radiation properties of a boundary element for heat transfer analysis

classmethod add_card(card, comment='')[source]

Adds a RADM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

radmid = None

Material identification number

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'RADM'
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.radiation.RADMTX(icavity, index, exchange_factors, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Provides the Fji=Aj*fji exchange factors for all the faces of a radiation enclosure specified in the corresponding RADLST entry.

1

2

3

4

5

6

7

8

9

RADMTX

ICAVITY

INDEX

Fi,j

Fi+1,j

Fi+2,j

Fi+3,j

Fi+4,j

Fi+5,j

Fi+6,j

etc.

RADMTX

2

1

0.0

0.1

0.2

0.2

0.3

0.2

classmethod add_card(card, comment='')[source]

Adds a RADMTX card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'RADMTX'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.radiation.VIEW(iview, icavity, shade='BOTH', nbeta=1, ngamma=1, dislin=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Defines radiation cavity and shadowing for radiation view factor calculations.

1

2

3

4

5

6

7

VIEW

IVIEW

ICAVITY

SHADE

NB

NG

DISLIN

VIEW

1

1

BOTH

2

3

0.25

Creates a VIEW, which defines a 2D view factor

Parameters
iviewint

Identification number

icavityint

Cavity identification number for grouping the radiant exchange faces of CHBDYi elements

shadestr; default=’BOTH’

Shadowing flag for the face of CHBDYi element - NONE means the face can neither shade nor be shaded by other faces - KSHD means the face can shade other faces - KBSHD means the face can be shaded by other faces - BOTH means the face can both shade and be shaded by other faces

nbeta / ngammaint; default=1 / 1

Subelement mesh size in the beta/gamma direction. (Integer > 0)

dislinfloat; default=0.0

The displacement of a surface perpendicular to the surface

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a VIEW card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

iview = None

Material identification number

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'VIEW'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.radiation.VIEW3D(icavity, gitb=4, gips=4, cier=4, error_tol=0.1, zero_tol=1e-10, warp_tol=0.01, rad_check=3, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

View Factor Definition - Gaussian Integration Method

Defines parameters to control and/or request the Gaussian Integration method of view factor calculation for a specified cavity.

1

2

3

4

5

6

7

8

9

VIEW3D

ICAVITY

GITB

GIPS

CIER

ETOL

ZTOL

WTOL

RADCHK

VIEW3D

1

2

2

4

1.0E-6

Creates a VIEW3D, which defines a 3D view factor

Parameters
icavityint

Radiant cavity identification number on RADCAV entry. (Integer > 0)

gitbint; default=4

Gaussian integration order to be implemented in calculating net effective view factors in the presence of third-body shadowing. (Integer 2, 3, 4, 5, 6 or 10)

gipsint; default=4

Gaussian integration order to be implemented in calculating net effective view factors in the presence of self-shadowing. (Integer 2, 3, 4, 5, 6 or 10)

cierint; default=4

Discretization level used in the semi-analytic contour integration method. (1 < Integer < 20)

error_tolfloat; default=0.1

Error estimate above which a corrected view factor is calculated using the semi-analytic contour integration method. (Real > 0.0)

zero_tolfloat; default=1e-10

Assumed level of calculation below which the numbers are considered to be zero. (Real > 0.0)

warp_tolfloat; default=0.01

Assumed degree of warpage above which the actual value of will be calculated. (0.0 < Real < 1.0)

rad_checkint; default=3

Type of diagnostic output desired for the radiation exchange surfaces.

commentstr; default=’’

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a VIEW3D card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

icavity = None

Material identification number

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'VIEW3D'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

thermal Module
Inheritance diagram of pyNastran.bdf.cards.thermal.thermal
class pyNastran.bdf.cards.thermal.thermal.CHBDYE(eid, eid2, side, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalElement

Defines a boundary condition surface element with reference to a heat conduction element.

1

2

3

4

5

6

7

8

CHBDYE

EID

EID2

SIDE

IVIEWF

IVIEWB

RADMIDF

RADMIDB

Creates a CHBDYE card

Parameters
eidint

surface element ID number for a side of an element

eid2: int

a heat conduction element identification

side: int

a consistent element side identification number (1-6)

iview_front: int; default=0

a VIEW entry identification number for the front face

iview_back: int; default=0

a VIEW entry identification number for the back face

rad_mid_front: int; default=0

RADM identification number for front face of surface element

rad_mid_back: int; default=0

RADM identification number for back face of surface element

commentstr; default=’’

a comment for the card

Eid()[source]
Eid2()[source]
Pid()[source]
classmethod _init_from_empty()[source]
_properties = ['hex_map', 'pent_map', 'tet_map', 'side_maps']
classmethod add_card(card, comment='')[source]

Adds a CHBDYE card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]
eid = None

Surface element ID number for a side of an element. (0 < Integer < 100,000,000)

eid2 = None

A heat conduction element identification

get_edge_ids()[source]
hex_map = {1: [4, 3, 2, 1], 2: [1, 2, 6, 5], 3: [2, 3, 7, 6], 4: [3, 4, 8, 7], 5: [4, 1, 5, 8], 6: [5, 6, 7, 8]}
iview_back = None

A VIEW entry identification number for the back face

iview_front = None

A VIEW entry identification number for the front face

property node_ids
property nodes
pent_map = {1: [3, 2, 1], 2: [1, 2, 5, 4], 3: [2, 3, 6, 5], 4: [3, 1, 4, 6], 5: [4, 5, 6]}
rad_mid_back = None

RADM identification number for back face of surface element (Integer > 0)

rad_mid_front = None

RADM identification number for front face of surface element (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Todo

is this done

safe_cross_reference(model: BDF, xref_errors)[source]
side = None

A consistent element side identification number (1 < Integer < 6)

side_maps = {'CHEXA': {1: [4, 3, 2, 1], 2: [1, 2, 6, 5], 3: [2, 3, 7, 6], 4: [3, 4, 8, 7], 5: [4, 1, 5, 8], 6: [5, 6, 7, 8]}, 'CPENTA': {1: [3, 2, 1], 2: [1, 2, 5, 4], 3: [2, 3, 6, 5], 4: [3, 1, 4, 6], 5: [4, 5, 6]}, 'CQUAD4': [1, 2, 3, 4], 'CTETRA': {1: [1, 3, 2], 2: [1, 2, 4], 3: [2, 3, 4], 4: [3, 1, 4]}, 'CTRIA3': [1, 2, 3]}
tet_map = {1: [1, 3, 2], 2: [1, 2, 4], 3: [2, 3, 4], 4: [3, 1, 4]}
type = 'CHBDYE'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.CHBDYG(eid, surface_type, nodes, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalElement

Defines a boundary condition surface element without reference to a property entry.

1

2

3

4

5

6

7

8

9

CHBDYG

EID

TYPE

IVIEWF

IVIEWB

RADMIDF

RADMIDB

G1

G2

G3

G4

G5

G6

G7

G8

Eid()[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CHBDYG card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

Surface element ID

get_edge_ids()[source]
iview_back = None

A VIEW entry identification number for the back face

iview_front = None

A VIEW entry identification number for the front face

property node_ids
nodes = None

Grid point IDs of grids bounding the surface (Integer > 0)

rad_mid_back = None

RADM identification number for back face of surface element (Integer > 0)

rad_mid_front = None

RADM identification number for front face of surface element (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
surface_type = None

Surface type

type = 'CHBDYG'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.CHBDYP(eid, pid, surface_type, g1, g2, g0=0, gmid=None, ce=0, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, e1=None, e2=None, e3=None, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalElement

Defines a boundary condition surface element with reference to a PHBDY entry

1

2

3

4

5

6

7

8

9

CHBDYP

EID

PID

TYPE

IVIEWF

IVIEWB

G1

G2

G0

RADMIDF

RADMIDB

GMID

CE

E1

E2

E3

Creates a CHBDYP card

Parameters
eidint

Surface element ID

pidint

PHBDY property entry identification numbers. (Integer > 0)

surface_typestr

Surface type Must be {POINT, LINE, ELCYL, FTUBE, TUBE}

iview_frontint; default=0

A VIEW entry identification number for the front face.

iview_backint; default=0

A VIEW entry identification number for the back face.

g1 / g2int

Grid point identification numbers of grids bounding the surface

g0int; default=0

Orientation grid point

rad_mid_frontint

RADM identification number for front face of surface element

rad_mid_backint

RADM identification number for back face of surface element.

gmidint

Grid point identification number of a midside node if it is used with the line type surface element.

ceint; default=0

Coordinate system for defining orientation vector

e1 / e2 / e3float; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1.

commentstr; default=’’

a comment for the card

Ce()[source]

gets the coordinate system, CE

Eid()[source]
Pid()[source]
property Type
_finalize_hdf5(encoding)[source]

hdf5 helper function

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CHBDYP card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

ce = None

Coordinate system for defining orientation vector. (Integer > 0; Default = 0

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

e1 = None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1. (Real or blank)

eid = None

Surface element ID

g0 = None

Orientation grid point. (Integer > 0; Default = 0)

g1 = None

Grid point identification numbers of grids bounding the surface. (Integer > 0)

g2 = None

Grid point identification numbers of grids bounding the surface. (Integer > 0)

gmid = None

Grid point identification number of a midside node if it is used with the line type surface element.

iview_back = None

A VIEW entry identification number for the back face.

iview_front = None

A VIEW entry identification number for the front face.

property node_ids
property nodes
pid = None

PHBDY property entry identification numbers. (Integer > 0)

rad_mid_back = None

RADM identification number for back face of surface element. (Integer > 0)

rad_mid_front = None

RADM identification number for front face of surface element. (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CHBDYP'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.CONV(eid, pconid, ta, film_node=0, cntrlnd=0, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Specifies a free convection boundary condition for heat transfer analysis through connection to a surface element (CHBDYi entry).

Creates a CONV card

Parameters
eidint

element id

pconidint

Convection property ID

midint

Material ID

taList[int]

Ambient points used for convection 0’s are allowed for TA2 and higher

film_nodeint; default=0

Point for film convection fluid property temperature

cntrlndint; default=0

Control point for free convection boundary condition

commentstr; default=’’

a comment for the card

Eid()[source]
TA(i=None)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CONV card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cntrlnd = None

Control point for free convection boundary condition.

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

eid = None

CHBDYG, CHBDYE, or CHBDYP surface element identification number. (Integer > 0)

film_node = None

Point for film convection fluid property temperature

pconid = None

Convection property identification number of a PCONV entry

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'CONV'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.CONVM(eid, pconvm, ta1, film_node=0, cntmdot=0, ta2=None, mdot=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

Specifies a forced convection boundary condition for heat transfer analysis through connection to a surface element (CHBDYi entry).

1

2

3

4

5

6

7

8

CONVM

EID

PCONID

FLMND

CNTMDOT

TA1

TA2

Mdot

CONVM

101

1

201

301

20

21

Creates a CONVM card

Parameters
eidint

element id (CHBDYP)

pconidint

property ID (PCONVM)

ta1int

ambient point for convection

ta2int; default=None

None : ta1 ambient point for convection

film_nodeint; default=0
cntmdotint; default=0

control point used for controlling mass flow 0/blank is only allowed when mdot > 0

mdotfloat; default=1.0

a multiplier for the mass flow rate in case there is no point associated with the CNTRLND field required if cntmdot = 0

commentstr; default=’’

a comment for the card

Eid()[source]
classmethod _init_from_empty()[source]
_properties = ['film_node_id', 'pconvm_id']
classmethod add_card(card, comment='')[source]

Adds a CONVM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

property film_node_id
property pconvm_id
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'CONVM'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.PCONV(pconid, mid=None, form=0, expf=0.0, ftype=0, tid=None, chlen=None, gidin=None, ce=0, e1=None, e2=None, e3=None, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalProperty

Specifies the free convection boundary condition properties of a boundary condition surface element used for heat transfer analysis.

Format (MSC 2005.2)

1

2

3

4

5

6

7

8

9

PCONV

PCONID

MID

FORM

EXPF

FTYPE

TID

CHLEN

GIDIN

CE

E1

E2

E3

PCONV

38

21

2

54

2.0

235

0

1.0

0.0

0.0

Alternate format (MSC 2005.2):

1

2

3

4

5

6

7

8

9

PCONV

PCONID

MID

FORM

EXPF

3

H1

H2

H3

H4

H5

H6

H7

H8

PCONV

7

3

10.32

10.05

10.09

10.37

Todo

alternate format is not supported; NX not checked

Creates a PCONV card

Parameters
pconidint

Convection property ID

midint

Material ID

formint; default=0

Type of formula used for free convection Must be {0, 1, 10, 11, 20, or 21}

expffloat; default=0.0

Free convection exponent as implemented within the context of the particular form that is chosen

ftypeint; default=0

Formula type for various configurations of free convection

tidint; default=None

Identification number of a TABLEHT entry that specifies the two variable tabular function of the free convection heat transfer coefficient

chlenfloat; default=None

Characteristic length

gidinint; default=None

Grid ID of the referenced inlet point

ceint; default=0

Coordinate system for defining orientation vector.

e1 / e2 / e3List[float]; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1

commentstr; default=’’

a comment for the card

Ce()[source]

gets the coordinate system, CE

Gidin()[source]

gets the grid input node, gidin

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PCONV card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

ce = None

Coordinate system for defining orientation vector. (Integer > 0;Default = 0

chlen = None

Characteristic length

cross_reference(model: BDF) → None[source]
e1 = None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1. (Real or blank)

expf = None

Free convection exponent as implemented within the context of the particular form that is chosen

form = None

Type of formula used for free convection. (Integer 0, 1, 10, 11, 20, or 21)

ftype = None

Formula type for various configurations of free convection

gidin = None

Grid ID of the referenced inlet point

mid = None

Material property identification number. (Integer > 0)

pconid = None

Convection property identification number. (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

tid = None

Identification number of a TABLEHT entry that specifies the two variable tabular function of the free convection heat transfer coefficient

type = 'PCONV'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.PCONVM(pconid, mid, coeff, form=0, flag=0, expr=0.0, exppi=0.0, exppo=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalProperty

Specifies the free convection boundary condition properties of a boundary condition surface element used for heat transfer analysis.

1

2

3

4

5

6

7

8

9

PCONVM

PCONID

MID

FORM

FLAG

COEF

EXPR

EXPPI

EXPPO

PCONVM

3

2

1

1

0.023

0.80

0.40

0.30

Creates a PCONVM card

Parameters
pconidint

Convection property ID

mid: int

Material ID

coeff: float

Constant coefficient used for forced convection

form: int; default=0

Type of formula used for free convection Must be {0, 1, 10, 11, 20, or 21}

flag: int; default=0

Flag for mass flow convection

expr: float; default=0.0

Reynolds number convection exponent

exppi: float; default=0.0

Prandtl number convection exponent for heat transfer into the working fluid

exppo: float; default=0.0

Prandtl number convection exponent for heat transfer out of the working fluid

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PCONVM card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

coef = None

Constant coefficient used for forced convection

exppi = None

Prandtl number convection exponent for heat transfer into the working fluid. (Real > 0.0; Default = 0.0)

exppo = None

Prandtl number convection exponent for heat transfer out of the working fluid. (Real > 0.0; Default = 0.0)

expr = None

Reynolds number convection exponent. (Real > 0.0; Default = 0.0)

flag = None

Flag for mass flow convection. (Integer = 0 or 1; Default = 0)

form = None

Type of formula used for free convection. (Integer 0, 1, 10, 11, 20, or 21)

mid = None

Material property identification number. (Integer > 0)

pconid = None

Convection property identification number. (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PCONVM'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.PHBDY(pid, af=None, d1=None, d2=None, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalProperty

A property entry referenced by CHBDYP entries to give auxiliary geometric information for boundary condition surface elements

1

2

3

4

5

PHBDY

PID

AF

D1

D2

PHBDY

2

0.02

1.0

1.0

Creates a PHBDY card

Parameters
eidint

element id

pidint

property id

afint

Area factor of the surface used only for CHBDYP element Must be {POINT, LINE, TUBE, ELCYL} TUBE : constant thickness of hollow tube

d1, d2float; default=None

Diameters associated with the surface Used with CHBDYP [ELCYL, TUBE, FTUBE] surface elements

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PHBDY card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

af = None

Area factor of the surface used only for CHBDYP element TYPE = ‘POINT’, TYPE = ‘LINE’, TYPE = ‘TUBE’, or TYPE = ‘ELCYL’. For TYPE = ‘TUBE’, AF is the constant thickness of the hollow tube. (Real > 0.0 or blank)

d1 = None

Diameters associated with the surface. Used with CHBDYP element TYPE=’ELCYL’,’TUBE’,’FTUBE’

pid = None

Property identification number. (Unique Integer among all PHBDY entries). (Integer > 0)

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'PHBDY'
uncross_reference() → None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.TEMPBC(sid, Type, nodes, temps, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalBC

classmethod _init_from_empty()[source]
_properties = ['eid']
classmethod add_card(card, comment='')[source]

Adds a TEMPBC card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

property eid
raw_fields()[source]
type = 'TEMPBC'
write_card(size: int = 8, is_double: bool = False) → str[source]

The writer method used by BDF.write_card()

Parameters
sizeint; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.thermal.thermal.ThermalBC[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalCard

class pyNastran.bdf.cards.thermal.thermal.ThermalCard[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

cross_reference(model: BDF) → None[source]
class pyNastran.bdf.cards.thermal.thermal.ThermalElement[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalCard

class pyNastran.bdf.cards.thermal.thermal.ThermalProperty[source]

Bases: pyNastran.bdf.cards.thermal.thermal.ThermalCard

bdf_interface
add_card Module
Inheritance diagram of pyNastran.bdf.bdf_interface.add_card

Defines a method to add a card that is faster than add_card.

add_methods Module
Inheritance diagram of pyNastran.bdf.bdf_interface.add_methods
assign_type Module

Parses Nastran fields

pyNastran.bdf.bdf_interface.assign_type.blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None) → None[source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultNone

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.check_string(svalue: str, ifield: int, fieldname: str) → str[source]

strings can’t have the following characters: ‘ ‘ strings can’t have the following characters in the 0th position: ‘.’, ‘+’, ‘-’, 1-9

pyNastran.bdf.bdf_interface.assign_type.components_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default: Optional[str] = None) → Optional[str][source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultstr, None

the default value for the field (default=None)

Returns
componentsstr

a string of the dofs ‘0’ or ‘123456’ (not all are required)

pyNastran.bdf.bdf_interface.assign_type.double(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, end: str = '') → float[source]

Casts a value to a double

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

Returns
valuefloat

the value from the desired field

pyNastran.bdf.bdf_interface.assign_type.double_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default: Optional[float] = None, end: str = '') → float[source]

Casts a value to a double/blank

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultdouble, None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.double_or_string(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → Union[float, str][source]

Casts a value to a double/string

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

pyNastran.bdf.bdf_interface.assign_type.double_string_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]

Casts a value to an double/string/blank

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultdouble, None

the default value for the field (default=None)

Returns
valuefloat / str / None

the typed value

raises SyntaxError

if there is an invalid type ..

pyNastran.bdf.bdf_interface.assign_type.exact_string_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultstr, None

the default value for the field (default=None)

Returns
valuevaries

the value of the field

pyNastran.bdf.bdf_interface.assign_type.fields(func, card, fieldname, i, j=None) → List[Any][source]

Todo

improve fieldname

pyNastran.bdf.bdf_interface.assign_type.integer(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → int[source]

Casts a value to an integer

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

pyNastran.bdf.bdf_interface.assign_type.integer_double_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]

Casts a value to an integer/double/blank

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultint / float / None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.integer_double_or_string(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → Union[int, float, str][source]

Casts a value to an integer/double/string

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

Returns
valuevaries

the value of the field

pyNastran.bdf.bdf_interface.assign_type.integer_double_string_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultint, float, str, None (default=None)

the default value for the field

Returns
valueint, float, str, None

the field value

pyNastran.bdf.bdf_interface.assign_type.integer_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default: Optional[int] = None) → int[source]

Casts a value to an integer

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultint, None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.integer_or_double(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → Union[int, float][source]

Casts a value to an integer/double

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

Returns
valueint/float

the value with the proper type

raises SyntaxError

if there’s an invalid type ..

pyNastran.bdf.bdf_interface.assign_type.integer_or_string(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → Union[int, str][source]

Casts a value to an integer/string

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultint / str

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.integer_string_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]

Casts a value to an integer/string/blank

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultint, str, None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.interpret_value(value_raw: Optional[str], card: Union[str, pyNastran.bdf.bdf_interface.bdf_card.BDFCard] = '') → Union[int, float, str, None][source]

Converts a value from nastran format into python format.

Parameters
raw_valuestr

a string representation of a value

cardstr

???

Returns
valuevaries

the Nastran reprentation of the value

pyNastran.bdf.bdf_interface.assign_type.loose_string_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultstr, None

the default value for the field (default=None)

Returns
valuevaries

the value of the field

pyNastran.bdf.bdf_interface.assign_type.modal_components(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → int[source]

Gets the modal components (allows a -1 value); used by TIC

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

pyNastran.bdf.bdf_interface.assign_type.modal_components_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default: any = None) → int[source]

Gets the modal components (allows a -1 value); used by TIC

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

pyNastran.bdf.bdf_interface.assign_type.parse_components(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → str[source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

Returns
componentsstr

a string of the dofs ‘0’ or ‘123456’ (not all are required)

pyNastran.bdf.bdf_interface.assign_type.string(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str) → str[source]

Casts a value to a string

Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

Returns
valuestr

the value of the field

pyNastran.bdf.bdf_interface.assign_type.string_or_blank(card: pyNastran.bdf.bdf_interface.bdf_card.BDFCard, ifield: int, fieldname: str, default=None)[source]
Parameters
cardBDFCard()

BDF card as a list

ifieldint

field number

fieldnamestr

name of field

defaultstr, None

the default value for the field (default=None)

Returns
valuevaries

the value of the field

attributes Module
Inheritance diagram of pyNastran.bdf.bdf_interface.attributes

defines the BDF attributes

bdf_card Module
Inheritance diagram of pyNastran.bdf.bdf_interface.bdf_card

Defines the BDFCard class that is passed into the various Nastran cards.

class pyNastran.bdf.bdf_interface.bdf_card.BDFCard(card: List[str], has_none: bool = True)[source]

Bases: object

A BDFCard is a list that has a default value of None for fields out of range.

Parameters
cardList[str]

the split values for the card

has_nonebool; default=True

helps with a special case to speed up runtime

# definitely bad
card = [‘GRID’, ‘1’, ‘’, ‘1.0’, ‘2.0’, ‘3.0’]
BDFCard(card, has_none=False)
# definitely correct
card = [‘GRID’, ‘1’, None, ‘1.0’, ‘2.0’, ‘3.0’]
BDFCard(card, has_none=True)
# ???
card = [‘GRID’, ‘1’, ‘’, 1.0, 2.0, 3.0]
BDFCard(card, has_none=True)
field(i: int, default: Union[int, float, str, None] = None) → Union[int, float, str, None][source]

Gets the ith field on the card

Parameters
iint

the ith field on the card (following list notation)

defaultint/float/str/None

the default value for the field

Returns
valueint/float/str/None

the value on the ith field

fields(i: int = 0, j: Optional[int] = None, defaults: Any = None) → List[Any][source]

Gets multiple fields on the card

Parameters
iint > 0

the ith field on the card (following list notation)

jint / None

int : the jth field on the card None : last field on the card

defaultsList[int/float/str]

the default value for the field (as a list) len(defaults)=i-j-1

Returns
valuesList[varies]

int/float/str the values on the ith-jth fields

index(value)[source]
pop()[source]
write_card(size: int = 8, is_double: bool = False) → str[source]

prints the card in 8/16/16-double format

cross_reference Module
Inheritance diagram of pyNastran.bdf.bdf_interface.cross_reference

Links up the various cards in the BDF.

For example, with cross referencing…

>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)

>>> nid1 = 1
>>> node1 = model.nodes[nid1]
>>> node.nid
1

>>> node.xyz
[1., 2., 3.]

>>> node.Cid()
3

>>> node.cid
3

>>> node.cid_ref
CORD2S, 3, 1, 0., 0., 0., 0., 0., 1.,
        1., 0., 0.
# get the position in the global frame
>>> node.get_position()
[4., 5., 6.]

# get the position with respect to another frame
>>> node.get_position_wrt(model, cid=2)
[4., 5., 6.]

Without cross referencing…

>>> model = BDF()
>>> model.read_bdf(bdf_filename, xref=True)

>>> nid1 = 1
>>> node1 = model.nodes[nid1]
>>> node.nid
1

>>> node.xyz
[1., 2., 3.]

>>> node.Cid()
3

>>> node.cid
3

>>> node.cid_ref
None

# get the position in the global frame
>>> node.get_position()
Error!

Cross-referencing allows you to easily jump across cards and also helps with calculating things like position, area, and mass. The BDF is designed around the idea of cross-referencing, so it’s recommended that you use it.

safe_cross_reference Module
Inheritance diagram of pyNastran.bdf.bdf_interface.safe_cross_reference

Creates safe cross referencing

Safe cross-referencing skips failed xref’s

get_card Module
Inheritance diagram of pyNastran.bdf.bdf_interface.get_card
defines various methods to access high level BDF data:
  • GetCard() - get_card_ids_by_card_types(self, card_types=None, reset_type_to_slot_map=False,

    stop_on_missing_card=False, combine=False)

    • get_rslot_map(self, reset_type_to_slot_map=False)

    • get_cards_by_card_types(self, card_types, reset_type_to_slot_map=False,

      stop_on_missing_card=False)

    • get_SPCx_node_ids(self, spc_id, stop_on_failure=True)

    • get_SPCx_node_ids_c1( spc_id, stop_on_failure=True)

    • get_reduced_loads(self, load_id, scale=1., skip_scale_factor0=True, msg=’’)

    • get_reduced_dloads(self, dload_id, scale=1., skip_scale_factor0=True, msg=’’)

    • get_node_ids_with_elements(self, eids, msg=’’)

    • get_elements_nodes_by_property_type(self, dtype=’int32’,

      save_element_types=False)

    • get_elements_properties_nodes_by_element_type(self, dtype=’int32’, solids=None)

    • get_element_ids_list_with_pids(self, pids=None)

    • get_pid_to_node_ids_and_elements_array(self, pids=None, etypes=None, idtype=’int32’)

    • get_element_ids_dict_with_pids(self, pids=None, stop_if_no_eids=True)

    • get_node_id_to_element_ids_map(self)

    • get_node_id_to_elements_map(self)

    • get_property_id_to_element_ids_map(self)

    • get_material_id_to_property_ids_map(self)

    • get_reduced_mpcs(self, mpc_id)

    • get_reduced_spcs(self, spc_id)

    • get_spcs(self, spc_id, consider_nodes=False)

class pyNastran.bdf.bdf_interface.get_card.GetCard[source]

Bases: pyNastran.bdf.bdf_interface.get_methods.GetMethods

defines various methods to access high level BDF data

creates the attributes for the BDF

_upcast_int_dtype(dtype: str) → str[source]

helper for 64-bit integers

get_MPCx_node_ids(mpc_id: int, consider_mpcadd: bool = True, stop_on_failure: bool = True) → List[List[int]][source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids(...)

get_MPCx_node_ids_c1(mpc_id: int, consider_mpcadd: bool = True, stop_on_failure: bool = True) → Tuple[Dict[str, List[int]], Dict[str, List[int]]][source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids_c1(...)

get_SPCx_node_ids(spc_id: int, consider_spcadd: bool = True, stop_on_failure: bool = True) → List[int][source]

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters
spc_idint

the SPC id

stop_on_failurebool; default=True

errors if parsing something new

Returns
node_idsList[int]

the constrained associated node ids

get_SPCx_node_ids_c1(spc_id: int, stop_on_failure: bool = True) → Dict[str, List[int]][source]

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters
spc_idint

the SPC id

stop_on_failurebool; default=True

errors if parsing something new

Returns
node_ids_c1Dict[component] = node_ids
componentstr

the DOF to constrain

node_idsList[int]

the constrained node ids

get_card_ids_by_card_types(card_types: Optional[List[str]] = None, reset_type_to_slot_map: bool = False, stop_on_missing_card: bool = False, combine: bool = False) → Dict[str, List[int]][source]
Parameters
card_typesstr / List[str] / default=None

the list of keys to consider (list of strings; string) None : all cards

reset_type_to_slot_mapbool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_cardbool

crashes if you request a card and it doesn’t exist

combinebool; default=False

change out_dict into out_list combine the list of cards

Returns
out_dict: dict[str]=List[ids]

the key=card_type, value=the ID of the card object

out_list: List[ids]

value=the ID of the card object useful

Examples

>>> out_dict = model.get_card_ids_by_card_types(
    card_types=['GRID', 'CTRIA3', 'CQUAD4'], combine=False)
>>> out_dict = {
    'GRID' : [1, 2, 10, 42, 1000],
    'CTRIA3' : [1, 2, 3, 5],
    'CQUAD4' : [4],
}

shell elements

>>> out_dict = model.get_card_ids_by_card_types(
    card_types=['CTRIA3', 'CQUAD4'], combine=True)
>>> out_dict = {
    [1, 2, 3, 4, 5],
}
get_cards_by_card_types(card_types: List[str], reset_type_to_slot_map: bool = False, stop_on_missing_card: bool = False) → None[source]
Parameters
card_typesList[str]

the list of keys to consider

reset_type_to_slot_mapbool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_cardbool

crashes if you request a card and it doesn’t exist

Returns
out_dictdict[str] = List[BDFCard()]

the key=card_type, value=the card object

get_dependent_nid_to_components(mpc_id=None, stop_on_failure=True)[source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_dependent_nid_to_components(...)

get_element_ids_dict_with_pids(pids: Union[List[int], int, None] = None, stop_if_no_eids: bool = True, msg: str = '') → Dict[int, List[int]][source]

Gets all the element IDs with a specific property ID.

Parameters
pidsList[int] / int

list of property ID

stop_if_no_eidsbool; default=True

prevents crashing if there are no elements setting this to False really doesn’t make sense for non-DMIG models

Returns
element_idsdict[pid] = List[eid]

dictionary of lists by property pid : int

property id

eidint

element id

For example, we want all the elements with pids=[4, 5, 6],
but we want them in separate groups

Notes

What happens with CONRODs?

get_element_ids_list_with_pids(pids: Optional[List[int]] = None) → List[int][source]

Gets all the element IDs with a specific property ID.

Parameters
pidsList[int]; default=None -> all

list of property ID

Returns
element_idsList[int]

the element ids

For example, we want to get all the element ids with pids=[1, 2, 3]
get_elements_nodes_by_property_type(dtype: str = 'int32', save_element_types: bool = False) → Tuple[Dict[Tuple[str, int], Tuple[List[int], List[int]]]][source]

Gets a dictionary of (etype, pid) to [eids, node_ids]

Parameters
dtypestr; default=’int32’

the type of the integers

save_element_typesbool; default=False

adds the etype_to_eids_pids_nids output

Returns
etype_pid_to_eids_nidsdict[(etype, pid)][eids, nids]
etypestr

the element type

pidint

the property id CONRODS have a pid of 0

eids(neids, ) int ndarray

the elements with the property id of pid

nids(neids, nnodes/element) int ndarray

the nodes corresponding to the element

etype_to_eids_pids_nidsdict[etype][eids, pids, nids]

Enabled by save_element_types; default=None etype : str

the element type

eids(neids, ) int ndarray

the elements with the property id of pid

pids(neids, ) int ndarray

the property ids CONRODS have a pid of 0

nids(neids, nnodes/element) int ndarray

the nodes corresponding to the element

get_elements_properties_nodes_by_element_type(dtype: str = 'int32', solids: Optional[Dict[str, Any]] = None, stop_if_no_eids: bool = True) → numpy.array[source]

Gets a dictionary of element type to [eids, pids, node_ids]

Parameters
dtypestr; default=’int32’

the type of the integers

solidsdict[etype]value
etypestr

the element type should only be CTETRA, CHEXA, CPENTA, CPYRAM

valuevaries
(nnodes_min, nnodes_max)Tuple(int, int)

the min/max number of nodes for the element

(nnodes, )Tuple(int, )

the number of nodes useful if you only have CTETRA4s or only want CTETRA10s fails if you’re wrong (and too low)

Returns
etype_to_eids_pids_nidsdict[etype][eids, pids, nids]
etypestr

the element type

eids(neids, ) int ndarray

the elements with the property id of pid

pids(neids, ) int ndarray

the property ids CONRODS have a pid of 0

nids(neids, nnodes/element) int ndarray

the nodes corresponding to the element

get_material_id_to_property_ids_map(msg: str = '') → Dict[int, List[int]][source]

Returns a dictionary that maps a material ID to a list of properties

Returns
mid_to_pids_mapdict[int] = int

the mapping

msgstr; default=’’

a message added to the error message

Note

all properties require an mid to be counted (except for PCOMP, which has multiple mids)

get_mklist() → numpy.ndarray[source]

gets the MKLIST vector from MKAERO1/MKAERO2

get_mpcs(mpc_id: int, consider_mpcadd: bool = True, stop_on_failure: bool = True) → Tuple[List[int], List[str]][source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpcs(...)

get_nid_map(sort_ids: bool = True) → Dict[int, int][source]

Maps the GRID/SPOINT/EPOINT ids to a sorted/unsorted order.

Parameters
sort_idsbool; default=True

sort the ids

Returns
nid_mapDict[nid]i
nidint

the GRID/SPOINT/EPOINT id

iint

the index

..note: GRIDs, SPOINTs, & EPOINTs are stored in separate slots,

so they are unorganized.

get_node_id_to_element_ids_map() → Dict[int, List[int]][source]

Returns a dictionary that maps node IDs to a list of elemnent IDs

Todo

support 0d or 1d elements

Todo

support elements with missing nodes (e.g. CQUAD8 with missing nodes)

get_node_id_to_elements_map() → Dict[int, List[int]][source]

Returns a dictionary that maps node IDs to a list of elements.

Returns
nid_to_elements_mapDict[nid]=List[eid]

node id to a list of elements

Todo

support 0d or 1d elements ..

Todo

support elements with missing nodes (e.g. CQUAD8 with missing nodes)

get_node_ids_with_elements(eids: List[int], msg: str = '') → Set[int][source]

Get the node IDs associated with a list of element IDs

Parameters
eidsList[int]

list of element ID

msgstr

An additional message to print out if an element is not found

Returns
node_idsSet[int]

set of node IDs

For example::

eids = [1, 2, 3] # list of elements with pid=1 msg = ‘ which are required for pid=1’ node_ids = bdf.get_node_ids_with_elements(eids, msg=msg)

get_pid_to_node_ids_and_elements_array(pids: Union[List[int], int, None] = None, etypes: Optional[List[str]] = None, idtype: str = 'int32', msg: str = '') → Tuple[Dict[int, str], numpy.ndarray][source]

a work in progress

Parameters
pidsList[int]

list of property ID

etypesList[str]

element types to consider

Returns
pid_to_eids_ieids_mapdict[(pid, etype)] = eid_ieid
eid_ieid(Nelements, 2) int ndarray

eid is the element id ieid is the index in the node_ids array

node_ids(nelements, nnodes) int ndarray
nelementsint

the number of elements in the property type

nnodesint

varies based on the element type

get_property_id_to_element_ids_map(msg: str = '') → Dict[int, List[int]][source]

Returns a dictionary that maps a property ID to a list of elements.

Returns
pid_to_eids_mapDict[pid]=List[eid]

property id to a list of elements

msgstr; default=’’

a message added to the error message

get_reduced_dloads(dload_id, scale=1.0, consider_dload_combinations=True, skip_scale_factor0=False, msg='')[source]

Accounts for scale factors.

Parameters
dload_idint

the desired DLOAD id

consider_dload_combinationsbool; default=True

look at the DLOAD card

scalefloat; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0bool; default=False

Skip loads with scale factor=0.0. Nastran does not do this. Nastran will fail if referenced loads do not exist.

msgstr

debug message

Returns
dloadsList[loads]

a series of dload objects

scale_factorsList[float]

the associated scale factors

Warning

assumes xref=True ..

get_reduced_loads(load_case_id: int, scale: float = 1.0, consider_load_combinations: bool = True, skip_scale_factor0: bool = False, stop_on_failure: bool = True, msg: str = '')[source]

Accounts for scale factors.

Parameters
load_case_idint

the desired LOAD id

consider_load_combinationsbool; default=True

look at the LOAD card

scalefloat; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0bool; default=False

Skip loads with scale factor=0.0. Nastran does not do this. Nastran will fail if referenced loads do not exist.

stop_on_failurebool; default=True

errors if parsing something new

msgstr

debug message

Returns
loadsList[loads]

a series of load objects

scale_factorsList[float]

the associated scale factors

is_gravbool

is there a gravity card

Warning

assumes xref=True ..

get_reduced_mpcs(mpc_id: int, consider_mpcadd: bool = False, stop_on_failure: bool = True) → List[Any][source]

Get all traced MPCs that are part of a set

Parameters
mpc_idint

the MPC id

consider_mpcaddbool

MPCADDs should not be considered when referenced from an MPCADD from a case control, True should be used.

stop_on_failurebool; default=True

errors if parsing something new

Returns
mpcsList[MPC]

the various MPCs

get_reduced_nsms(nsm_id: int, consider_nsmadd: bool = True, stop_on_failure: bool = True) → List[Any][source]

Get all traced NSMs that are part of a set

Parameters
nsm_idint

the NSM id

consider_nsmaddbool

NSMADDs should not be considered when referenced from an NSMADD from a case control, True should be used.

stop_on_failurebool; default=True

errors if parsing something new

Returns
mpcsList[NSM]

the various NSMs

get_reduced_spcs(spc_id: int, consider_spcadd: bool = True, stop_on_failure: bool = True) → List[Any][source]

Get all traced SPCs that are part of a set

Parameters
spc_idint

the SPC id

consider_spcaddbool

SPCADDs should not be considered when referenced from an SPCADD from a case control, True should be used.

stop_on_failurebool; default=True

errors if parsing something new

Returns
spcsList[SPC]

the various SPCs

get_rigid_elements_with_node_ids(node_ids)[source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_rigid_elements_with_node_ids(...)

get_rslot_map(reset_type_to_slot_map=False) → Dict[str, str][source]

gets the rslot_map

get_spcs(spc_id: int, consider_nodes: bool = False, stop_on_failure: bool = True) → Tuple[List[int], List[str]][source]

Gets the SPCs in a semi-usable form.

Parameters
spc_idint

the desired SPC ID

consider_nodesbool; default=False

True : consider the GRID card PS field False: consider the GRID card PS field

Returns
nidsList[int]

the constrained nodes

compsList[str]

the components that are constrained on each node

Considers:
  • SPC

  • SPC1

  • SPCADD

  • GRID

Doesn’t consider:
  • non-zero enforced value on SPC

  • GMSPC

property nid_map

Gets the GRID/SPOINT/EPOINT ids to a sorted order.

Parameters
sort_idsbool; default=True

sort the ids

Returns
nid_mapDict[nid]i
nidint

the GRID/SPOINT/EPOINT id

iint

the index

..note: GRIDs, SPOINTs, & EPOINTs are stored in separate slots,

so they are unorganized.

..note: see self.get_nid_map(sort_ids=False) for the unsorted version
reset_rslot_map() → None[source]

helper method for get_rslot_map

pyNastran.bdf.bdf_interface.get_card._get_pid_to_node_ids_and_elements_array(model: BDF, pids: List[int], etypes: List[str], msg: str, idtype: str)[source]

a work in progress

Parameters
pidsList[int]

list of property ID

etypesList[str]

element types to consider

msgstr

???

idetypestr

‘int32’, ‘int64’

Returns
pid_to_eids_ieids_mapdict[(pid, etype)] = eid_ieid
eid_ieid(Nelements, 2) int ndarray

eid is the element id ieid is the index in the node_ids array

node_ids(nelements, nnodes) int ndarray
nelementsint

the number of elements in the property type

nnodesint

varies based on the element type

get_methods Module
Inheritance diagram of pyNastran.bdf.bdf_interface.get_methods

defines various methods to access low level BDF data

pyNastran.bdf.bdf_interface.get_methods._unique_keys(mydict: Dict[int, Any]) → str[source]

helper method

include_file Module
Defines utilities for parsing include files:
  • get_include_filename(card_lines, include_dir=’’, is_windows=None)

pyNastran.bdf.bdf_interface.include_file.get_include_filename(card_lines: List[str], include_dir: str = '', is_windows: Optional[bool] = None) → str[source]

Parses an INCLUDE file split into multiple lines (as a list).

Parameters
card_linesList[str]

the list of lines in the include card (all the lines!)

include_dirstr; default=’’

the include directory

Returns
filenamestr

the INCLUDE filename

pyNastran.bdf.bdf_interface.include_file.split_filename_into_tokens(include_dir: str, filename: str, is_windows: bool) → Any[source]

Tokens are the individual components of paths

Invalid Linux Tokens ‘0’ (NUL)

Invalid Windows Tokens < (less than) > (greater than) : (colon - sometimes works, but is actually NTFS Alternate Data Streams) ” (double quote) / (forward slash) (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk) All control codes (<= 31)

pyNastran.bdf.bdf_interface.include_file.split_tokens(tokens, is_windows)[source]

converts a series of path tokens into a joinable path

pybdf Module
Inheritance diagram of pyNastran.bdf.bdf_interface.pybdf
Main BDF class. Defines:
  • BDFInputPy

class pyNastran.bdf.bdf_interface.pybdf.BDFInputPy(read_includes: bool, dumplines: bool, encoding: str, nastran_format: str = 'msc', consider_superelements: bool = True, log: Any = None, debug: bool = False)[source]

Bases: object

BDF reader class that only handles lines and not building cards or parsing cards

BDF reader class that only handles lines and not building cards or parsing cards

Parameters
read_includesbool

should include files be read

dumplinesbool

Writes ‘pyNastran_dump.bdf’ up to some failed line index

encodingstr

the character encoding (e.g., utf8, latin1, cp1252)

nastran_formatstr; default=’msc’

‘zona’ has a special read method {msc, nx, zona}

consider_superelementsbool; default=True

parse ‘begin super=2’

loglogger(); default=None

a logger for printing INCLUDE files that are loadaed

debugbool; default=False

used when testing; for the logger

get_lines(bdf_filename: Union[str, _io.StringIO], punch: Optional[bool] = False, make_ilines: bool = True) → List[str][source]

Opens the bdf and extracts the lines by group

Parameters
bdf_filenamestr

the main bdf_filename

punchbool / None; default=False

is this a punch file None : guess True : no executive/case control decks False : executive/case control decks exist

make_ilinesbool; default=True

flag for bulk_data_ilines

Returns
system_linesList[str]

the system control lines (typically empty; used for alters)

executive_control_linesList[str]

the executive control lines (stores SOL 101)

case_control_linesList[str]

the case control lines (stores subcases)

bulk_data_linesList[str]

the bulk data lines (stores geometry, boundary conditions, loads, etc.)

bulk_data_ilinesNone / (nlines, 2) int ndarray
if make_ilines = True:

the [ifile, iline] pair for each line in the file

if make_ilines = False:

ilines = None

get_main_lines(bdf_filename: Union[str, _io.StringIO]) → List[str][source]

Opens the bdf and extracts the lines

Parameters
bdf_filenamestr / StringIO

the main bdf_filename

Returns
linesList[str]

all the lines packed into a single line stream

lines_to_deck_lines(lines: List[str], make_ilines: bool = True) → Tuple[List[str], int][source]

Merges the includes into the main deck.

Parameters
linesList[str]

the lines from the main BDF

make_ilinesbool; default=True

flag for ilines

Returns
active_linesList[str]

all the active lines in the deck

ilines(nlines, 2) int ndarray
if make_ilines = True:

the [ifile, iline] pair for each line in the file

if make_ilines = False:

ilines = None

replication Module
Defines various utilities for replicated BDF parsing including:
  • to_fields

pyNastran.bdf.bdf_interface.replication._field(old_card: List[str], ifield: int) → str[source]

helper for replication

pyNastran.bdf.bdf_interface.replication.float_replication(field: str, old_field: str) → float[source]

*4., *(11.5)

pyNastran.bdf.bdf_interface.replication.get_nrepeats(field: str, old_card: List[str], new_card: List[str]) → int[source]

=4, =(11)

pyNastran.bdf.bdf_interface.replication.int_replication(field: str, old_field: str) → int[source]

*4, *(11)

pyNastran.bdf.bdf_interface.replication.repeat_cards(old_card: List[str], new_card: List[str]) → List[List[str]][source]

helper for replication

pyNastran.bdf.bdf_interface.replication.to_fields_replication(card_lines: List[str]) → List[Optional[str]][source]

Converts a series of lines in a card into string versions of the field. Handles large, small, and CSV formatted cards. Same as to_fields, but uses a different method to determine if it’s large or small field format.

Parameters
linesList[str]

the lines of the BDF card object

Returns
fieldsList[str]

the string formatted fields of the card

Warning

this function is used by the reader and isn’t intended to be called by a separate process

stats Module
pyNastran.bdf.bdf_interface.stats._aero_stats(model: BDF, msg: List[str]) → None[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats._constraint_stats(model: BDF, msg: List[str]) → None[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats._cyclic_stats(model: BDF, msg: List[str]) → None[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats._get_added_message(group_msg: List[str], ncards_total) → str[source]
pyNastran.bdf.bdf_interface.stats._get_added_message_from_dict(groups_dict: Dict[str, int]) → str[source]
pyNastran.bdf.bdf_interface.stats._nsm_stats(model: BDF, msg: List[str]) → None[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats.get_bdf_stats(model: BDF, return_type: str = 'string', word: str = '') → Union[str, List[str]][source]

Print statistics for the BDF

Parameters
return_typestr (default=’string’)
the output type (‘list’, ‘string’)

‘list’ : list of strings ‘string’ : single, joined string

wordstr; default=’’

model flag

Returns
return_datastr, optional

the output data

Note

if a card is not supported and not added to the proper lists, this method will fail

Todo

RBE3s from OP2s can show up as ???s ..

subcase_cards Module
Inheritance diagram of pyNastran.bdf.bdf_interface.subcase_cards
class pyNastran.bdf.bdf_interface.subcase_cards.ADACT(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL', 'NONE'}
type = 'ADACT'
class pyNastran.bdf.bdf_interface.subcase_cards.AEROF(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'AEROF'
class pyNastran.bdf.bdf_interface.subcase_cards.APRES(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'APRES'
class pyNastran.bdf.bdf_interface.subcase_cards.CSCALE(data)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

CSCALE 1.3

classmethod add_from_case_control(line)[source]

add method used by the CaseControl class

type = 'CSCALE'
write(spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard[source]

Bases: object

basic card similar to the BaseCard class for the BDF

class pyNastran.bdf.bdf_interface.subcase_cards.CheckCard(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

Creates a card that validates the input

GROUNDCHECK=YES GROUNDCHECK(GRID=12,SET=(G,N,A),THRESH=1.E-5,DATAREC=YES)=YES GROUNDCHECK(SET=ALL)=YES

WEIGHTCHECK=YES WEIGHTCHECK(GRID=12,SET=(G,N,A),MASS)=YES WEIGHTCHECK(SET=ALL)=YES

Creates a card of the form:

key(options) = value

Parameters
keystr

the name of the card

valueList[str]

the options

valuestr

the response value

_parse(key_value, options)[source]
classmethod _parse_multi_equals(line, line_upper, lines, i)[source]

#GROUNDCHECK(PRINT,SET=(G,N,N+AUTOSPC,F,A),DATAREC=NO)=YES #WEIGHTCHECK(PRINT,SET=(G,N,F,A),CGI=NO,WEIGHT)=YES

_parse_set(key_value, options)[source]

SET=(G,N,N+AUTOSPC,F,A)

classmethod _parse_single_equals(line, line_upper, lines, i)[source]

GROUNDCHECK=YES WEIGHTCHECK=YES

classmethod add_from_case_control(line, line_upper, lines, i)[source]

add method used by the CaseControl class

allow_equals = True
allow_ints = False
allowed_keys = {}
allowed_strings = {}
allowed_values = {}
duplicate_names = {}
type = 'CheckCard'
write(spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.DSAPRT(END=SENS)=ALL DSAPRT(FORMATTED, EXPORT) DSAPRT(FORMATTED, START=FIRST, BY=3, END=LAST)=101 DSAPRT(UNFORMATTED, START=FIRST) DSAPRT(UNFORMATTED, EXPORT) DSAPRT(FORMATTED, END=4)=ALL DSAPRT(UNFORMATTED, END=SENS)=ALL DSAPRT(NOPRINT, EXPORT)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

Creates a card of the form:

key(options) = value

Parameters
keystr

the name of the card

valueList[str]

the options

valuestr

the response value

allowed_keys = {'BY', 'END', 'EXPORT', 'FORMATTED', 'START', 'UNFORMATTED'}
allowed_strings = {'ALL'}
allowed_values = {'BY': (<class 'int'>, None), 'END': (<class 'str'>, ['SENS', 'LAST']), 'START': (<class 'str'>, ['FIRST'])}
export_to_hdf5(hdf5_file, encoding)[source]
type = 'DSAPRT'
class pyNastran.bdf.bdf_interface.subcase_cards.EXTSEOUT(data)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

static _update_key(key)[source]

STIFFNESS, DAMPING, K4DAMP, and LOADS may be abbreviated to STIF, DAMP, K4DA, and LOAD, respectively.

classmethod add_from_case_control(line)[source]

add method used by the CaseControl class

allowed_keys = {'ASMBULK', 'DAMP', 'DAMPING', 'DMIGDB', 'DMIGOP2', 'DMIGPCH', 'DMIGSFIX', 'EXTBULK', 'EXTID', 'GEOM', 'K4DAMP', 'LOADS', 'MASS', 'MATDB', 'MATOP4', 'MATRIXDB', 'MATRIXOP4', 'STIFF', 'STIFFNESS'}
export_to_hdf5(hdf5_file, encoding)[source]
classmethod load_hdf5(subgroup, encoding)[source]

loads EXTSEOUT from an h5py HDF5 file

type = 'EXTSEOUT'
write(spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.GPKE(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'GPKE'
class pyNastran.bdf.bdf_interface.subcase_cards.GPRSORT(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'GPRSORT'
class pyNastran.bdf.bdf_interface.subcase_cards.GPSDCON(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'GPSDCON'
class pyNastran.bdf.bdf_interface.subcase_cards.GPSTRESS(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'GPSTRESS'
class pyNastran.bdf.bdf_interface.subcase_cards.GROUNDCHECK(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

GROUNDCHECK=YES GROUNDCHECK(GRID=12,SET=(G,N,A),THRESH=1.E-5,DATAREC=YES)=YES

Creates a card of the form:

key(options) = value

Parameters
keystr

the name of the card

valueList[str]

the options

valuestr

the response value

allowed_keys = {'DATAREC', 'GRID', 'NOPRINT', 'PRINT', 'RTHRESH', 'SET', 'THRESH'}
allowed_strings = {'YES'}
allowed_values = {'CGI': (<class 'str'>, ['YES', 'NO']), 'DATAREC': (<class 'str'>, ['YES', 'NO']), 'GRID': (<class 'int'>, None), 'RTHRESH': (<class 'float'>, None), 'SET': (<class 'str'>, ['G', 'N', 'AUTOSPC', 'F', 'A', 'ALL']), 'THRESH': (<class 'float'>, None)}
export_to_hdf5(hdf5_file, encoding)[source]
type = 'GROUNDCHECK'
class pyNastran.bdf.bdf_interface.subcase_cards.HARMONICS(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL', 'NONE'}
type = 'HARMONICS'
class pyNastran.bdf.bdf_interface.subcase_cards.IntCard(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

interface for cards of the form:

NAME = 10

Creates an IntCard

Parameters
valueint

the value for the card

classmethod add_from_case_control(line, line_upper, lines, i)[source]

Creates a card from the Case Control Deck

Parameters
linestr

the line of the card

line_upperstr

unused

linesList[str]

unused

iint

unused

export_to_hdf5(h5_file, encoding)[source]
classmethod load_hdf5(h5_file, encoding)[source]
type = 'IntCard'
write(spaces)[source]

writes a card with spaces

class pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

interface for cards of the form:

NAME = 10 NAME = ALL

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {}
export_to_hdf5(h5_file, encoding)[source]
classmethod load_hdf5(h5_file, encoding)[source]
type = 'IntStrCard'
class pyNastran.bdf.bdf_interface.subcase_cards.MEFFMASS(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

MEFFMASS(GRID=12,SUMMARY,PARTFAC) MEFFMASS(PLOT,ALL,THRESH=0.001)=YES

Creates a card of the form:

key(options) = value

Parameters
keystr

the name of the card

valueList[str]

the options

valuestr

the response value

allowed_keys = {'ALL', 'FRACSUM', 'GRID', 'MAXIT', 'MEFFM', 'MEFFW', 'MINT1', 'MINT2', 'MINT3', 'PARTFAC', 'PLOT', 'PRINT', 'PUNCH', 'SUMMARY', 'THRESH'}
allowed_strings = {'NO', 'YES'}
allowed_values = {'GRID': (<class 'int'>, None), 'MAXIT': (<class 'int'>, None), 'MINT1': (<class 'int'>, None), 'MINT2': (<class 'int'>, None), 'MINT3': (<class 'int'>, None), 'THRESH': (<class 'float'>, None)}
alternate_names = {'MEFF'}
export_to_hdf5(hdf5_file, encoding)[source]
type = 'MEFFMASS'
class pyNastran.bdf.bdf_interface.subcase_cards.MODCON(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

MODCON=123 MODCON(SORT1,PHASE,PRINT,PUNCH,BOTH,TOPS=5)=ALL

Creates a card of the form:

key(options) = value

Parameters
keystr

the name of the card

valueList[str]

the options

valuestr

the response value

allow_ints = True
allowed_keys = {'ABS', 'BOTH', 'IMAG', 'NOPRINT', 'NORM', 'PANELMC', 'PHASE', 'PRINT', 'PUNCH', 'REAL', 'SOLUTION', 'SORT1', 'SORT2', 'TOPF', 'TOPS'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {'SOLUTION': (<class 'int'>, None), 'TOPF': (<class 'int'>, None), 'TOPS': (<class 'int'>, None)}
duplicate_names = {'PANE': 'PANELMC', 'SOLU': 'SOLUTION', 'TOP': 'TOPS'}
type = 'MODCON'
class pyNastran.bdf.bdf_interface.subcase_cards.OFREQUENCY(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
alternate_names = {'OFREQ'}
type = 'OFREQUENCY'
class pyNastran.bdf.bdf_interface.subcase_cards.OMODES(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'OMODES'
class pyNastran.bdf.bdf_interface.subcase_cards.SEALL(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'SEALL'
class pyNastran.bdf.bdf_interface.subcase_cards.SEDR(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'SEDR'
class pyNastran.bdf.bdf_interface.subcase_cards.SET(set_id, values)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

classmethod add_from_case_control(line_upper, lines, i)[source]

add method used by the CaseControl class

property key

temporary method to emulate the old key attribute

type = 'SET'
write(spaces)[source]

writes SET 80 = 3926, 3927, 3928, 4141, 4142, 4143, 4356, 4357, 4358, 4571,

4572, 4573, 3323 THRU 3462, 3464 THRU 3603, 3605 THRU 3683, 3910 THRU 3921, 4125 THRU 4136, 4340 THRU 4351

class pyNastran.bdf.bdf_interface.subcase_cards.SETMC(set_id, values)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.SET

SETMC 121 = ACCE/99(T3),1200(T1),1399(R2) SETMC 222 = STRESS/134(22) SETMC 343 = ACCE/99(T3),1200(T1),1399(R2),STRESS/134(22) SETMC 122 = DISP/45(T1) 45(T2) 45(T3),

38(T1) 38(T2) 38(T3),

VELO/45(T1) 45(T2) 45(T3),

38(T1) 38(T2) 38(T3),

ACCE/45(T1) 45(T2) 45(T3),

38(T1) 38(T2) 38(T3)

type = 'SETMC'
class pyNastran.bdf.bdf_interface.subcase_cards.SUPER(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

Creates an IntStrCard

Parameters
valueint/str

the value for the card

allowed_strings = {'ALL'}
type = 'SUPER'
class pyNastran.bdf.bdf_interface.subcase_cards.SURFACE(data)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

SURFACE 10 SET 9 NORMAL X3 SURFACE 41 SET 42 FIBRE ALL NORMAL Z VOLUME id SET sid, [PRINCIPAL, DIRECT STRESS] [SYSTEM {ELEMENT, CORD cid, BASIC}]

classmethod add_from_case_control(line)[source]

add method used by the CaseControl class

type = 'VOLUME'
write(spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.StringCard(value, validate=True)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

classmethod add_from_case_control(line, line_upper, lines, i)[source]

add method used by the CaseControl class

allowed_values = []
export_to_hdf5(h5_file, encoding)[source]
classmethod load_hdf5(h5_file, encoding)[source]
type = 'StringCard'
validate()[source]
write(spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.VOLUME(data)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CaseControlCard

VOLUME 21 SET 2 VOLUME id SET sid, [PRINCIPAL, DIRECT STRESS] [SYSTEM {ELEMENT, CORD cid, BASIC}]

classmethod add_from_case_control(line)[source]

add method used by the CaseControl class

type = 'VOLUME'
write(spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.WEIGHTCHECK(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

WEIGHTCHECK=YES WEIGHTCHECK(GRID=12,SET=(G,N,A),MASS)=YES

Creates a card of the form:

key(options) = value

Parameters
keystr

the name of the card

valueList[str]

the options

valuestr

the response value

allowed_keys = {'CGI', 'GRID', 'MASS', 'NOPRINT', 'PRINT', 'SET', 'WEIGHT'}
allowed_strings = {'YES'}
allowed_values = {'CGI': (<class 'str'>, ['YES', 'NO']), 'GRID': (<class 'int'>, None), 'SET': (<class 'str'>, ['G', 'N', 'AUTOSPC', 'F', 'A', 'V', 'ALL'])}
export_to_hdf5(hdf5_file, encoding)[source]
type = 'WEIGHTCHECK'
pyNastran.bdf.bdf_interface.subcase_cards.decode_bytes_list(bytes_list, encoding)[source]
pyNastran.bdf.bdf_interface.subcase_cards.export_to_hdf5_check(self, hdf5_file, encoding)[source]
pyNastran.bdf.bdf_interface.subcase_cards.split_by_mixed_commas_parentheses(str_options: str) → List[str][source]

Excessively complicated function to split something excessively complicated. Thankfully, it only has one set of parentheses and no nested blocks.

Parameters
str_optionsstr

a nasty section of a case control line ‘PRINT,SET=(G,N,N+AUTOSPC,F,A),DATAREC=NO’ ‘PRINT,SET=(G,N,F,A),CGI=NO,WEIGHT’

Returns
optionsList[str]

something that’s actually parseable [‘PRINT’, ‘SET=(G,N,N+AUTOSPC,F,A)’, ‘DATAREC=NO’] [‘PRINT’, ‘SET=(G,N,F,A)’, ‘CGI=NO’, ‘WEIGHT’]

subcase_utils Module
defines:
  • expand_thru_case_control(set_value)

  • write_set(set_id, values, spaces=’’)

  • write_stress_type(key, options, value, spaces=’’)

pyNastran.bdf.bdf_interface.subcase_utils.expand_float(data)[source]

helper method for expand_thru_case_control

pyNastran.bdf.bdf_interface.subcase_utils.expand_thru_case_control(data_in)[source]

Expands a case control SET card

Parameters
set_valuestr???

???

Returns
valuesList[int] / List[float]

the values in the SET

Examples

set_value = [‘1 THRU 5’, ‘20 THRU 30 BY 2’] >>> values = expand_thru_case_control(set_value) [1, 2, 3, 4, 5, 20, 22, 24, 26, 28, 30]

Odd behavior:
  • 1 THRU 10 EXCEPT 4,5,6,11 results in [1,2,3,7,8,9,10,11] the EXCEPT is active while the value is less than the THRU value of 10 and the values are in ascending order

What happens when:
  • a value is excluded and later added or

  • a value is included and later excluded

pyNastran.bdf.bdf_interface.subcase_utils.get_except(data, i, ndata, end_value)[source]

helper method for expand that gets the values until the end of an EXCEPT chain

pyNastran.bdf.bdf_interface.subcase_utils.isinteger(astring)[source]

Is the given string an integer?

pyNastran.bdf.bdf_interface.subcase_utils.setup_data(data_in)[source]

helper method for expand_thru_case_control

pyNastran.bdf.bdf_interface.subcase_utils.split_comma_space(datai)[source]

normalizes the form of a SET into a comma separated list instead of being mixed

pyNastran.bdf.bdf_interface.subcase_utils.write_set(set_id: int, values: List[int], spaces: str = '') → str[source]

writes SET 80 = 3926, 3927, 3928, 4141, 4142, 4143, 4356, 4357, 4358, 4571,

4572, 4573, 3323 THRU 3462, 3464 THRU 3603, 3605 THRU 3683, 3910 THRU 3921, 4125 THRU 4136, 4340 THRU 4351

Parameters
set_idint / str?

the Set ID

valuesList[int]

the Set values

spacesstr; default=’’

indentation

Returns
msgstr

the string of the set

Examples

Example 1 >>> set_id = 80 >>> values = [1, 2, 3, 4, 5, 7] >>> set = write_set(set_id, values, spaces=’’) >>> set SET 80 = 1 THRU 5, 7

Example 2 >>> set_id = ‘’ >>> values = [‘ALL’] >>> set = write_set(set_id, values, spaces=’’) >>> set SET = ALL

pyNastran.bdf.bdf_interface.subcase_utils.write_stress_type(key: str, options: List[str], value: Optional[str], spaces: str = '') → str[source]
writes:
  • STRESS(SORT1) = ALL

  • GROUNDCHECK(PRINT,SET=(G,N,N+AUTOSPC,F,A),THRESH=1e-2,DATAREC=NO) = YES

verify_validate Module
defines:
  • verify_bdf(model, xref)

  • validate_bdf(model)

pyNastran.bdf.bdf_interface.verify_validate._print_card(card: Any) → str[source]

helper for _validate_msg

pyNastran.bdf.bdf_interface.verify_validate._validate_dict(model: BDF, objects: Dict[Any, Any]) → None[source]

helper method for validate_bdf

pyNastran.bdf.bdf_interface.verify_validate._validate_dict_list(model: BDF, objects_dict: Dict[Any, Any]) → None[source]

helper method for validate_bdf

pyNastran.bdf.bdf_interface.verify_validate._validate_list(model: BDF, objects: List[Any]) → None[source]

helper method for validate_bdf

pyNastran.bdf.bdf_interface.verify_validate._validate_msg(card_obj: Any) → str[source]

helper for _validate_traceback

pyNastran.bdf.bdf_interface.verify_validate._validate_traceback(model: BDF, obj, unused_error, ifailed: int, nmax_failed: int) → Tuple[int, Any, Any, Any][source]

helper method for validate_bdf to write a traceback

pyNastran.bdf.bdf_interface.verify_validate._verify_dict(dict_obj: Dict[Any, Any], xref: bool) → None[source]

helper for verify_bdf

pyNastran.bdf.bdf_interface.verify_validate._verify_dict_list(dict_list: Dict[Any, List[Any]], xref: bool) → None[source]

helper for verify_bdf

pyNastran.bdf.bdf_interface.verify_validate._verify_model_dict(dict_obj: Dict[Any, Any], model: BDF, xref: bool) → None[source]

helper for verify_bdf

pyNastran.bdf.bdf_interface.verify_validate.validate_bdf(model: BDF) → None[source]
pyNastran.bdf.bdf_interface.verify_validate.verify_bdf(model: BDF, xref: bool) → None[source]
utils Module
Defines various utilities for BDF parsing including:
  • to_fields

pyNastran.bdf.bdf_interface.utils.expand_tabs(line: str) → str[source]

expands the tabs; breaks if you mix commas and tabs

pyNastran.bdf.bdf_interface.utils.fill_dmigs(model: BDF) → None[source]

fills the DMIx cards with the column data that’s been stored

pyNastran.bdf.bdf_interface.utils.parse_executive_control_deck(executive_control_lines: List[str]) → Tuple[Optional[int], Optional[str], Optional[int]][source]

Extracts the solution from the executive control deck

pyNastran.bdf.bdf_interface.utils.print_filename(filename: str, relpath: bool = True) → str[source]

Takes a path such as C:/work/fem.bdf and locates the file using relative paths. If it’s on another drive, the path is not modified.

Parameters
filenamestr

a filename string

Returns
filename_stringstr

a shortened representation of the filename

pyNastran.bdf.bdf_interface.utils.to_fields(card_lines: List[str], card_name: str) → List[str][source]

Converts a series of lines in a card into string versions of the field. Handles large, small, and CSV formatted cards.

Parameters
linesList[str]

the lines of the BDF card object

card_namestr

the card_name -> ‘GRID’

Returns
fieldsList[str]

the string formatted fields of the card

Warning

this function is used by the reader and isn’t intended to be called by a separate process

uncross_reference Module
Inheritance diagram of pyNastran.bdf.bdf_interface.uncross_reference

Unlinks up the various cards in the BDF.

write_mesh Module
Inheritance diagram of pyNastran.bdf.bdf_interface.write_mesh
This file defines:
  • WriteMesh

write_mesh_files Module
Inheritance diagram of pyNastran.bdf.bdf_interface.write_mesh_file
This file defines:
  • WriteMesh

class pyNastran.bdf.bdf_interface.write_mesh_file.WriteMeshs[source]

Bases: pyNastran.bdf.bdf_interface.write_mesh.WriteMesh

Defines methods for writing cards

Major methods:
  • model.write_bdf(…)

  • model.echo_bdf(…)

  • model.auto_reject_bdf(…)

creates methods for writing cards

_write_aero_control_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the aero control surface cards

_write_aero_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the aero cards

_write_bdf_includes(out_filenames, bdf_files, relative_dirname=None, is_windows=True)[source]

Writes the INCLUDE files

Parameters
out_filenamesdict[fname]fname2

fname_in - the nominal bdf that was read fname_out - the bdf that will be written

relative_dirnamestr; default=None -> os.curdir

A relative path to reference INCLUDEs. ‘’ : relative to the main bdf None : use the current directory path : absolute path

is_windowsbool; default=None
True/FalseWindows has a special format for writing INCLUDE

files, so the format for a BDF that will run on Linux and Windows is different.

None : Check the platform

_write_common_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Write the common outputs so none get missed…

Parameters
bdf_filefile

the file object

sizeint (default=8)

the field width

is_doublebool (default=False)

is this double precision

_write_constraints_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the constraint cards sorted by ID

_write_contact_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the contact cards sorted by ID

_write_coords_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the coordinate cards in a sorted order

_write_dloads_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the dload cards sorted by ID

_write_dmigs_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the DMIG cards

Parameters
sizeint

large field (16) or small field (8)

_write_dynamic_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the dynamic cards sorted by ID

_write_elements_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the elements in a sorted order

_write_flutter_file(bdf_files: Any, size: int = 8, is_double: bool = False, write_aero_in_flutter: bool = True, is_long_ids: Optional[bool] = None) → None[source]

Writes the flutter cards

_write_grids_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the GRID-type cards

_write_gust_file(bdf_files: Any, size: int = 8, is_double: bool = False, write_aero_in_gust: bool = True, is_long_ids: Optional[bool] = None) → None[source]

Writes the gust cards

_write_loads_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the load cards sorted by ID

_write_masses_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the mass cards sorted by ID

_write_materials_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the materials in a sorted order

_write_nodes_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the NODE-type cards

_write_nsm_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the nsm in a sorted order

_write_optimization_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the optimization cards sorted by ID

_write_params_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the PARAM cards

_write_properties_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the properties in a sorted order

_write_rejects_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the rejected (processed) cards and the rejected unprocessed cardlines

_write_rigid_elements_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the rigid elements in a sorted order

_write_sets_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the SETx cards sorted by ID

_write_static_aero_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the static aero cards

_write_superelements_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the Superelement cards

Parameters
sizeint

large field (16) or small field (8)

_write_tables_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the TABLEx cards sorted by ID

_write_thermal_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the thermal cards

_write_thermal_materials_file(bdf_files: Any, size: int = 8, is_double: bool = False, is_long_ids: Optional[bool] = None) → None[source]

Writes the thermal materials in a sorted order

write_bdfs(out_filenames: Optional[Union[str, StringIO]], relative_dirname: Optional[str] = None, encoding: Optional[str] = None, size: int = 8, is_double: bool = False, enddata: Optional[bool] = None, close: bool = True, is_windows: Optional[bool] = None) → None[source]

Writes the BDF.

Parameters
out_filenamevaries; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

relative_dirnamestr; default=None -> os.curdir

A relative path to reference INCLUDEs. ‘’ : relative to the main bdf None : use the current directory path : absolute path

encodingstr; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

sizeint; {8, 16}

the field size

is_doublebool; default=False

False : small field True : large field

enddatabool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

closebool; default=True

should the output file be closed

is_windowsbool; default=None
True/FalseWindows has a special format for writing INCLUDE

files, so the format for a BDF that will run on Linux and Windows is different.

None : Check the platform

pyNastran.bdf.bdf_interface.write_mesh_file._get_ifiles_dict(cards_dict)[source]

gets the ids for a dictionary by file number

pyNastran.bdf.bdf_interface.write_mesh_file._get_ifiles_dict_list(cards)[source]

gets the ids for a dictionary of lists by file number

pyNastran.bdf.bdf_interface.write_mesh_file._map_filenames_to_ifile_filname_dict(out_filenames, active_filenames)[source]

Converts a old_filename->new_filename dict to a ifile->new_filename dict.

pyNastran.bdf.bdf_interface.write_mesh_file._open_bdf_files(ifile_out_filenames, active_filenames, encoding)[source]

opens N bdf files

pyNastran.bdf.bdf_interface.write_mesh_file._write_bdf_dict_cards(bdf_file, cards, size, is_double, is_long_ids)[source]

writes a dictionary

pyNastran.bdf.bdf_interface.write_mesh_file.write_bdf_dict_ids(bdf_file, cards, ids, size, is_double, is_long_ids)[source]

writes a dictionary by ifile

pyNastran.bdf.bdf_interface.write_mesh_file.write_bdfs_dict(bdf_files, cards, size, is_double, is_long_ids)[source]

writes a dictionary by ifile

pyNastran.bdf.bdf_interface.write_mesh_file.write_bdfs_dict_list(bdf_files, cards, size, is_double, is_long_ids)[source]

writes a dictionary of lists by ifile

pyNastran.bdf.bdf_interface.write_mesh_file.write_bdfs_list(bdf_files, cards, size, is_double, is_long_ids)[source]

writes a list by ifile

pyNastran.bdf.bdf_interface.write_mesh_file.write_xpoints_file(bdf_files, cardtype, points, comment='')[source]

writes SPOINTs/EPOINTs

mesh_utils
bdf_equivalence Module
defines:
model = bdf_equivalence_nodes(bdf_filename, bdf_filename_out, tol,

renumber_nodes=False, neq_max=4, xref=True, node_set=None, size=8, is_double=False, remove_collapsed_elements=False, avoid_collapsed_elements=False, crash_on_collapse=False, log=None, debug=True)

pyNastran.bdf.mesh_utils.bdf_equivalence._check_for_referenced_nodes(model: pyNastran.bdf.bdf.BDF, node_set: Optional[Any], nids: Any, all_nids: Any, nodes_xyz: Any) → Optional[Any][source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_build_tree_new(kdt: KDTree, nodes_xyz: NDArrayN3float, nids: NDArrayNint, nnodes: int, is_not_node_set: bool, tol: float, log: SimpleLogger, inew=None, node_set=None, neq_max: int = 4, msg: str = '', debug: float = False) → Tuple[Any, List[Tuple[int, int]]][source]
pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_final(nid_pairs, model: pyNastran.bdf.bdf.BDF, tol: float, node_set=None, debug: bool = False) → None[source]

apply nodal equivalencing to model

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node(model: pyNastran.bdf.bdf.BDF, renumber_nodes: bool = False) → Tuple[Any, Any, Dict[int, int]][source]

helper function for _eq_nodes_setup that doesn’t handle node sets

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node_set(model: pyNastran.bdf.bdf.BDF, node_set: List[Any], renumber_nodes: bool = False) → Tuple[Any, Any, Dict[int, int]][source]

helper function for _eq_nodes_setup that handles node_sets

pyNastran.bdf.mesh_utils.bdf_equivalence._get_tree(nodes_xyz: Any, msg: str = '') → scipy.spatial.ckdtree.cKDTree[source]

gets the kdtree

pyNastran.bdf.mesh_utils.bdf_equivalence._get_xyz_cid0(model: pyNastran.bdf.bdf.BDF, nids: Any, fdtype: str = 'float32') → Any[source]

gets xyz_cid0

pyNastran.bdf.mesh_utils.bdf_equivalence._nodes_xyz_nids_to_nid_pairs(nodes_xyz: NDArrayN3float, nids: NDArrayNint, tol: float, log: SimpleLogger, inew: NDArrayNint, node_set=None, neq_max: int = 4, method: str = 'new', debug: bool = False) → List[Tuple[int, int]][source]

Helper for equivalencing

Returns
nid_pairsList[Tuple[int, int]]

a series of (nid1, nid2) pairs

pyNastran.bdf.mesh_utils.bdf_equivalence._nodes_xyz_nids_to_nid_pairs_new(kdt, nids, node_set, tol: float)[source]

helper function for bdf_equivalence_nodes

pyNastran.bdf.mesh_utils.bdf_equivalence.bdf_equivalence_nodes(bdf_filename: str, bdf_filename_out: Optional[str], tol: float, renumber_nodes: bool = False, neq_max: int = 4, xref: bool = True, node_set: Optional[Union[List[int], NDArrayNint]] = None, size: int = 8, is_double: bool = False, remove_collapsed_elements: bool = False, avoid_collapsed_elements: bool = False, crash_on_collapse: bool = False, log: Optional[SimpleLogger] = None, debug: bool = True, method: str = 'new') → BDF[source]

Equivalences nodes; keeps the lower node id; creates two nodes with the same

Parameters
bdf_filenamestr / BDF

str : bdf file path BDF : a BDF model that is fully valid (see xref)

bdf_filename_outstr

str: a bdf_filename to write None: don’t write the deck

tolfloat

the spherical tolerance

renumber_nodesbool

should the nodes be renumbered (default=False)

neq_maxint

the number of “close” points (default=4)

xrefbool

does the model need to be cross_referenced (default=True; only applies to model option)

node_setList[int] / (n, ) ndarray; default=None

the list/array of nodes to consider (not supported with renumber_nodes=True)

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

remove_collapsed_elementsbool; default=False (unsupported)
True1D/2D/3D elements will not be collapsed;

CELASx/CDAMP/MPC/etc. are not considered

False : no elements will be removed

avoid_collapsed_elementsbool; default=False (unsupported)
Trueonly collapses that don’t break 1D/2D/3D elements will be considered;

CELASx/CDAMP/MPC/etc. are considered

False : element can be collapsed

crash_on_collapsebool; default=False
stop if nodes have been collapsed

False: blindly move on True: rereads the BDF which catches doubled nodes (temporary);

in the future collapse=True won’t need to double read; an alternative is to do Patran’s method of avoiding collapse)

debugbool

bdf debugging

method: str; default=’new’

‘new’: doesn’t require neq_max; new in v1.3 ‘old’: use neq_max; used in v1.2

loglogger(); default=None

bdf logging

Returns
modelBDF()

The BDF model corresponding to bdf_filename_out

Warning

I doubt SPOINTs/EPOINTs work correctly ..

Warning

xref not fully implemented (assumes cid=0) ..

Todo

node_set still does work on the all the nodes in the big kdtree loop, which is very inefficient

Todo

remove_collapsed_elements is not supported ..

Todo

avoid_collapsed_elements is not supported ..

bdf_merge Module
defines:
  • bdf_merge(bdf_filenames, bdf_filename_out=None, renumber=True, encoding=None, size=8,

    is_double=False, cards_to_skip=None, log=None, skip_case_control_deck=False)

pyNastran.bdf.mesh_utils.bdf_merge._apply_scalar_cards(model: pyNastran.bdf.bdf.BDF, model2_renumber: pyNastran.bdf.bdf.BDF) → None[source]

apply cards from model2 to model if they don’t exist in model

pyNastran.bdf.mesh_utils.bdf_merge._assemble_mapper(mappers: List[MAPPER], mapper_0: MAPPER, data_members: List[str], mapper_renumber: Optional[MAPPER] = None) → None[source]

Assemble final mappings from all original ids to the ids in the merged and possibly renumbered model.

Parameters
mappersList[mapper]
mapperdict[key]value
key???

???

value???

???

mapper_0mapper
key???

???

value???

???

data_membersList[str]
list of things to include in the mappers?
data_members = [

‘coords’, ‘nodes’, ‘elements’, ‘masses’, ‘properties’, ‘properties_mass’, ‘materials’, ‘sets’, ‘rigid_elements’, ‘mpcs’,

]

mapper_renumberdict[key]: value; default=None
keystr

a BDF attribute

valuedict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

Returns
mappers_allList[mappers]

One mapper for each bdf_filename

pyNastran.bdf.mesh_utils.bdf_merge._dict_key_to_key(dictionary) → Dict[int, int][source]

creates a dummy map from the nominal key to the nominal key

pyNastran.bdf.mesh_utils.bdf_merge._dicts_key_to_key(dictionaries: List[Dict[int, Any]]) → Dict[int, int][source]

Creates a dummy map from the nominal key to the nominal key for multiple input dictionaries. This is intended for use with:

  • SPCs, MPCs, Loads

pyNastran.bdf.mesh_utils.bdf_merge._get_mapper_0(model: BDF) → MAPPER[source]

Get the mapper for the first model.

Parameters
modelBDF()

the bdf model object

Returns
mapperdict[key]: value
keystr

a BDF attribute

valuedict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

pyNastran.bdf.mesh_utils.bdf_merge._renumber_mapper(mapper_0: MAPPER, mapper_renumber: MAPPER)[source]

Renumbers a mapper

Parameters
mapper_0dict[key]: value
keystr

a BDF attribute

valuedict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

mapper_renumber???

???

Returns
mapperdict[map_type]sub_mapper
map_type???

???

sub_mapperdict[key]value
key???

???

value???

???

pyNastran.bdf.mesh_utils.bdf_merge.bdf_merge(bdf_filenames: List[str], bdf_filename_out: Optional[str] = None, renumber: bool = True, encoding: Optional[str] = None, size: int = 8, is_double: bool = False, cards_to_skip: Optional[List[str]] = None, skip_case_control_deck: bool = False, log: Optional[SimpleLogger] = None) → Tuple[BDF, List[MAPPER]][source]

Merges multiple BDF into one file

Parameters
bdf_filenamesList[str]

list of bdf filenames

bdf_filename_outstr / None

the output bdf filename (default=None; None -> no writing)

renumberbool

should the bdf be renumbered (default=True)

encodingstr

the unicode encoding (default=None; system default)

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

cards_to_skipList[str]; (default=None -> don’t skip any cards)

There are edge cases (e.g. FLUTTER analysis) where things can break due to uncross-referenced cards. You need to disable entire classes of cards in that case (e.g. all aero cards).

skip_case_control_deckbool, optional, defaultFalse

If true, don’t consider the case control deck while merging.

Returns
modelBDF

Merged model.

mappers_allList[mapper]
mapperDict[bdf_attribute]old_id_to_new_id_dict

List of mapper dictionaries of original ids to merged

bdf_attributestr

a BDF attribute (e.g., ‘nodes’, ‘elements’)

old_id_to_new_id_dictdict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

Supports

nodes: GRID coords: CORDx elements: CQUAD4, CTRIA3, CTETRA, CPENTA, CHEXA, CELASx, CBAR, CBEAM

CONM1, CONM2, CMASS

properties: PSHELL, PCOMP, PSOLID, PMASS materials: MAT1, MAT8

Todo

doesn’t support SPOINTs/EPOINTs ..

Warning

still very preliminary ..

bdf_renumber Module
defines:
bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,

starting_id_dict=None, round_ids=False, cards_to_skip=None, log=None, debug=False)

superelement_renumber(bdf_filename, bdf_filename_out=None, size=8, is_double=False,

starting_id_dict=None, cards_to_skip=None, log=None, debug=False)

pyNastran.bdf.mesh_utils.bdf_renumber._create_mid_map(model, mid)[source]

builds the mid_map

pyNastran.bdf.mesh_utils.bdf_renumber._create_nid_maps(model, starting_id_dict, nid)[source]

builds the nid_maps

pyNastran.bdf.mesh_utils.bdf_renumber._get_bdf_model(bdf_filename, cards_to_skip=None, log=None, debug=False)[source]

helper method

pyNastran.bdf.mesh_utils.bdf_renumber._update_case_control(model, mapper)[source]

Updates the case control deck; helper method for bdf_renumber.

Parameters
modelBDF()

the BDF object

mapperdict[str] = List[int]

Defines the possible case control header values for each entry (e.g. LOAD)

pyNastran.bdf.mesh_utils.bdf_renumber._update_case_key(key, elemental_quantities, seti2, eid_map, nid_map)[source]

Updates a Case Control SET card. A set may have an elemental result or a nodal result.

pyNastran.bdf.mesh_utils.bdf_renumber._update_coords(model, starting_id_dict, cid, cid_map)[source]

updates the coords

pyNastran.bdf.mesh_utils.bdf_renumber._update_elements(model, starting_id_dict, eid, eid_map, mass_id_map, rigid_elements_map)[source]

updates the elements

pyNastran.bdf.mesh_utils.bdf_renumber._update_materials(unused_model, starting_id_dict, mid, mid_map, all_materials)[source]
pyNastran.bdf.mesh_utils.bdf_renumber._update_mpcs(model, starting_id_dict, mpc_id, mpc_map)[source]

updates the mpcs

pyNastran.bdf.mesh_utils.bdf_renumber._update_nodes(model, starting_id_dict, nid, nid_map)[source]

updates the nodes

pyNastran.bdf.mesh_utils.bdf_renumber._update_properties(model, starting_id_dict, pid, properties_map, properties_mass_map)[source]

updates the properties

pyNastran.bdf.mesh_utils.bdf_renumber._update_spcs(model, starting_id_dict, spc_id, spc_map)[source]

updates the spcs

pyNastran.bdf.mesh_utils.bdf_renumber._write_bdf(model, bdf_filename_out, size=8, is_double=False)[source]

helper method

pyNastran.bdf.mesh_utils.bdf_renumber.bdf_renumber(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF, _io.StringIO], bdf_filename_out: str, size=8, is_double=False, starting_id_dict=None, round_ids: bool = False, cards_to_skip: Optional[List[str]] = None, log=None, debug=False) → pyNastran.bdf.bdf.BDF[source]

Renumbers a BDF

Parameters
bdf_filenamestr / BDF

str : a bdf_filename (string; supported) BDF : a BDF model that has been cross referenced and is fully valid (an equivalenced deck is not valid)

bdf_filename_outstr / None

str : a bdf_filename to write None : don’t write the BDF

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

starting_id_dictdict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

keystr

the key (e.g. eid, nid, cid, …)

starting_idint, None

int : the value to start from None : don’t renumber this key

round_idsbool; default=False

Should a rounding up be applied for each variable? This makes it easier to read a deck and verify that it’s been renumbered properly. This only really applies when starting_id_dict is None

cards_to_skipList[str]; (default=None -> don’t skip any cards)

There are edge cases (e.g. FLUTTER analysis) where things can break due to uncross-referenced cards. You need to disable entire classes of cards in that case (e.g. all aero cards).

Returns
modelBDF()

a renumbered BDF object corresponding to bdf_filename_out

mapperDict[bdf_attribute]old_id_to_new_id_dict

List of mapper dictionaries of original ids to merged bdf_attribute : str

a BDF attribute (e.g., ‘nodes’, ‘elements’)

old_id_to_new_id_dictdict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

Todo

bdf_model option for bdf_filename hasn’t been tested ..

Todo

add support for subsets (e.g. renumber only a subset of nodes/elements) ..

Todo

doesn’t support partial renumbering ..

Todo

doesn’t support element material coordinate systems ..

..warning: spoints might be problematic…check
..warning: still in development, but it usually brutally crashes

if it’s not supported

..warning: be careful of card unsupported cards (e.g. ones not read in)
Supports
  • GRIDs - no superelements

  • COORDx

  • elements
    • CELASx/CONROD/CBAR/CBEAM/CQUAD4/CTRIA3/CTETRA/CPENTA/CHEXA

    • RBAR/RBAR1/RBE1/RBE2/RBE3/RSPLINE/RSSCON

  • properties
    • PSHELL/PCOMP/PCOMPG/PSOLID/PSHEAR/PBAR/PBARL PROD/PTUBE/PBEAM

  • mass
    • CMASSx/CONMx/PMASS

  • aero - FLFACT - SPLINEx - FLUTTER

  • partial case control - METHOD/CMETHOD/FREQENCY - LOAD/DLOAD/LSEQ/LOADSET…LOADSET/LSEQ is iffy - SET cards

    • nodes

    • elements

    • SPC/MPC/FLUTTER/FLFACT

  • constraints
    • SPC/SPCADD/SPCAX/SPCD

    • MPC/MPCADD

    • SUPORT/SUPORT1

  • solution control/methods
    • TSTEP/TSTEPNL

    • NLPARM

    • EIGB/EIGC/EIGRL/EIGR

  • sets
    • USET

  • other
    • tables

    • materials

    • loads/dloads

Not Done
  • SPOINT

  • any cards with SPOINTs - DMIG/DMI/DMIJ/DMIJI/DMIK/etc. - CELASx - CDAMPx

  • superelements

  • aero cards - CAEROx - PAEROx

  • thermal cards?

  • optimization cards

  • SETx

  • PARAM,GRDPNT,x; where x>0

  • GRID SEID

  • case control - STATSUB - SUBCASE - global SET cards won’t be renumbered properly

Examples

Renumber Everything; Start from 1

>>> bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,
                 round_ids=False)

Renumber Everything; Start Material IDs from 100

>>> starting_id_dict = {
    'mid' : 100,
}
>>> bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,
                 starting_ids_dict=starting_ids_dict, round_ids=False)

Only Renumber Material IDs

>>> starting_id_dict = {
    'cid' : None,
    'nid' : None,
    'eid' : None,
    'pid' : None,
    'mid' : 1,
    'spc_id' : None,
    'mpc_id' : None,
    'load_id' : None,
    'dload_id' : None,

‘method_id’ : None, ‘cmethod_id’ : None, ‘spline_id’ : None, ‘table_id’ : None, ‘flfact_id’ : None, ‘flutter_id’ : None, ‘freq_id’ : None, ‘tstep_id’ : None, ‘tstepnl_id’ : None, ‘suport_id’ : None, ‘suport1_id’ : None, ‘tf_id’ : None, ‘set_id’ : None,

} >>> bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,

starting_ids_dict=starting_ids_dict, round_ids=False)

pyNastran.bdf.mesh_utils.bdf_renumber.get_renumber_starting_ids_from_model(model: pyNastran.bdf.bdf.BDF) → Dict[str, int][source]

Get the starting ids dictionary used for renumbering with ids greater than those in model.

Parameters
modelBDF

BDF object to get maximum ids from.

Returns
starting_id_dictdict {strint, …}

Dictionary from id type to starting id.

pyNastran.bdf.mesh_utils.bdf_renumber.get_starting_ids_dict_from_mapper(model, mapper)[source]
pyNastran.bdf.mesh_utils.bdf_renumber.superelement_renumber(bdf_filename, bdf_filename_out=None, size=8, is_double=False, starting_id_dict=None, cards_to_skip=None, log=None, debug=False)[source]

Renumbers a superelement

Parameters
bdf_filenamestr / BDF

str : a bdf_filename (string; supported) BDF : a BDF model that has been cross referenced and is fully valid (an equivalenced deck is not valid)

bdf_filename_outstr / None

str : a bdf_filename to write None : don’t write the BDF

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

starting_id_dictdict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

keystr

the key (e.g. eid, nid, cid, …)

starting_idint, None

int : the value to start from None : don’t renumber this key

cards_to_skipList[str]; (default=None -> don’t skip any cards)

There are edge cases (e.g. FLUTTER analysis) where things can break due to uncross-referenced cards. You need to disable entire classes of cards in that case (e.g. all aero cards).

Returns
modelBDF()

a renumbered BDF object corresponding to bdf_filename_out

collapse_bad_quads Module
defines:
  • convert_bad_quads_to_tris(model, eids_to_check=None, xyz_cid0=None,

    min_edge_length=0.0)

pyNastran.bdf.mesh_utils.collapse_bad_quads.convert_bad_quads_to_tris(model: BDF, eids_to_check: List[int] = None, xyz_cid0: Optional[np.ndarray] = None, min_edge_length: float = 0.0) → None[source]

A standard quad is a nice rectangle. If an edge is collapsed, it’s a triangle. Change the element type with an inplace operation. Deletes any line elements created.

Parameters
modelBDF()

a BDF model that has not had it’s properties/load xref’d, but is valid such that it could

eidslist; (default=None -> all CQUAD4s)

the subset of element ids to check

xyz_cid0(n, 3) ndarray

nodes in cid=0

min_edge_lengthfloat; default=0.0

what is classified as “short”

.. warning:: Don’t cross reference properties/loads
.. todo:: check for bad xref
convert Module
defines:
  • convert(model, units_to, units=None)

pyNastran.bdf.mesh_utils.convert._convert_aero(model: BDF, xyz_scale: float, time_scale: float, weight_scale: float) → None[source]
Converts the aero cards
  • CAEROx, PAEROx, SPLINEx, AECOMP, AELIST, AEPARAM, AESURF

Supports: AERO, AEROS, CAERO1, CAERO2, TRIM*, MONPNT1, FLUTTER FLFACT-rho/vel

GUST, AESURF, PAERO2

Skips: PAERO1, AESTAT, AESURFS, AECOMP, AELIST Doesn’t support:CAERO3-5, PAERO3-5, SPLINEx, AEPARAM, AELINK, AEPRESS, AEFORCE, *probably not done

pyNastran.bdf.mesh_utils.convert._convert_constraints(model: BDF, xyz_scale: float) → None[source]

Converts the spc/mpcs

Supports: SPC1, SPC, SPCAX Implicitly supports: MPC, MPCADD, SPCADD

pyNastran.bdf.mesh_utils.convert._convert_coordinates(model: BDF, xyz_scale: float) → None[source]

Converts the coordinate systems

Supports: CORD1x, CORD2x

pyNastran.bdf.mesh_utils.convert._convert_dconstr(model: BDF, dconstr: DCONSTR, pressure_scale: float) → None[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_desvars(desvars, scale)[source]

scales the DVPREL/DVCREL/DVMREL DESVAR values

pyNastran.bdf.mesh_utils.convert._convert_dvcrel1(dvcrel: Union[DVCREL1, DVCREL2], xyz_scale: float) → float[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_dvprel1(dvprel, xyz_scale: float, mass_scale: float, weight_scale: float, time_scale: float) → float[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_elements(model: BDF, xyz_scale: float, time_scale: float, mass_scale: float, weight_scale: float) → None[source]

Converts the elements

Supports: CTRIA3, CTRIA6, CTRIAR, CQUAD4, CQUAD8, CQUADR,

CELAS2, CELAS4, CDAMP2, CDAMP4, CBUSH, CONROD, CBAR, CBEAM, GENEL, CONM2, CMASS4

SkipsCELAS1, CELAS3, CDAMP3, CDAMP5, CCONEAX,

CROD, CTUBE, CVISC, CBUSH1D, CQUAD, CSHEAR, CTRIAX, CTRIAX6, CTETRA, CPENTA, CHEXA, CPYRAM, CMASS1, CMASS3,

NX Skips: CTRAX3, CTRAX6, CPLSTN3, CPLSTN6, CPLSTN4’, CPLSTN8, CQUADX4, CQUADX8 *intentionally

pyNastran.bdf.mesh_utils.convert._convert_loads(model: BDF, xyz_scale: float, time_scale: float, weight_scale: float, temperature_scale: float) → None[source]

Converts the loads

Supports:
  • dloads: RLOAD1*, TLOAD1*

  • loads: FORCE, FORCE1, FORCE2, MOMENT, MOMENT1, MOMENT2

    GRAV, ACCEL1, PLOAD, PLOAD1, PLOAD2, PLOAD4, RANDPS

  • combinations: DLOAD, LOAD

  • probably not done

pyNastran.bdf.mesh_utils.convert._convert_materials(model: BDF, xyz_scale: float, mass_scale: float, weight_scale: float, temperature_scale: float) → None[source]

Converts the materials

Supports: MAT1, MAT2, MAT3, MAT8, MAT9, MAT10, MAT11

pyNastran.bdf.mesh_utils.convert._convert_nodes(model: BDF, xyz_scale: bool) → None[source]

Converts the nodes

Supports: GRID

pyNastran.bdf.mesh_utils.convert._convert_optimization(model: BDF, xyz_scale: float, mass_scale: float, weight_scale: float, time_scale: float) → None[source]

Converts the optimization objects

Limited Support: DESVAR, DCONSTR, DVCREL1, DVPREL1

pyNastran.bdf.mesh_utils.convert._convert_pbar(prop: PBAR, xyz_scale: float, area_scale: float, area_moi_scale: float, nsm_bar_scale: float) → None[source]

converts a PBAR

pyNastran.bdf.mesh_utils.convert._convert_pbeam(prop: PBEAM, xyz_scale: float, area_scale: float, area_moi_scale: float, nsm_bar_scale: float) → None[source]

converts a PBEAM

pyNastran.bdf.mesh_utils.convert._convert_pbeam3(prop: PBEAM3, xyz_scale: float, area_scale: float, area_moi_scale: float, nsm_bar_scale: float) → None[source]

converts a PBEAM3

pyNastran.bdf.mesh_utils.convert._convert_pbush(prop: PBUSH, velocity_scale: float, mass_scale: float, stiffness_scale: float, log: SimpleLogger) → None[source]
pyNastran.bdf.mesh_utils.convert._convert_pbush1d(model: BDF, prop: PBUSH1D, xyz_scale: float, area_scale: float, mass_scale: float, damping_scale: float, stiffness_scale: float) → None[source]

converts the PBUSH1D

pyNastran.bdf.mesh_utils.convert._convert_properties(model: BDF, xyz_scale: float, time_scale: float, mass_scale: float, weight_scale: float, temperature_scale: float) → None[source]

Converts the properties

Supports: PELAS, PDAMP, PDAMP5, PVISC, PROD, PBAR, PBARL, PBEAM, PBEAML,

PSHELL, PSHEAR, PCOMP, PCOMPG, PELAS, PTUBE, PBUSH, PCONEAX, PGAP, PBUSH1D

Skips : PSOLID, PLSOLID, PLPLANE, PIHEX

Skips are unscaled (intentionally)

pyNastran.bdf.mesh_utils.convert._get_dload_scale(dload, xyz_scale: float, velocity_scale: float, accel_scale: float, force_scale: float) → None[source]

LOAD asssumes force

pyNastran.bdf.mesh_utils.convert._scale_caero(caero, xyz_scale: float, xyz_aefacts) → None[source]
pyNastran.bdf.mesh_utils.convert._scale_term(name: str, coeffs: List[float], terms: List[float], scales: List[float]) → Tuple[float, str][source]
pyNastran.bdf.mesh_utils.convert._set_wtmass(model: BDF, gravity_scale: float) → None[source]

set the PARAM,WTMASS

ft-lbm-s-lbf-psf : 1. / 32.2 in-lbm-s-lbf-psi : 1. / (32.2*12) m-kg-s-N-Pa : 1. mm-Mg-s-N-Mpa : 1. in-slinch-s-lbf-psi : 1. ft-slug-s-lbf-psf : 1. in-slug-s-lbf-psi : 1 / 12.

1 slug * 1 ft/s^2 = 1 lbf 1 slinch * 1 in/s^2 = 1 lbf 1 slinch = 12 slug

F = m*a 386 lbf = 1 slinch * 386 * in/s^2 32 lbf = 1 slug * 32 * ft/s^2 1 N = 1 kg * 9.8 m/s^2

1 lbf = g_scale * 1 slinch * 1 in/s^2 1 lbf = g_scale * 12 slug * 1 in/s^2 –> g_scale = 1/12.

pyNastran.bdf.mesh_utils.convert._setup_scale_by_terms(scales: List[float], terms: List[str], quiet: bool = False) → Tuple[float, float, float][source]

determines the mass, length, time scaling factors

pyNastran.bdf.mesh_utils.convert.convert(model: BDF, units_to: List[str], units: Optional[List[str]] = None) → None[source]

Converts a model from a set of defined units

Parameters
modelBDF

cross references the model (default=True)

units_toList[str]

[length, mass, time] length = {in, ft, m, cm, mm} mass = {g, kg, Mg, lbm, slug, slinch} time = {s}

unitsList[str]

overwrites model.units

pyNastran.bdf.mesh_utils.convert.convert_length(length_from, length_to)[source]

Determines the length scale factor

We create a gravity_scale_length for any non-standard unit (ft, m)

pyNastran.bdf.mesh_utils.convert.convert_mass(mass_from: str, mass_to: str, log: SimpleLogger) → Tuple[float, float, float][source]

determines the mass, weight, gravity scale factor

We apply a gravity_scale_mass for any unit not {kg, slug}. Then we convert to N.

So for SI, if we have kg, we have a base unit, and the length is assumed to be m, so we have a consistent system and gravity_scale_mass is 1.0.

For lbm:

F = m*a 1 lbf = 1 lbm * 1 ft/s^2 32 lbf = 1 slug * 32 ft/s^2 gscale = 1/g F = gscale * m * a 1 lbf = gscale * 1 lbm * 32 ft/s^2 –> gscale = 1/32

For slug:

F = gscale * m * a 32 lbf = gscale * 1 slug * 32 ft/s^2 –> gscale = 1

For slinch:

F = gscale * m * a 386 lbf = gscale * 1 slinch * 12*32 in/s^2 1 slinch = 12 slug 12 in = 1 ft 386 lbf = gscale * 12 slug * 32 ft/s^2 –> gscale = 1

TODO: slinch/slug not validated

pyNastran.bdf.mesh_utils.convert.get_scale_factors(units_from, units_to, log)[source]

[length, mass, time] [in, lb, s]

pyNastran.bdf.mesh_utils.convert.scale_by_terms(bdf_filename: Union[BDF, str], terms: List[float], scales: List[float], bdf_filename_out: Optional[str] = None, encoding: Optional[str] = None, log=None, debug: bool = True) → BDF[source]

Scales a BDF based on factors for 3 of the 6 independent terms

Parameters
bdf_filenamestr / BDF()

a BDF filename

termsList[str]; length=3

the names {M, L, T, F, P, V, A, rho} mass, length, time, force, pressure, velocity, area, mass_density

scalesList[float]; length=3

the scaling factors

bdf_filename_outstr; default=None

a BDF filename to write

Returns
modelBDF()

the scaled BDF

pyNastran.bdf.mesh_utils.convert.scale_model(model: BDF, xyz_scale: float, mass_scale: float, time_scale: float, weight_scale: float, gravity_scale: float, convert_nodes: bool = True, convert_elements: bool = True, convert_properties: bool = True, convert_materials: bool = True, convert_aero: bool = True, convert_constraints: bool = True, convert_loads: bool = True, convert_optimization: bool = True)[source]

Performs the model scaling

delete_bad_elements Module
defines:
  • model = delete_bad_shells(model, max_theta=175., max_skew=70., max_aspect_ratio=100.,

    max_taper_ratio=4.0)

  • eids_to_delete = get_bad_shells(model, xyz_cid0, nid_map, max_theta=175., max_skew=70.,

    max_aspect_ratio=100., max_taper_ratio=4.0)

pyNastran.bdf.mesh_utils.delete_bad_elements.delete_bad_shells(model: pyNastran.bdf.bdf.BDF, min_theta: float = 0.1, max_theta: float = 175.0, max_skew: float = 70.0, max_aspect_ratio: float = 100.0, max_taper_ratio: float = 4.0) → pyNastran.bdf.bdf.BDF[source]

Removes bad CQUAD4/CTRIA3 elements

Parameters
modelBDF ()

this should be equivalenced

min_thetafloat; default=0.1

the maximum interior angle (degrees)

max_thetafloat; default=175.

the maximum interior angle (degrees)

max_skewfloat; default=70.

the maximum skew angle (degrees)

max_aspect_ratiofloat; default=100.

the max aspect ratio

taper_ratiofloat; default=4.0

the taper ratio; applies to CQUAD4s only

pyNastran.bdf.mesh_utils.delete_bad_elements.element_quality(model, nids=None, xyz_cid0=None, nid_map=None)[source]

Gets various measures of element quality

Parameters
modelBDF()

a cross-referenced model

nids(nnodes, ) int ndarray; default=None

the nodes of the model in sorted order includes GRID, SPOINT, & EPOINTs

xyz_cid0(nnodes, 3) float ndarray; default=None

the associated global xyz locations

nid_mapDict[nid]->index; default=None

a mapper dictionary

Returns
qualityDict[name](nelements, ) float ndarray

Various quality metrics names : min_interior_angle, max_interior_angle, dideal_theta,

max_skew_angle, max_aspect_ratio, area_ratio, taper_ratio, min_edge_length

valuesThe result is np.nan if element type does not define

the parameter. For example, CELAS1 doesn’t have an aspect ratio.

Notes

  • pulled from nastran_io.py

pyNastran.bdf.mesh_utils.delete_bad_elements.get_bad_shells(model: pyNastran.bdf.bdf.BDF, xyz_cid0, nid_map, min_theta: float = 0.1, max_theta: float = 175.0, max_skew: float = 70.0, max_aspect_ratio: float = 100.0, max_taper_ratio: float = 4.0) → List[int][source]

Get the bad shell elements

Parameters
modelBDF()

the model object

xyz_cid0(N, 3) float ndarray

the xyz coordinates in cid=0

nid_mapdict[nid]index
nidint

the node id

indexint

the index of the node id in xyz_cid0

min_thetafloat; default=0.1

the maximum interior angle (degrees)

max_thetafloat; default=175.

the maximum interior angle (degrees)

max_skewfloat; default=70.

the maximum skew angle (degrees)

max_aspect_ratiofloat; default=100.

the max aspect ratio

taper_ratiofloat; default=4.0

the taper ratio; applies to CQUAD4s only

Returns
eids_failedList[int]

element ids that fail the criteria

shells with a edge length=0.0 are automatically added
pyNastran.bdf.mesh_utils.delete_bad_elements.get_min_max_theta(faces, all_node_ids, nid_map, xyz_cid0)[source]

get the min/max thetas for CTETRA, CPENTA, CHEXA, CPYRAM

pyNastran.bdf.mesh_utils.delete_bad_elements.get_node_map(model)[source]

gets an nid->inid mapper

pyNastran.bdf.mesh_utils.delete_bad_elements.quad_quality(element, p1, p2, p3, p4)[source]

gets the quality metrics for a quad

pyNastran.bdf.mesh_utils.delete_bad_elements.tri_quality(p1, p2, p3)[source]

gets the quality metrics for a tri

area, max_skew, aspect_ratio, min_theta, max_theta, dideal_theta, min_edge_length

export_mcids Module
Defines:
  • nodes, bars = export_mcids(bdf_filename, csv_filename=None)

pyNastran.bdf.mesh_utils.export_mcids._add_elements(nid: int, eid: int, nodes: List[Tuple[int, float, float, float]], bars: List[Tuple[int, int, int]], centroid: numpy.ndarray, iaxis: numpy.ndarray, jaxis: numpy.ndarray, export_both_axes: bool, export_xaxis: bool) → Tuple[int, int][source]

adds the element data

pyNastran.bdf.mesh_utils.export_mcids._export_coord_axes(nodes, bars, csv_filename: str)[source]

save the coordinate systems in a csv file

pyNastran.bdf.mesh_utils.export_mcids._export_quad_mcid(model: pyNastran.bdf.bdf.BDF, elem, nodes, iply: int, nid: int, eid: int, bars: List[List[int]], export_both_axes: bool, export_xaxis: bool, consider_property_rotation: bool) → Tuple[int, int][source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_quad_mcid_all(model: pyNastran.bdf.bdf.BDF, elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], nplies: int, nids: Dict[int, int], nodes: Dict[int, List[numpy.ndarray]], bars: Dict[int, List[Tuple[int, int]]]) → None[source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_tri_mcid_all(model: pyNastran.bdf.bdf.BDF, elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], nplies: int, nids: Dict[int, int], nodes: Dict[int, List[numpy.ndarray]], bars: Dict[int, List[Tuple[int, int]]]) → None[source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_tria_mcid(model: pyNastran.bdf.bdf.BDF, elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], nodes, iply: int, nid: int, eid: int, bars, export_both_axes: bool, export_xaxis: bool, consider_property_rotation: bool) → Tuple[int, int][source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_xaxis(nid: int, nodes: List[numpy.ndarray], bars: List[numpy.ndarray], centroid: numpy.ndarray, iaxis: numpy.ndarray) → int[source]
pyNastran.bdf.mesh_utils.export_mcids._get_elements(model, eids)[source]
pyNastran.bdf.mesh_utils.export_mcids._get_quad_vectors_mcid(elem: pyNastran.bdf.cards.elements.shell.CQUAD4)[source]
pyNastran.bdf.mesh_utils.export_mcids._get_tri_vectors_mcid(elem: pyNastran.bdf.cards.elements.shell.CTRIA3)[source]
pyNastran.bdf.mesh_utils.export_mcids._load_bdf(bdf_filename: Union[BDF, str], log: Optional[SimpleLogger] = None, debug: bool = True) → BDF[source]
pyNastran.bdf.mesh_utils.export_mcids._make_element_coord_quad(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref, nids, nodes, bars)[source]
pyNastran.bdf.mesh_utils.export_mcids._make_element_coord_tri(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref, nids, nodes, bars)[source]
pyNastran.bdf.mesh_utils.export_mcids._rotate_coords(elem: ShellElement, pid_ref, nplies: int, nids: Dict[int, int], nodes: Dict[int, List[Any]], bars: Dict[int, List[Any]], dxyz: float, centroid: np.ndarray, imat: np.ndarray, jmat: np.ndarray, normal: np.ndarray) → None[source]

iply Final Label Description ==== =========== =========== -1 0 material coordinate system 0 1 ply 1 1 2 ply 2 2 3 ply 3

#nplies = 3 nids - {-1: 0, 0: 0, 1: 0, 2: 0} nodes = {-1: [], 0: [], 1: [], 2: []} bars = {-1: [], 0: [], 1: [], 2: []}

pyNastran.bdf.mesh_utils.export_mcids._rotate_mcid(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref: Union[pyNastran.bdf.cards.properties.shell.PCOMP, pyNastran.bdf.cards.properties.shell.PCOMPG, pyNastran.bdf.cards.properties.shell.PSHELL], iply: int, imat: numpy.ndarray, jmat: numpy.ndarray, normal: numpy.ndarray, consider_property_rotation: bool = True) → Tuple[numpy.ndarray, numpy.ndarray][source]

Rotates a material coordinate system. Assumes the element theta/mcid has already been acounted for.

pyNastran.bdf.mesh_utils.export_mcids._rotate_single_coord(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref, iply: int, nid, eid, nodes, bars, dxyz: float, centroid: numpy.ndarray, imat: numpy.ndarray, jmat: numpy.ndarray, normal: numpy.ndarray, export_both_axes: bool, export_xaxis: bool, consider_property_rotation: bool) → Tuple[int, int][source]
pyNastran.bdf.mesh_utils.export_mcids.export_mcids(bdf_filename: Union[pyNastran.bdf.bdf.BDF, str], csv_filename: Optional[str] = None, eids: Optional[List[int]] = None, export_xaxis: bool = True, export_yaxis: bool = True, consider_property_rotation: bool = True, iply: int = 0, log=None, debug=False)[source]

Exports the element material coordinates systems for non-isotropic materials.

Parameters
bdf_filenamestr/BDF

a bdf filename or BDF model

csv_filenamestr; default=None

str : the path to the output csv None : don’t write a CSV

eidsList[int]

the element ids to consider

export_xaxisbool; default=True

export the x-axis

export_yaxisbool; default=True

export the x-axis

consider_property_rotationbool; default=True

rotate the coordinate system

iplyint; default=0

TODO: not validated the ply to consider

pid_to_npliesDict[int pid, int nplies]; default=None -> auto

optional dictionary to speed up analysis

PSHELL

iply location —- ——–

0 mid1 or mid2 1 mid1 2 mid2 3 mid3 4 mid4

PCOMP/PCOMPG

iply location —- ——– 0 layer1 1 layer2

Returns
nodes(nnodes, 3) float list

the nodes

bars(nbars, 2) int list

the “bars” that represent the x/y axes of the coordinate systems

pyNastran.bdf.mesh_utils.export_mcids.export_mcids_all(bdf_filename: Union[BDF, str], eids: Optional[List[int]] = None, log: Optional[SimpleLogger] = None, debug: bool = False)[source]

Exports the element material coordinates systems for non-isotropic materials.

Note that for two quads identically oriented/numbered PSHELL quads with theta different between the two, the mcid will be different.

Parameters
bdf_filenamestr/BDF

a bdf filename or BDF model

csv_filenamestr; default=None

str : the path to the output csv None : don’t write a CSV

eidsList[int]

the element ids to consider

PSHELL

iply location —- ——–

0 mid1 or mid2 1 mid1 2 mid2 3 mid3 4 mid4

PCOMP/PCOMPG

iply location —- ——– 0 layer1 1 layer2

Returns
nodes(nnodes, 3) float list

the nodes

bars(nbars, 2) int list

the “bars” that represent the x/y axes of the coordinate systems

pyNastran.bdf.mesh_utils.export_mcids.get_pid_ref_prop_type(model: pyNastran.bdf.bdf.BDF, elem) → Tuple[Union[pyNastran.bdf.cards.properties.shell.PCOMP, pyNastran.bdf.cards.properties.shell.PCOMPG, pyNastran.bdf.cards.properties.shell.PSHELL], str][source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids.get_pid_to_nplies(model: pyNastran.bdf.bdf.BDF) → Tuple[Dict[int, int], int][source]
export_caero_mesh Module
defines:
  • export_caero_mesh(model, caero_bdf_filename=’caero.bdf’, is_subpanel_model=True)

pyNastran.bdf.mesh_utils.export_caero_mesh._get_subpanel_property(model: BDF, caero_id: int, eid: int, pid_method: str = 'aesurf') → int[source]

gets the property id for the subpanel

pyNastran.bdf.mesh_utils.export_caero_mesh._write_aesurf_properties(model: BDF, bdf_file)[source]
pyNastran.bdf.mesh_utils.export_caero_mesh._write_subpanel_strips(bdf_file, model, caero_eid, points, elements)[source]

writes the strips for the subpanels

pyNastran.bdf.mesh_utils.export_caero_mesh.export_caero_mesh(model: BDF, caero_bdf_filename: str = 'caero.bdf', is_subpanel_model: bool = True, pid_method: str = 'aesurf', write_panel_xyz: bool = True) → None[source]

Write the CAERO cards as CQUAD4s that can be visualized

model: BDF

a valid geometry

caero_bdf_filenamestr

the file to write

is_subpanel_modelbool; default=True

True : write the subpanels as CQUAD4s False : write the macro elements as CQUAD4s

pid_methodstr; default=’aesurf’
‘aesurf’write the referenced AESURF as the property ID

main structure will be pid=1

‘caero’ : write the CAERO1 as the property id ‘paero’ : write the PAERO1 as the property id

write_panel_xyzbool; default=True

write the caero table

mirror_mesh Module
This file defines:
  • model, nid_offset, eid_offset = bdf_mirror(bdf_filename, plane=’xz’)

  • model, nid_offset, eid_offset = write_bdf_symmetric(

    bdf_filename, out_filename=None, encoding=None, size=8, is_double=False, enddata=None, close=True, plane=’xz’)

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_elements(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, eid_offset: int, cid_offset: int, plane: str = 'xz') → None[source]

mirrors model.elements

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_masses(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, eid_offset: int) → None[source]

mirrors model.masses

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_rigid_elements(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, eid_offset: int) → None[source]

mirrors model.rigid_elements

pyNastran.bdf.mesh_utils.mirror_mesh._asymmetrically_mirror_coords(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, cids_nominal_set: Set[int], cid_offset: int, plane: str = 'xz') → None[source]

we’ll leave i the same, flip j, and invert k

pyNastran.bdf.mesh_utils.mirror_mesh._asymmetrically_mirror_coords2(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, cids_nominal_set: Set[int], cid_offset: int, plane: str = 'xz') → None[source]

We’ll invert i, but not j, which will invert k.

This will allow us to mirror material coordinate systems (defined in x). Additionally, we can mirror CGAP coordinate systems (defined in x) as well as some arbitrary y-direction. We’ll try to make y look mirrored.

pyNastran.bdf.mesh_utils.mirror_mesh._get_cid_offset(model: pyNastran.bdf.bdf.BDF, use_cid_offset: bool) → int[source]
pyNastran.bdf.mesh_utils.mirror_mesh._get_eid_offset(model: pyNastran.bdf.bdf.BDF, use_eid_offset: bool) → int[source]
pyNastran.bdf.mesh_utils.mirror_mesh._mirror_aero(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, plane: str = 'xz') → None[source]

Mirrors the aero cards

Considers:
  • AEROS

  • doesn’t consider sideslip

  • CAERO1

  • doesn’t consider sideslip

  • considers Cp

  • considers lchord/lspan/nchord/nspan

  • SPLINE1 - handle boxes

  • SET1 - handle nodes

  • AELIST - handle boxes

  • AESURF - only supports names of length 7 or less (appends an M to the name) - handles AELIST - doesn’t handle coords well - doesn’t handle second AESURF

Doesnt consider:
  • AERO

  • AEFORCE

  • AEPRES

  • CAERO2/3/4/5

  • PAERO1/2/3/4/5

  • AESURFS

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_elements(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, use_eid_offset: bool = True, plane: str = 'xz') → int[source]

Mirrors the elements

Parameters
modelBDF

the base model

modelBDF

the mirrored model

mirror_modelBDF

the mirrored model

nid_offsetint

the node id offset

use_eid_offsetbool; default=True

what is this for???

elements:
0dCELAS1, CELAS2, CELAS3, CELAS4, CDAMP1, CDAMP2, CDAMP3, CDAMP4, CDAMP5

CFAST, CBUSH, CBUSH1D

1d: CROD, CONROD, CTUBE, CBAR, CBEAM, CBEAM3 2d : CTRIA3, CQUAD4, CTRIA6, CQUAD8, CQUAD, CTRIAR, CQUADR 3d : ??? missing : CVISC, CTRIAX, CTRIAX6, CQUADX, CQUADX8, CCONEAX

rigid_elements:

loaded: RBE2, RBE3, RBAR missing: RBAR1

mass_elements:

loaded: CONM2 missing CONM1, CMASS1, CMASS2, CMASS3, CMASS4

plotels:

loaded: PLOTEL missing: ???

Notes

Doesn’t handle CBAR/CBEAM offsets Doesn’t handle CBEAM SPOINTs Do I need to invert the solids?

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_loads(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int = 0, eid_offset: int = 0) → None[source]

Mirrors the loads. A mirrored force acts in the same direction.

Considers:
  • PLOAD4
    • no coordinate systems (assumes cid=0)

  • FORCE, FORCE1, FORCE2, MOMENT, MOMENT1, MOMENT2

  • PLOAD, PLOAD2

  • TEMP, QVOL, QHBDY, QBDY1, QBDY2, QBDY3

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_nodes(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, plane: str = 'xz') → Tuple[int, str][source]

Mirrors the GRIDs

Warning

doesn’t consider coordinate systems; it could, but you’d need 20 new coordinate systems

Warning

doesn’t mirror SPOINTs, EPOINTs

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_nodes_plane(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, plane: Any, use_nid_offset: bool = True) → Tuple[int, str][source]

Mirrors the GRIDs about an arbitrary plane

Parameters
modelBDF

the original geometry

mirror_modelBDF

the location of the new geometry

plane(3,3) float ndarray

3 vectors that defines the origin, zaxis and xzplane; same as a CORD2R

use_nid_offsetbool

should the node offset be applied

Returns
nid_offsetint

the node id offset

planestr

the sorted plane; ZX -> xz

Warning

doesn’t consider coordinate systems; it could, but you’d need 20 new coordinate systems

Warning

doesn’t mirror SPOINTs, EPOINTs ..

https://mathinsight.org/distance_point_plane
pyNastran.bdf.mesh_utils.mirror_mesh._plane_to_iy(plane: str) → Tuple[int, str][source]

gets the index fo the mirror plane

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF], plane: str = 'xz', log=None, debug: bool = True)[source]

Mirrors the model about the symmetry plane

Parameters
bdf_filenamestr / BDF()

str : the bdf filename BDF : the BDF model object

planestr; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns
modelBDF()

BDF : the BDF model object

nid_offsetint

the offset node id

eid_offsetint

the offset element id

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror_plane(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF], plane: Any, mirror_model=None, log=None, debug: bool = True, use_nid_offset: bool = True)[source]

mirrors a model about an arbitrary plane

pyNastran.bdf.mesh_utils.mirror_mesh.write_bdf_symmetric(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF], out_filename=None, encoding=None, size: int = 8, is_double: bool = False, enddata: Optional[bool] = None, close: bool = True, plane: str = 'xz', log=None)[source]

Mirrors the model about the symmetry plane

Parameters
bdf_filenamestr / BDF()

str : the bdf filename BDF : the BDF model object

out_filenamevaries; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

encodingstr; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

sizeint; {8, 16}

the field size

is_doublebool; default=False

False : small field True : large field

enddatabool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

closebool; default=True

should the output file be closed

planestr; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns
modelBDF()

BDF : the BDF model object

nid_offsetint

the offset node id

eid_offsetint

the offset element id

Notes

Updates the BDF object to be symmetric
  • see bdf_mirror if you don’t want to write the model

Doesn’t equivalence nodes on the centerline.

Considers
  • nodes : GRID

  • elements, rigid_elements, mass_elements : see _mirror_elements

  • loads : see _mirror_loads

  • aero cards : see _mirror_aero

extract_bodies Module
defines:
  • extract_bodies(bdf_filename)

pyNastran.bdf.mesh_utils.extract_bodies.extract_bodies(bdf_filename, mpc_id=0)[source]

Finds the isolated bodies

Parameters
bdf_filenamestr/BDF

str : the path the the *.bdf file BDF : a BDF() boject

mpc_idint; default=0

0 : consider all MPCs >0 : use this MPC set not supported

Considers:
  • elements

  • rigid_elements

Doesn’t consider:
  • elements_mass

  • MPC

  • MPCADD

  • DMIx

Doesn’t support:
  • xref

  • duplicate element ids

  • large values

find_closest_nodes Module
defines:
  • nids_close = find_closest_nodes(nodes_xyz, nids, xyz_compare, neq_max, tol)

  • ieq = find_closest_nodes_index(nodes_xyz, xyz_compare, neq_max, tol)

pyNastran.bdf.mesh_utils.find_closest_nodes._not_equal_nodes_build_tree(nodes_xyz: Any, xyz_compare: Any, tol: float, neq_max: int = 4, msg: str = '') → Tuple[Any, numpy.ndarray, numpy.ndarray][source]

helper function for bdf_equivalence_nodes

Parameters
nodes_xyz(Nnodes, 3) float ndarray

the source points

xyz_compare(Ncompare, 3) float ndarray

the xyz points to compare to

tolfloat

the max spherical tolerance

neq_maxint; default=4

the number of close nodes

msgstr; default=’’

error message

Returns
kdtKDTree()

the kdtree object

ieqint ndarray

The indices of nodes_xyz where the nodes in xyz_compare are close??? neq_max = 1:

(N, ) int ndarray

neq_max > 1:

(N, N) int ndarray

slotsint ndarray

The indices of nodes_xyz where the nodes in xyz_compare are close??? neq_max = 1:

(N, ) int ndarray

neq_max > 1:

(N, N) int ndarray

msgstr; default=’’

error message

pyNastran.bdf.mesh_utils.find_closest_nodes.find_closest_nodes(nodes_xyz: Any, nids: Any, xyz_compare: Any, neq_max: int = 1, tol: Optional[float] = None, msg: str = '') → Any[source]

Finds the closest nodes to an arbitrary set of xyz points

Parameters
nodes_xyz(Nnodes, 3) float ndarray

the source points (e.g., xyz_cid0)

nids(Nnodes, ) int ndarray

the source node ids (e.g.; nid_cp_cid[:, 0])

xyz_compare(Ncompare, 3) float ndarray

the xyz points to compare to; xyz_to_find

tolfloat; default=None

the max spherical tolerance None : the whole model

neq_maxint; default=1

the number of “close” points

msgstr; default=’’

custom message used for errors

Returns
nids_close: (Ncompare, ) int ndarray

the close node ids

pyNastran.bdf.mesh_utils.find_closest_nodes.find_closest_nodes_index(nodes_xyz: Any, xyz_compare: Any, neq_max: int, tol: float, msg: str = '')[source]

Finds the closest nodes to an arbitrary set of xyz points

Parameters
nodes_xyz(Nnodes, 3) float ndarray

the source points

xyz_compare(Ncompare, 3) float ndarray

the xyz points to compare to

neq_maxint

the number of “close” points (default=4)

tolfloat

the max spherical tolerance

msgstr; default=’’

error message

Returns
slots(Ncompare, ) int ndarray

the indices of the close nodes corresponding to nodes_xyz

find_coplanar_elements Module
pyNastran.bdf.mesh_utils.find_coplanar_elements.find_coplanar_triangles(bdf_filename: Union[BDF, str], eids: Optional[List[int]] = None) → List[int][source]

Finds coplanar triangles

Parameters
bdf_filenameBDF/str

BDF: a model str: the path to the bdf input file

eidslist

the element ids to consider

Returns
coplanar_eidsList[int]

the elements that are coplanar

force_to_pressure Module
pyNastran.bdf.mesh_utils.force_to_pressure.force_to_pressure(bdf_filename, bdf_filename_out=None)[source]

converts FORCE cards to PLOAD4s for a shell model

free_edges Module
defines:

edges = free_edges(model, eids=None) edges = non_paired_edges(model, eids=None)

pyNastran.bdf.mesh_utils.free_edges._get_edge_to_eids_map(model, eids=None)[source]

helper method

pyNastran.bdf.mesh_utils.free_edges.free_edges(model: BDF, eids: Optional[List[int]] = None, maps=None) → List[Tuple[int, int]][source]

Gets the free edges for shell elements. A free edge is an edge that is only connected to 1 shell element.

Parameters
modelBDF()

the BDF model

eidsList[int]; default=None

a subset of elements to consider

mapsList[…] (default=None -> calculate)
the output from _get_maps(eids, map_names=None,

consider_0d=False, consider_0d_rigid=False, consider_1d=False, consider_2d=True, consider_3d=False)

Returns
edges: List[Tuple[int,int]]

list of node ids of each edges

pyNastran.bdf.mesh_utils.free_edges.non_paired_edges(model: BDF, eids: List[int] = None, maps=None) → List[Tuple[int, int]][source]

Gets the edges not shared by exactly 2 elements. This is useful for identifying rib/spar intersections.

Parameters
modelBDF()

the BDF model

eidsList[int]; default=None

a subset of elements to consider

mapsList[…] (default=None -> calculate)
the output from _get_maps(eids, map_names=None,

consider_0d=False, consider_0d_rigid=False, consider_1d=False, consider_2d=True, consider_3d=False)

Returns
non_paired_edgesList[(int nid1, int nid2), …]

the non-paired edges

free_faces Module
defines:
  • get_element_faces(model, element_ids=None)

  • get_solid_skin_faces(model)

  • write_skin_solid_faces(model, skin_filename,

    write_solids=False, write_shells=True, size=8, is_double=False, encoding=None)

pyNastran.bdf.mesh_utils.free_faces._write_shells(bdf_file, model, eid_set, face_map, eid_shell, pid_shell, mid_shell, mids_to_write)[source]

helper method for _write_skin_solid_faces

pyNastran.bdf.mesh_utils.free_faces._write_skin_solid_faces(model, skin_filename, face_map, nids_to_write, eids_to_write, mids_to_write, eid_set, eid_shell, pid_shell, mid_shell, write_solids=False, write_shells=True, size=8, is_double=False, encoding=None)[source]

helper method for write_skin_solid_faces

Parameters
modelBDF()

the BDF object

skin_filenamestr

the file to write

face_mapdict[sorted_face]face

sorted_face : List[int, int, int] / List[int, int, int, int] face : List[int, int, int] / List[int, int, int, int]

nids_to_writeList[int, int, …]

list of node ids to write

eids_to_writeList[int, int, …]

list of element ids to write

mids_to_writeList[int, int, …]

list of material ids to write

eid_setSet[int]

is the type right???

eid_shellint

the next id to use for the shell id

pid_shellint

the next id to use for the shell property

mid_shellint

the next id to use for the shell material

write_solidsbool; default=False

write solid elements that have skinned faces

write_shellsbool; default=True

write shell elements

sizeint; default=/8

the field width

is_doublebool; default=False

double precision flag

encodingstr; default=None -> system default

the string encoding

pyNastran.bdf.mesh_utils.free_faces.get_element_faces(model: pyNastran.bdf.bdf.BDF, element_ids: Optional[List[int]] = None) → Any[source]

Gets the elements and faces that are skinned from solid elements. This includes internal faces.

Parameters
modelBDF()

the BDF object

element_idsList[int] / None

skin a subset of element faces default=None -> all elements

Returns
eid_faces(int, List[(int, int, …)])

value1 : element id value2 : face

pyNastran.bdf.mesh_utils.free_faces.get_solid_skin_faces(model: pyNastran.bdf.bdf.BDF) → Any[source]

Gets the elements and faces that are skinned from solid elements This doesn’t include internal faces.

Parameters
modelBDF()

the BDF object

Returns
eid_setDict[tuple(int, int, …)] = List[int]

key : sorted face value : list of element ids with that face

face_mapDict[tuple(int, int, …)] = List[int]

key : sorted face value : unsorted face

pyNastran.bdf.mesh_utils.free_faces.write_skin_solid_faces(model, skin_filename, write_solids=False, write_shells=True, size=8, is_double=False, encoding=None, punch=False, log=None)[source]

Writes the skinned elements

Parameters
modelBDF() or str

BDF : the BDF object str : bdf_filename and the read_bdf method is called

skin_filenamestr

the file to write

write_solidsbool; default=False

write solid elements that have skinned faces

write_shellsbool; default=False

write shell elements

sizeint; default=8

the field width

is_doublebool; default=False

double precision flag

encodingstr; default=None -> system default

the string encoding

loglogger; default=None

a python logging object

punchbool; default=False

is this a punch file; should be used by the read_bdf if model is a string unused

get_oml Module
defines:
  • eids_oml = get_oml_eids(bdf_filename, eid_start, theta_tol=30.,

    is_symmetric=True, consider_flippped_normals=True)

pyNastran.bdf.mesh_utils.get_oml.get_oml_eids(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF, pathlib.PurePath, _io.StringIO], eid_start: int, theta_tol: float = 30.0, is_symmetric: bool = True, consider_flippped_normals: bool = True) → Set[int][source]

Extracts the OML faces (outer mold line) of a shell model. In other words, find all the shell elements touching the current element without crossing an MPC or rigid element.

Parameters
bdf_filenamestr or BDF()

the bdf filename

eid_startint

the element to start from

theta_tolfloat; default=30.

the angular tolerance in degrees

is_symmetricbool; default=True

is the y=0 plane considered to be part of the OML

consider_flippped_normalsbool; default=True

if you extracted the free faces from tets, you can get flipped normals this considers a 180 degree error to be 0.0, which will cause other problems

pyNastran.bdf.mesh_utils.get_oml.main()[source]

runs the test problem

remove_unused Module
defines some methods for cleaning up a model
  • model = remove_unused(bdf_filename, remove_nids=True, remove_cids=True,

    remove_pids=True, remove_mids=True)

pyNastran.bdf.mesh_utils.remove_unused._remove(model: pyNastran.bdf.bdf.BDF, nids_used, cids_used, pids_used, pids_mass_used, mids_used, spcs_used, mpcs_used, pconv_used, tableht_used, tableh1_used, unused_desvars_used, remove_nids=True, remove_cids=True, remove_pids=True, remove_mids=True, remove_spcs=True, remove_mpcs=True, unused_remove_desvars=True)[source]

actually removes the cards

pyNastran.bdf.mesh_utils.remove_unused._remove_thermal(model: pyNastran.bdf.bdf.BDF, pconv_used, tableht_used, tableh1_used) → None[source]

removes some thermal cards

pyNastran.bdf.mesh_utils.remove_unused._store_dresp1(model, ids, nids_used, pids_used)[source]

helper for remove_unused

pyNastran.bdf.mesh_utils.remove_unused._store_elements(card_type, model, ids, nids_used, pids_used, mids_used, cids_used)[source]
pyNastran.bdf.mesh_utils.remove_unused._store_loads(model, unused_card_type, unused_ids, nids_used, eids_used, cids_used)[source]

helper for remove_unused

pyNastran.bdf.mesh_utils.remove_unused._store_masses(card_type, model, ids, nids_used, pids_mass_used, cids_used) → None[source]

handles masses

pyNastran.bdf.mesh_utils.remove_unused._store_nsm(model, ids, pids_used)[source]

helper for remove_unused

pyNastran.bdf.mesh_utils.remove_unused.remove_unused(bdf_filename: str, remove_nids: bool = True, remove_cids: bool = True, remove_pids: bool = True, remove_mids: bool = True, remove_spcs: bool = True, remove_mpcs: bool = True) → pyNastran.bdf.bdf.BDF[source]

Takes an uncross-referenced bdf and removes unused data

removes unused:
  • nodes

  • properties

  • materials

  • coords

  • spcs

  • mpcs

cannot be removed:
  • loads

split_cbars_by_pin_flag Module
defines:
  • model, pin_flag_map = split_cbars_by_pin_flag(

    bdf_filename, pin_flags_filename=None, bdf_filename_out=None)

pyNastran.bdf.mesh_utils.split_cbars_by_pin_flag.split_cbars_by_pin_flag(bdf_filename, pin_flags_filename=None, bdf_filename_out=None, debug=False)[source]

Splits bar elements if they have a pin flag. That way you can each side of the element (A/B) a unique color based on the pin flag. This doesn’t split non-pin flagged bars.

Parameters
bdf_filenamestr; BDF

str : use the read_bdf method BDF : assume it’s a model

pin_flags_filenamestr; default=None

the pin flag file to write this is optional as you may need to define your own map

bdf_filename_outstr; default=None

write the updated deck

debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

Returns
modelBDF()

the BDF object

pin_flag_mapdict[eid]pin_flag
eidint

the element id

pin_flagint

the bar pin flag

pyNastran.bdf.mesh_utils.split_cbars_by_pin_flag.write_pin_flag_map(pin_flag_map, pin_flags_filename)[source]

writes the pin flag map

mesh_utils Package
bdf_equivalence Module
defines:
model = bdf_equivalence_nodes(bdf_filename, bdf_filename_out, tol,

renumber_nodes=False, neq_max=4, xref=True, node_set=None, size=8, is_double=False, remove_collapsed_elements=False, avoid_collapsed_elements=False, crash_on_collapse=False, log=None, debug=True)

pyNastran.bdf.mesh_utils.bdf_equivalence._check_for_referenced_nodes(model: pyNastran.bdf.bdf.BDF, node_set: Optional[Any], nids: Any, all_nids: Any, nodes_xyz: Any) → Optional[Any][source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_build_tree_new(kdt: KDTree, nodes_xyz: NDArrayN3float, nids: NDArrayNint, nnodes: int, is_not_node_set: bool, tol: float, log: SimpleLogger, inew=None, node_set=None, neq_max: int = 4, msg: str = '', debug: float = False) → Tuple[Any, List[Tuple[int, int]]][source]
pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_final(nid_pairs, model: pyNastran.bdf.bdf.BDF, tol: float, node_set=None, debug: bool = False) → None[source]

apply nodal equivalencing to model

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node(model: pyNastran.bdf.bdf.BDF, renumber_nodes: bool = False) → Tuple[Any, Any, Dict[int, int]][source]

helper function for _eq_nodes_setup that doesn’t handle node sets

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node_set(model: pyNastran.bdf.bdf.BDF, node_set: List[Any], renumber_nodes: bool = False) → Tuple[Any, Any, Dict[int, int]][source]

helper function for _eq_nodes_setup that handles node_sets

pyNastran.bdf.mesh_utils.bdf_equivalence._get_tree(nodes_xyz: Any, msg: str = '') → scipy.spatial.ckdtree.cKDTree[source]

gets the kdtree

pyNastran.bdf.mesh_utils.bdf_equivalence._get_xyz_cid0(model: pyNastran.bdf.bdf.BDF, nids: Any, fdtype: str = 'float32') → Any[source]

gets xyz_cid0

pyNastran.bdf.mesh_utils.bdf_equivalence._nodes_xyz_nids_to_nid_pairs(nodes_xyz: NDArrayN3float, nids: NDArrayNint, tol: float, log: SimpleLogger, inew: NDArrayNint, node_set=None, neq_max: int = 4, method: str = 'new', debug: bool = False) → List[Tuple[int, int]][source]

Helper for equivalencing

Returns
nid_pairsList[Tuple[int, int]]

a series of (nid1, nid2) pairs

pyNastran.bdf.mesh_utils.bdf_equivalence._nodes_xyz_nids_to_nid_pairs_new(kdt, nids, node_set, tol: float)[source]

helper function for bdf_equivalence_nodes

pyNastran.bdf.mesh_utils.bdf_equivalence.bdf_equivalence_nodes(bdf_filename: str, bdf_filename_out: Optional[str], tol: float, renumber_nodes: bool = False, neq_max: int = 4, xref: bool = True, node_set: Optional[Union[List[int], NDArrayNint]] = None, size: int = 8, is_double: bool = False, remove_collapsed_elements: bool = False, avoid_collapsed_elements: bool = False, crash_on_collapse: bool = False, log: Optional[SimpleLogger] = None, debug: bool = True, method: str = 'new') → BDF[source]

Equivalences nodes; keeps the lower node id; creates two nodes with the same

Parameters
bdf_filenamestr / BDF

str : bdf file path BDF : a BDF model that is fully valid (see xref)

bdf_filename_outstr

str: a bdf_filename to write None: don’t write the deck

tolfloat

the spherical tolerance

renumber_nodesbool

should the nodes be renumbered (default=False)

neq_maxint

the number of “close” points (default=4)

xrefbool

does the model need to be cross_referenced (default=True; only applies to model option)

node_setList[int] / (n, ) ndarray; default=None

the list/array of nodes to consider (not supported with renumber_nodes=True)

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

remove_collapsed_elementsbool; default=False (unsupported)
True1D/2D/3D elements will not be collapsed;

CELASx/CDAMP/MPC/etc. are not considered

False : no elements will be removed

avoid_collapsed_elementsbool; default=False (unsupported)
Trueonly collapses that don’t break 1D/2D/3D elements will be considered;

CELASx/CDAMP/MPC/etc. are considered

False : element can be collapsed

crash_on_collapsebool; default=False
stop if nodes have been collapsed

False: blindly move on True: rereads the BDF which catches doubled nodes (temporary);

in the future collapse=True won’t need to double read; an alternative is to do Patran’s method of avoiding collapse)

debugbool

bdf debugging

method: str; default=’new’

‘new’: doesn’t require neq_max; new in v1.3 ‘old’: use neq_max; used in v1.2

loglogger(); default=None

bdf logging

Returns
modelBDF()

The BDF model corresponding to bdf_filename_out

Warning

I doubt SPOINTs/EPOINTs work correctly ..

Warning

xref not fully implemented (assumes cid=0) ..

Todo

node_set still does work on the all the nodes in the big kdtree loop, which is very inefficient

Todo

remove_collapsed_elements is not supported ..

Todo

avoid_collapsed_elements is not supported ..

bdf_merge Module
defines:
  • bdf_merge(bdf_filenames, bdf_filename_out=None, renumber=True, encoding=None, size=8,

    is_double=False, cards_to_skip=None, log=None, skip_case_control_deck=False)

pyNastran.bdf.mesh_utils.bdf_merge._apply_scalar_cards(model: pyNastran.bdf.bdf.BDF, model2_renumber: pyNastran.bdf.bdf.BDF) → None[source]

apply cards from model2 to model if they don’t exist in model

pyNastran.bdf.mesh_utils.bdf_merge._assemble_mapper(mappers: List[MAPPER], mapper_0: MAPPER, data_members: List[str], mapper_renumber: Optional[MAPPER] = None) → None[source]

Assemble final mappings from all original ids to the ids in the merged and possibly renumbered model.

Parameters
mappersList[mapper]
mapperdict[key]value
key???

???

value???

???

mapper_0mapper
key???

???

value???

???

data_membersList[str]
list of things to include in the mappers?
data_members = [

‘coords’, ‘nodes’, ‘elements’, ‘masses’, ‘properties’, ‘properties_mass’, ‘materials’, ‘sets’, ‘rigid_elements’, ‘mpcs’,

]

mapper_renumberdict[key]: value; default=None
keystr

a BDF attribute

valuedict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

Returns
mappers_allList[mappers]

One mapper for each bdf_filename

pyNastran.bdf.mesh_utils.bdf_merge._dict_key_to_key(dictionary) → Dict[int, int][source]

creates a dummy map from the nominal key to the nominal key

pyNastran.bdf.mesh_utils.bdf_merge._dicts_key_to_key(dictionaries: List[Dict[int, Any]]) → Dict[int, int][source]

Creates a dummy map from the nominal key to the nominal key for multiple input dictionaries. This is intended for use with:

  • SPCs, MPCs, Loads

pyNastran.bdf.mesh_utils.bdf_merge._get_mapper_0(model: BDF) → MAPPER[source]

Get the mapper for the first model.

Parameters
modelBDF()

the bdf model object

Returns
mapperdict[key]: value
keystr

a BDF attribute

valuedict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

pyNastran.bdf.mesh_utils.bdf_merge._renumber_mapper(mapper_0: MAPPER, mapper_renumber: MAPPER)[source]

Renumbers a mapper

Parameters
mapper_0dict[key]: value
keystr

a BDF attribute

valuedict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

mapper_renumber???

???

Returns
mapperdict[map_type]sub_mapper
map_type???

???

sub_mapperdict[key]value
key???

???

value???

???

pyNastran.bdf.mesh_utils.bdf_merge.bdf_merge(bdf_filenames: List[str], bdf_filename_out: Optional[str] = None, renumber: bool = True, encoding: Optional[str] = None, size: int = 8, is_double: bool = False, cards_to_skip: Optional[List[str]] = None, skip_case_control_deck: bool = False, log: Optional[SimpleLogger] = None) → Tuple[BDF, List[MAPPER]][source]

Merges multiple BDF into one file

Parameters
bdf_filenamesList[str]

list of bdf filenames

bdf_filename_outstr / None

the output bdf filename (default=None; None -> no writing)

renumberbool

should the bdf be renumbered (default=True)

encodingstr

the unicode encoding (default=None; system default)

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

cards_to_skipList[str]; (default=None -> don’t skip any cards)

There are edge cases (e.g. FLUTTER analysis) where things can break due to uncross-referenced cards. You need to disable entire classes of cards in that case (e.g. all aero cards).

skip_case_control_deckbool, optional, defaultFalse

If true, don’t consider the case control deck while merging.

Returns
modelBDF

Merged model.

mappers_allList[mapper]
mapperDict[bdf_attribute]old_id_to_new_id_dict

List of mapper dictionaries of original ids to merged

bdf_attributestr

a BDF attribute (e.g., ‘nodes’, ‘elements’)

old_id_to_new_id_dictdict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

Supports

nodes: GRID coords: CORDx elements: CQUAD4, CTRIA3, CTETRA, CPENTA, CHEXA, CELASx, CBAR, CBEAM

CONM1, CONM2, CMASS

properties: PSHELL, PCOMP, PSOLID, PMASS materials: MAT1, MAT8

Todo

doesn’t support SPOINTs/EPOINTs ..

Warning

still very preliminary ..

bdf_renumber Module
defines:
bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,

starting_id_dict=None, round_ids=False, cards_to_skip=None, log=None, debug=False)

superelement_renumber(bdf_filename, bdf_filename_out=None, size=8, is_double=False,

starting_id_dict=None, cards_to_skip=None, log=None, debug=False)

pyNastran.bdf.mesh_utils.bdf_renumber._create_mid_map(model, mid)[source]

builds the mid_map

pyNastran.bdf.mesh_utils.bdf_renumber._create_nid_maps(model, starting_id_dict, nid)[source]

builds the nid_maps

pyNastran.bdf.mesh_utils.bdf_renumber._get_bdf_model(bdf_filename, cards_to_skip=None, log=None, debug=False)[source]

helper method

pyNastran.bdf.mesh_utils.bdf_renumber._update_case_control(model, mapper)[source]

Updates the case control deck; helper method for bdf_renumber.

Parameters
modelBDF()

the BDF object

mapperdict[str] = List[int]

Defines the possible case control header values for each entry (e.g. LOAD)

pyNastran.bdf.mesh_utils.bdf_renumber._update_case_key(key, elemental_quantities, seti2, eid_map, nid_map)[source]

Updates a Case Control SET card. A set may have an elemental result or a nodal result.

pyNastran.bdf.mesh_utils.bdf_renumber._update_coords(model, starting_id_dict, cid, cid_map)[source]

updates the coords

pyNastran.bdf.mesh_utils.bdf_renumber._update_elements(model, starting_id_dict, eid, eid_map, mass_id_map, rigid_elements_map)[source]

updates the elements

pyNastran.bdf.mesh_utils.bdf_renumber._update_materials(unused_model, starting_id_dict, mid, mid_map, all_materials)[source]
pyNastran.bdf.mesh_utils.bdf_renumber._update_mpcs(model, starting_id_dict, mpc_id, mpc_map)[source]

updates the mpcs

pyNastran.bdf.mesh_utils.bdf_renumber._update_nodes(model, starting_id_dict, nid, nid_map)[source]

updates the nodes

pyNastran.bdf.mesh_utils.bdf_renumber._update_properties(model, starting_id_dict, pid, properties_map, properties_mass_map)[source]

updates the properties

pyNastran.bdf.mesh_utils.bdf_renumber._update_spcs(model, starting_id_dict, spc_id, spc_map)[source]

updates the spcs

pyNastran.bdf.mesh_utils.bdf_renumber._write_bdf(model, bdf_filename_out, size=8, is_double=False)[source]

helper method

pyNastran.bdf.mesh_utils.bdf_renumber.bdf_renumber(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF, _io.StringIO], bdf_filename_out: str, size=8, is_double=False, starting_id_dict=None, round_ids: bool = False, cards_to_skip: Optional[List[str]] = None, log=None, debug=False) → pyNastran.bdf.bdf.BDF[source]

Renumbers a BDF

Parameters
bdf_filenamestr / BDF

str : a bdf_filename (string; supported) BDF : a BDF model that has been cross referenced and is fully valid (an equivalenced deck is not valid)

bdf_filename_outstr / None

str : a bdf_filename to write None : don’t write the BDF

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

starting_id_dictdict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

keystr

the key (e.g. eid, nid, cid, …)

starting_idint, None

int : the value to start from None : don’t renumber this key

round_idsbool; default=False

Should a rounding up be applied for each variable? This makes it easier to read a deck and verify that it’s been renumbered properly. This only really applies when starting_id_dict is None

cards_to_skipList[str]; (default=None -> don’t skip any cards)

There are edge cases (e.g. FLUTTER analysis) where things can break due to uncross-referenced cards. You need to disable entire classes of cards in that case (e.g. all aero cards).

Returns
modelBDF()

a renumbered BDF object corresponding to bdf_filename_out

mapperDict[bdf_attribute]old_id_to_new_id_dict

List of mapper dictionaries of original ids to merged bdf_attribute : str

a BDF attribute (e.g., ‘nodes’, ‘elements’)

old_id_to_new_id_dictdict[id_old]id_new

a sub dictionary that is used to map the node/element/etc. ids

mapper = {

‘elements’ : eid_map, ‘nodes’ : nid_map, ‘coords’ : cid_map, …

}

Todo

bdf_model option for bdf_filename hasn’t been tested ..

Todo

add support for subsets (e.g. renumber only a subset of nodes/elements) ..

Todo

doesn’t support partial renumbering ..

Todo

doesn’t support element material coordinate systems ..

..warning: spoints might be problematic…check
..warning: still in development, but it usually brutally crashes

if it’s not supported

..warning: be careful of card unsupported cards (e.g. ones not read in)
Supports
  • GRIDs - no superelements

  • COORDx

  • elements
    • CELASx/CONROD/CBAR/CBEAM/CQUAD4/CTRIA3/CTETRA/CPENTA/CHEXA

    • RBAR/RBAR1/RBE1/RBE2/RBE3/RSPLINE/RSSCON

  • properties
    • PSHELL/PCOMP/PCOMPG/PSOLID/PSHEAR/PBAR/PBARL PROD/PTUBE/PBEAM

  • mass
    • CMASSx/CONMx/PMASS

  • aero - FLFACT - SPLINEx - FLUTTER

  • partial case control - METHOD/CMETHOD/FREQENCY - LOAD/DLOAD/LSEQ/LOADSET…LOADSET/LSEQ is iffy - SET cards

    • nodes

    • elements

    • SPC/MPC/FLUTTER/FLFACT

  • constraints
    • SPC/SPCADD/SPCAX/SPCD

    • MPC/MPCADD

    • SUPORT/SUPORT1

  • solution control/methods
    • TSTEP/TSTEPNL

    • NLPARM

    • EIGB/EIGC/EIGRL/EIGR

  • sets
    • USET

  • other
    • tables

    • materials

    • loads/dloads

Not Done
  • SPOINT

  • any cards with SPOINTs - DMIG/DMI/DMIJ/DMIJI/DMIK/etc. - CELASx - CDAMPx

  • superelements

  • aero cards - CAEROx - PAEROx

  • thermal cards?

  • optimization cards

  • SETx

  • PARAM,GRDPNT,x; where x>0

  • GRID SEID

  • case control - STATSUB - SUBCASE - global SET cards won’t be renumbered properly

Examples

Renumber Everything; Start from 1

>>> bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,
                 round_ids=False)

Renumber Everything; Start Material IDs from 100

>>> starting_id_dict = {
    'mid' : 100,
}
>>> bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,
                 starting_ids_dict=starting_ids_dict, round_ids=False)

Only Renumber Material IDs

>>> starting_id_dict = {
    'cid' : None,
    'nid' : None,
    'eid' : None,
    'pid' : None,
    'mid' : 1,
    'spc_id' : None,
    'mpc_id' : None,
    'load_id' : None,
    'dload_id' : None,

‘method_id’ : None, ‘cmethod_id’ : None, ‘spline_id’ : None, ‘table_id’ : None, ‘flfact_id’ : None, ‘flutter_id’ : None, ‘freq_id’ : None, ‘tstep_id’ : None, ‘tstepnl_id’ : None, ‘suport_id’ : None, ‘suport1_id’ : None, ‘tf_id’ : None, ‘set_id’ : None,

} >>> bdf_renumber(bdf_filename, bdf_filename_out, size=8, is_double=False,

starting_ids_dict=starting_ids_dict, round_ids=False)

pyNastran.bdf.mesh_utils.bdf_renumber.get_renumber_starting_ids_from_model(model: pyNastran.bdf.bdf.BDF) → Dict[str, int][source]

Get the starting ids dictionary used for renumbering with ids greater than those in model.

Parameters
modelBDF

BDF object to get maximum ids from.

Returns
starting_id_dictdict {strint, …}

Dictionary from id type to starting id.

pyNastran.bdf.mesh_utils.bdf_renumber.get_starting_ids_dict_from_mapper(model, mapper)[source]
pyNastran.bdf.mesh_utils.bdf_renumber.superelement_renumber(bdf_filename, bdf_filename_out=None, size=8, is_double=False, starting_id_dict=None, cards_to_skip=None, log=None, debug=False)[source]

Renumbers a superelement

Parameters
bdf_filenamestr / BDF

str : a bdf_filename (string; supported) BDF : a BDF model that has been cross referenced and is fully valid (an equivalenced deck is not valid)

bdf_filename_outstr / None

str : a bdf_filename to write None : don’t write the BDF

sizeint; {8, 16}; default=8

the bdf write precision

is_doublebool; default=False

the field precision to write

starting_id_dictdict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

keystr

the key (e.g. eid, nid, cid, …)

starting_idint, None

int : the value to start from None : don’t renumber this key

cards_to_skipList[str]; (default=None -> don’t skip any cards)

There are edge cases (e.g. FLUTTER analysis) where things can break due to uncross-referenced cards. You need to disable entire classes of cards in that case (e.g. all aero cards).

Returns
modelBDF()

a renumbered BDF object corresponding to bdf_filename_out

collapse_bad_quads Module
defines:
  • convert_bad_quads_to_tris(model, eids_to_check=None, xyz_cid0=None,

    min_edge_length=0.0)

pyNastran.bdf.mesh_utils.collapse_bad_quads.convert_bad_quads_to_tris(model: BDF, eids_to_check: List[int] = None, xyz_cid0: Optional[np.ndarray] = None, min_edge_length: float = 0.0) → None[source]

A standard quad is a nice rectangle. If an edge is collapsed, it’s a triangle. Change the element type with an inplace operation. Deletes any line elements created.

Parameters
modelBDF()

a BDF model that has not had it’s properties/load xref’d, but is valid such that it could

eidslist; (default=None -> all CQUAD4s)

the subset of element ids to check

xyz_cid0(n, 3) ndarray

nodes in cid=0

min_edge_lengthfloat; default=0.0

what is classified as “short”

.. warning:: Don’t cross reference properties/loads
.. todo:: check for bad xref
convert Module
defines:
  • convert(model, units_to, units=None)

pyNastran.bdf.mesh_utils.convert._convert_aero(model: BDF, xyz_scale: float, time_scale: float, weight_scale: float) → None[source]
Converts the aero cards
  • CAEROx, PAEROx, SPLINEx, AECOMP, AELIST, AEPARAM, AESURF

Supports: AERO, AEROS, CAERO1, CAERO2, TRIM*, MONPNT1, FLUTTER FLFACT-rho/vel

GUST, AESURF, PAERO2

Skips: PAERO1, AESTAT, AESURFS, AECOMP, AELIST Doesn’t support:CAERO3-5, PAERO3-5, SPLINEx, AEPARAM, AELINK, AEPRESS, AEFORCE, *probably not done

pyNastran.bdf.mesh_utils.convert._convert_constraints(model: BDF, xyz_scale: float) → None[source]

Converts the spc/mpcs

Supports: SPC1, SPC, SPCAX Implicitly supports: MPC, MPCADD, SPCADD

pyNastran.bdf.mesh_utils.convert._convert_coordinates(model: BDF, xyz_scale: float) → None[source]

Converts the coordinate systems

Supports: CORD1x, CORD2x

pyNastran.bdf.mesh_utils.convert._convert_dconstr(model: BDF, dconstr: DCONSTR, pressure_scale: float) → None[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_desvars(desvars, scale)[source]

scales the DVPREL/DVCREL/DVMREL DESVAR values

pyNastran.bdf.mesh_utils.convert._convert_dvcrel1(dvcrel: Union[DVCREL1, DVCREL2], xyz_scale: float) → float[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_dvprel1(dvprel, xyz_scale: float, mass_scale: float, weight_scale: float, time_scale: float) → float[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_elements(model: BDF, xyz_scale: float, time_scale: float, mass_scale: float, weight_scale: float) → None[source]

Converts the elements

Supports: CTRIA3, CTRIA6, CTRIAR, CQUAD4, CQUAD8, CQUADR,

CELAS2, CELAS4, CDAMP2, CDAMP4, CBUSH, CONROD, CBAR, CBEAM, GENEL, CONM2, CMASS4

SkipsCELAS1, CELAS3, CDAMP3, CDAMP5, CCONEAX,

CROD, CTUBE, CVISC, CBUSH1D, CQUAD, CSHEAR, CTRIAX, CTRIAX6, CTETRA, CPENTA, CHEXA, CPYRAM, CMASS1, CMASS3,

NX Skips: CTRAX3, CTRAX6, CPLSTN3, CPLSTN6, CPLSTN4’, CPLSTN8, CQUADX4, CQUADX8 *intentionally

pyNastran.bdf.mesh_utils.convert._convert_loads(model: BDF, xyz_scale: float, time_scale: float, weight_scale: float, temperature_scale: float) → None[source]

Converts the loads

Supports:
  • dloads: RLOAD1*, TLOAD1*

  • loads: FORCE, FORCE1, FORCE2, MOMENT, MOMENT1, MOMENT2

    GRAV, ACCEL1, PLOAD, PLOAD1, PLOAD2, PLOAD4, RANDPS

  • combinations: DLOAD, LOAD

  • probably not done

pyNastran.bdf.mesh_utils.convert._convert_materials(model: BDF, xyz_scale: float, mass_scale: float, weight_scale: float, temperature_scale: float) → None[source]

Converts the materials

Supports: MAT1, MAT2, MAT3, MAT8, MAT9, MAT10, MAT11

pyNastran.bdf.mesh_utils.convert._convert_nodes(model: BDF, xyz_scale: bool) → None[source]

Converts the nodes

Supports: GRID

pyNastran.bdf.mesh_utils.convert._convert_optimization(model: BDF, xyz_scale: float, mass_scale: float, weight_scale: float, time_scale: float) → None[source]

Converts the optimization objects

Limited Support: DESVAR, DCONSTR, DVCREL1, DVPREL1

pyNastran.bdf.mesh_utils.convert._convert_pbar(prop: PBAR, xyz_scale: float, area_scale: float, area_moi_scale: float, nsm_bar_scale: float) → None[source]

converts a PBAR

pyNastran.bdf.mesh_utils.convert._convert_pbeam(prop: PBEAM, xyz_scale: float, area_scale: float, area_moi_scale: float, nsm_bar_scale: float) → None[source]

converts a PBEAM

pyNastran.bdf.mesh_utils.convert._convert_pbeam3(prop: PBEAM3, xyz_scale: float, area_scale: float, area_moi_scale: float, nsm_bar_scale: float) → None[source]

converts a PBEAM3

pyNastran.bdf.mesh_utils.convert._convert_pbush(prop: PBUSH, velocity_scale: float, mass_scale: float, stiffness_scale: float, log: SimpleLogger) → None[source]
pyNastran.bdf.mesh_utils.convert._convert_pbush1d(model: BDF, prop: PBUSH1D, xyz_scale: float, area_scale: float, mass_scale: float, damping_scale: float, stiffness_scale: float) → None[source]

converts the PBUSH1D

pyNastran.bdf.mesh_utils.convert._convert_properties(model: BDF, xyz_scale: float, time_scale: float, mass_scale: float, weight_scale: float, temperature_scale: float) → None[source]

Converts the properties

Supports: PELAS, PDAMP, PDAMP5, PVISC, PROD, PBAR, PBARL, PBEAM, PBEAML,

PSHELL, PSHEAR, PCOMP, PCOMPG, PELAS, PTUBE, PBUSH, PCONEAX, PGAP, PBUSH1D

Skips : PSOLID, PLSOLID, PLPLANE, PIHEX

Skips are unscaled (intentionally)

pyNastran.bdf.mesh_utils.convert._get_dload_scale(dload, xyz_scale: float, velocity_scale: float, accel_scale: float, force_scale: float) → None[source]

LOAD asssumes force

pyNastran.bdf.mesh_utils.convert._scale_caero(caero, xyz_scale: float, xyz_aefacts) → None[source]
pyNastran.bdf.mesh_utils.convert._scale_term(name: str, coeffs: List[float], terms: List[float], scales: List[float]) → Tuple[float, str][source]
pyNastran.bdf.mesh_utils.convert._set_wtmass(model: BDF, gravity_scale: float) → None[source]

set the PARAM,WTMASS

ft-lbm-s-lbf-psf : 1. / 32.2 in-lbm-s-lbf-psi : 1. / (32.2*12) m-kg-s-N-Pa : 1. mm-Mg-s-N-Mpa : 1. in-slinch-s-lbf-psi : 1. ft-slug-s-lbf-psf : 1. in-slug-s-lbf-psi : 1 / 12.

1 slug * 1 ft/s^2 = 1 lbf 1 slinch * 1 in/s^2 = 1 lbf 1 slinch = 12 slug

F = m*a 386 lbf = 1 slinch * 386 * in/s^2 32 lbf = 1 slug * 32 * ft/s^2 1 N = 1 kg * 9.8 m/s^2

1 lbf = g_scale * 1 slinch * 1 in/s^2 1 lbf = g_scale * 12 slug * 1 in/s^2 –> g_scale = 1/12.

pyNastran.bdf.mesh_utils.convert._setup_scale_by_terms(scales: List[float], terms: List[str], quiet: bool = False) → Tuple[float, float, float][source]

determines the mass, length, time scaling factors

pyNastran.bdf.mesh_utils.convert.convert(model: BDF, units_to: List[str], units: Optional[List[str]] = None) → None[source]

Converts a model from a set of defined units

Parameters
modelBDF

cross references the model (default=True)

units_toList[str]

[length, mass, time] length = {in, ft, m, cm, mm} mass = {g, kg, Mg, lbm, slug, slinch} time = {s}

unitsList[str]

overwrites model.units

pyNastran.bdf.mesh_utils.convert.convert_length(length_from, length_to)[source]

Determines the length scale factor

We create a gravity_scale_length for any non-standard unit (ft, m)

pyNastran.bdf.mesh_utils.convert.convert_mass(mass_from: str, mass_to: str, log: SimpleLogger) → Tuple[float, float, float][source]

determines the mass, weight, gravity scale factor

We apply a gravity_scale_mass for any unit not {kg, slug}. Then we convert to N.

So for SI, if we have kg, we have a base unit, and the length is assumed to be m, so we have a consistent system and gravity_scale_mass is 1.0.

For lbm:

F = m*a 1 lbf = 1 lbm * 1 ft/s^2 32 lbf = 1 slug * 32 ft/s^2 gscale = 1/g F = gscale * m * a 1 lbf = gscale * 1 lbm * 32 ft/s^2 –> gscale = 1/32

For slug:

F = gscale * m * a 32 lbf = gscale * 1 slug * 32 ft/s^2 –> gscale = 1

For slinch:

F = gscale * m * a 386 lbf = gscale * 1 slinch * 12*32 in/s^2 1 slinch = 12 slug 12 in = 1 ft 386 lbf = gscale * 12 slug * 32 ft/s^2 –> gscale = 1

TODO: slinch/slug not validated

pyNastran.bdf.mesh_utils.convert.get_scale_factors(units_from, units_to, log)[source]

[length, mass, time] [in, lb, s]

pyNastran.bdf.mesh_utils.convert.scale_by_terms(bdf_filename: Union[BDF, str], terms: List[float], scales: List[float], bdf_filename_out: Optional[str] = None, encoding: Optional[str] = None, log=None, debug: bool = True) → BDF[source]

Scales a BDF based on factors for 3 of the 6 independent terms

Parameters
bdf_filenamestr / BDF()

a BDF filename

termsList[str]; length=3

the names {M, L, T, F, P, V, A, rho} mass, length, time, force, pressure, velocity, area, mass_density

scalesList[float]; length=3

the scaling factors

bdf_filename_outstr; default=None

a BDF filename to write

Returns
modelBDF()

the scaled BDF

pyNastran.bdf.mesh_utils.convert.scale_model(model: BDF, xyz_scale: float, mass_scale: float, time_scale: float, weight_scale: float, gravity_scale: float, convert_nodes: bool = True, convert_elements: bool = True, convert_properties: bool = True, convert_materials: bool = True, convert_aero: bool = True, convert_constraints: bool = True, convert_loads: bool = True, convert_optimization: bool = True)[source]

Performs the model scaling

delete_bad_elements Module
defines:
  • model = delete_bad_shells(model, max_theta=175., max_skew=70., max_aspect_ratio=100.,

    max_taper_ratio=4.0)

  • eids_to_delete = get_bad_shells(model, xyz_cid0, nid_map, max_theta=175., max_skew=70.,

    max_aspect_ratio=100., max_taper_ratio=4.0)

pyNastran.bdf.mesh_utils.delete_bad_elements.delete_bad_shells(model: pyNastran.bdf.bdf.BDF, min_theta: float = 0.1, max_theta: float = 175.0, max_skew: float = 70.0, max_aspect_ratio: float = 100.0, max_taper_ratio: float = 4.0) → pyNastran.bdf.bdf.BDF[source]

Removes bad CQUAD4/CTRIA3 elements

Parameters
modelBDF ()

this should be equivalenced

min_thetafloat; default=0.1

the maximum interior angle (degrees)

max_thetafloat; default=175.

the maximum interior angle (degrees)

max_skewfloat; default=70.

the maximum skew angle (degrees)

max_aspect_ratiofloat; default=100.

the max aspect ratio

taper_ratiofloat; default=4.0

the taper ratio; applies to CQUAD4s only

pyNastran.bdf.mesh_utils.delete_bad_elements.element_quality(model, nids=None, xyz_cid0=None, nid_map=None)[source]

Gets various measures of element quality

Parameters
modelBDF()

a cross-referenced model

nids(nnodes, ) int ndarray; default=None

the nodes of the model in sorted order includes GRID, SPOINT, & EPOINTs

xyz_cid0(nnodes, 3) float ndarray; default=None

the associated global xyz locations

nid_mapDict[nid]->index; default=None

a mapper dictionary

Returns
qualityDict[name](nelements, ) float ndarray

Various quality metrics names : min_interior_angle, max_interior_angle, dideal_theta,

max_skew_angle, max_aspect_ratio, area_ratio, taper_ratio, min_edge_length

valuesThe result is np.nan if element type does not define

the parameter. For example, CELAS1 doesn’t have an aspect ratio.

Notes

  • pulled from nastran_io.py

pyNastran.bdf.mesh_utils.delete_bad_elements.get_bad_shells(model: pyNastran.bdf.bdf.BDF, xyz_cid0, nid_map, min_theta: float = 0.1, max_theta: float = 175.0, max_skew: float = 70.0, max_aspect_ratio: float = 100.0, max_taper_ratio: float = 4.0) → List[int][source]

Get the bad shell elements

Parameters
modelBDF()

the model object

xyz_cid0(N, 3) float ndarray

the xyz coordinates in cid=0

nid_mapdict[nid]index
nidint

the node id

indexint

the index of the node id in xyz_cid0

min_thetafloat; default=0.1

the maximum interior angle (degrees)

max_thetafloat; default=175.

the maximum interior angle (degrees)

max_skewfloat; default=70.

the maximum skew angle (degrees)

max_aspect_ratiofloat; default=100.

the max aspect ratio

taper_ratiofloat; default=4.0

the taper ratio; applies to CQUAD4s only

Returns
eids_failedList[int]

element ids that fail the criteria

shells with a edge length=0.0 are automatically added
pyNastran.bdf.mesh_utils.delete_bad_elements.get_min_max_theta(faces, all_node_ids, nid_map, xyz_cid0)[source]

get the min/max thetas for CTETRA, CPENTA, CHEXA, CPYRAM

pyNastran.bdf.mesh_utils.delete_bad_elements.get_node_map(model)[source]

gets an nid->inid mapper

pyNastran.bdf.mesh_utils.delete_bad_elements.quad_quality(element, p1, p2, p3, p4)[source]

gets the quality metrics for a quad

pyNastran.bdf.mesh_utils.delete_bad_elements.tri_quality(p1, p2, p3)[source]

gets the quality metrics for a tri

area, max_skew, aspect_ratio, min_theta, max_theta, dideal_theta, min_edge_length

export_mcids Module
Defines:
  • nodes, bars = export_mcids(bdf_filename, csv_filename=None)

pyNastran.bdf.mesh_utils.export_mcids._add_elements(nid: int, eid: int, nodes: List[Tuple[int, float, float, float]], bars: List[Tuple[int, int, int]], centroid: numpy.ndarray, iaxis: numpy.ndarray, jaxis: numpy.ndarray, export_both_axes: bool, export_xaxis: bool) → Tuple[int, int][source]

adds the element data

pyNastran.bdf.mesh_utils.export_mcids._export_coord_axes(nodes, bars, csv_filename: str)[source]

save the coordinate systems in a csv file

pyNastran.bdf.mesh_utils.export_mcids._export_quad_mcid(model: pyNastran.bdf.bdf.BDF, elem, nodes, iply: int, nid: int, eid: int, bars: List[List[int]], export_both_axes: bool, export_xaxis: bool, consider_property_rotation: bool) → Tuple[int, int][source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_quad_mcid_all(model: pyNastran.bdf.bdf.BDF, elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], nplies: int, nids: Dict[int, int], nodes: Dict[int, List[numpy.ndarray]], bars: Dict[int, List[Tuple[int, int]]]) → None[source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_tri_mcid_all(model: pyNastran.bdf.bdf.BDF, elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], nplies: int, nids: Dict[int, int], nodes: Dict[int, List[numpy.ndarray]], bars: Dict[int, List[Tuple[int, int]]]) → None[source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_tria_mcid(model: pyNastran.bdf.bdf.BDF, elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], nodes, iply: int, nid: int, eid: int, bars, export_both_axes: bool, export_xaxis: bool, consider_property_rotation: bool) → Tuple[int, int][source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._export_xaxis(nid: int, nodes: List[numpy.ndarray], bars: List[numpy.ndarray], centroid: numpy.ndarray, iaxis: numpy.ndarray) → int[source]
pyNastran.bdf.mesh_utils.export_mcids._get_elements(model, eids)[source]
pyNastran.bdf.mesh_utils.export_mcids._get_quad_vectors_mcid(elem: pyNastran.bdf.cards.elements.shell.CQUAD4)[source]
pyNastran.bdf.mesh_utils.export_mcids._get_tri_vectors_mcid(elem: pyNastran.bdf.cards.elements.shell.CTRIA3)[source]
pyNastran.bdf.mesh_utils.export_mcids._load_bdf(bdf_filename: Union[BDF, str], log: Optional[SimpleLogger] = None, debug: bool = True) → BDF[source]
pyNastran.bdf.mesh_utils.export_mcids._make_element_coord_quad(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref, nids, nodes, bars)[source]
pyNastran.bdf.mesh_utils.export_mcids._make_element_coord_tri(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref, nids, nodes, bars)[source]
pyNastran.bdf.mesh_utils.export_mcids._rotate_coords(elem: ShellElement, pid_ref, nplies: int, nids: Dict[int, int], nodes: Dict[int, List[Any]], bars: Dict[int, List[Any]], dxyz: float, centroid: np.ndarray, imat: np.ndarray, jmat: np.ndarray, normal: np.ndarray) → None[source]

iply Final Label Description ==== =========== =========== -1 0 material coordinate system 0 1 ply 1 1 2 ply 2 2 3 ply 3

#nplies = 3 nids - {-1: 0, 0: 0, 1: 0, 2: 0} nodes = {-1: [], 0: [], 1: [], 2: []} bars = {-1: [], 0: [], 1: [], 2: []}

pyNastran.bdf.mesh_utils.export_mcids._rotate_mcid(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref: Union[pyNastran.bdf.cards.properties.shell.PCOMP, pyNastran.bdf.cards.properties.shell.PCOMPG, pyNastran.bdf.cards.properties.shell.PSHELL], iply: int, imat: numpy.ndarray, jmat: numpy.ndarray, normal: numpy.ndarray, consider_property_rotation: bool = True) → Tuple[numpy.ndarray, numpy.ndarray][source]

Rotates a material coordinate system. Assumes the element theta/mcid has already been acounted for.

pyNastran.bdf.mesh_utils.export_mcids._rotate_single_coord(elem: Union[pyNastran.bdf.cards.elements.shell.CTRIA3, pyNastran.bdf.cards.elements.shell.CTRIA6, pyNastran.bdf.cards.elements.shell.CQUAD4, pyNastran.bdf.cards.elements.shell.CQUAD8, pyNastran.bdf.cards.elements.shell.CTRIAR, pyNastran.bdf.cards.elements.shell.CQUADR], pid_ref, iply: int, nid, eid, nodes, bars, dxyz: float, centroid: numpy.ndarray, imat: numpy.ndarray, jmat: numpy.ndarray, normal: numpy.ndarray, export_both_axes: bool, export_xaxis: bool, consider_property_rotation: bool) → Tuple[int, int][source]
pyNastran.bdf.mesh_utils.export_mcids.export_mcids(bdf_filename: Union[pyNastran.bdf.bdf.BDF, str], csv_filename: Optional[str] = None, eids: Optional[List[int]] = None, export_xaxis: bool = True, export_yaxis: bool = True, consider_property_rotation: bool = True, iply: int = 0, log=None, debug=False)[source]

Exports the element material coordinates systems for non-isotropic materials.

Parameters
bdf_filenamestr/BDF

a bdf filename or BDF model

csv_filenamestr; default=None

str : the path to the output csv None : don’t write a CSV

eidsList[int]

the element ids to consider

export_xaxisbool; default=True

export the x-axis

export_yaxisbool; default=True

export the x-axis

consider_property_rotationbool; default=True

rotate the coordinate system

iplyint; default=0

TODO: not validated the ply to consider

pid_to_npliesDict[int pid, int nplies]; default=None -> auto

optional dictionary to speed up analysis

PSHELL

iply location —- ——–

0 mid1 or mid2 1 mid1 2 mid2 3 mid3 4 mid4

PCOMP/PCOMPG

iply location —- ——– 0 layer1 1 layer2

Returns
nodes(nnodes, 3) float list

the nodes

bars(nbars, 2) int list

the “bars” that represent the x/y axes of the coordinate systems

pyNastran.bdf.mesh_utils.export_mcids.export_mcids_all(bdf_filename: Union[BDF, str], eids: Optional[List[int]] = None, log: Optional[SimpleLogger] = None, debug: bool = False)[source]

Exports the element material coordinates systems for non-isotropic materials.

Note that for two quads identically oriented/numbered PSHELL quads with theta different between the two, the mcid will be different.

Parameters
bdf_filenamestr/BDF

a bdf filename or BDF model

csv_filenamestr; default=None

str : the path to the output csv None : don’t write a CSV

eidsList[int]

the element ids to consider

PSHELL

iply location —- ——–

0 mid1 or mid2 1 mid1 2 mid2 3 mid3 4 mid4

PCOMP/PCOMPG

iply location —- ——– 0 layer1 1 layer2

Returns
nodes(nnodes, 3) float list

the nodes

bars(nbars, 2) int list

the “bars” that represent the x/y axes of the coordinate systems

pyNastran.bdf.mesh_utils.export_mcids.get_pid_ref_prop_type(model: pyNastran.bdf.bdf.BDF, elem) → Tuple[Union[pyNastran.bdf.cards.properties.shell.PCOMP, pyNastran.bdf.cards.properties.shell.PCOMPG, pyNastran.bdf.cards.properties.shell.PSHELL], str][source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids.get_pid_to_nplies(model: pyNastran.bdf.bdf.BDF) → Tuple[Dict[int, int], int][source]
mirror_mesh Module
This file defines:
  • model, nid_offset, eid_offset = bdf_mirror(bdf_filename, plane=’xz’)

  • model, nid_offset, eid_offset = write_bdf_symmetric(

    bdf_filename, out_filename=None, encoding=None, size=8, is_double=False, enddata=None, close=True, plane=’xz’)

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_elements(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, eid_offset: int, cid_offset: int, plane: str = 'xz') → None[source]

mirrors model.elements

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_masses(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, eid_offset: int) → None[source]

mirrors model.masses

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_rigid_elements(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, eid_offset: int) → None[source]

mirrors model.rigid_elements

pyNastran.bdf.mesh_utils.mirror_mesh._asymmetrically_mirror_coords(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, cids_nominal_set: Set[int], cid_offset: int, plane: str = 'xz') → None[source]

we’ll leave i the same, flip j, and invert k

pyNastran.bdf.mesh_utils.mirror_mesh._asymmetrically_mirror_coords2(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, cids_nominal_set: Set[int], cid_offset: int, plane: str = 'xz') → None[source]

We’ll invert i, but not j, which will invert k.

This will allow us to mirror material coordinate systems (defined in x). Additionally, we can mirror CGAP coordinate systems (defined in x) as well as some arbitrary y-direction. We’ll try to make y look mirrored.

pyNastran.bdf.mesh_utils.mirror_mesh._get_cid_offset(model: pyNastran.bdf.bdf.BDF, use_cid_offset: bool) → int[source]
pyNastran.bdf.mesh_utils.mirror_mesh._get_eid_offset(model: pyNastran.bdf.bdf.BDF, use_eid_offset: bool) → int[source]
pyNastran.bdf.mesh_utils.mirror_mesh._mirror_aero(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, plane: str = 'xz') → None[source]

Mirrors the aero cards

Considers:
  • AEROS

  • doesn’t consider sideslip

  • CAERO1

  • doesn’t consider sideslip

  • considers Cp

  • considers lchord/lspan/nchord/nspan

  • SPLINE1 - handle boxes

  • SET1 - handle nodes

  • AELIST - handle boxes

  • AESURF - only supports names of length 7 or less (appends an M to the name) - handles AELIST - doesn’t handle coords well - doesn’t handle second AESURF

Doesnt consider:
  • AERO

  • AEFORCE

  • AEPRES

  • CAERO2/3/4/5

  • PAERO1/2/3/4/5

  • AESURFS

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_elements(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int, use_eid_offset: bool = True, plane: str = 'xz') → int[source]

Mirrors the elements

Parameters
modelBDF

the base model

modelBDF

the mirrored model

mirror_modelBDF

the mirrored model

nid_offsetint

the node id offset

use_eid_offsetbool; default=True

what is this for???

elements:
0dCELAS1, CELAS2, CELAS3, CELAS4, CDAMP1, CDAMP2, CDAMP3, CDAMP4, CDAMP5

CFAST, CBUSH, CBUSH1D

1d: CROD, CONROD, CTUBE, CBAR, CBEAM, CBEAM3 2d : CTRIA3, CQUAD4, CTRIA6, CQUAD8, CQUAD, CTRIAR, CQUADR 3d : ??? missing : CVISC, CTRIAX, CTRIAX6, CQUADX, CQUADX8, CCONEAX

rigid_elements:

loaded: RBE2, RBE3, RBAR missing: RBAR1

mass_elements:

loaded: CONM2 missing CONM1, CMASS1, CMASS2, CMASS3, CMASS4

plotels:

loaded: PLOTEL missing: ???

Notes

Doesn’t handle CBAR/CBEAM offsets Doesn’t handle CBEAM SPOINTs Do I need to invert the solids?

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_loads(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, nid_offset: int = 0, eid_offset: int = 0) → None[source]

Mirrors the loads. A mirrored force acts in the same direction.

Considers:
  • PLOAD4
    • no coordinate systems (assumes cid=0)

  • FORCE, FORCE1, FORCE2, MOMENT, MOMENT1, MOMENT2

  • PLOAD, PLOAD2

  • TEMP, QVOL, QHBDY, QBDY1, QBDY2, QBDY3

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_nodes(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, plane: str = 'xz') → Tuple[int, str][source]

Mirrors the GRIDs

Warning

doesn’t consider coordinate systems; it could, but you’d need 20 new coordinate systems

Warning

doesn’t mirror SPOINTs, EPOINTs

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_nodes_plane(model: pyNastran.bdf.bdf.BDF, mirror_model: pyNastran.bdf.bdf.BDF, plane: Any, use_nid_offset: bool = True) → Tuple[int, str][source]

Mirrors the GRIDs about an arbitrary plane

Parameters
modelBDF

the original geometry

mirror_modelBDF

the location of the new geometry

plane(3,3) float ndarray

3 vectors that defines the origin, zaxis and xzplane; same as a CORD2R

use_nid_offsetbool

should the node offset be applied

Returns
nid_offsetint

the node id offset

planestr

the sorted plane; ZX -> xz

Warning

doesn’t consider coordinate systems; it could, but you’d need 20 new coordinate systems

Warning

doesn’t mirror SPOINTs, EPOINTs ..

https://mathinsight.org/distance_point_plane
pyNastran.bdf.mesh_utils.mirror_mesh._plane_to_iy(plane: str) → Tuple[int, str][source]

gets the index fo the mirror plane

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF], plane: str = 'xz', log=None, debug: bool = True)[source]

Mirrors the model about the symmetry plane

Parameters
bdf_filenamestr / BDF()

str : the bdf filename BDF : the BDF model object

planestr; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns
modelBDF()

BDF : the BDF model object

nid_offsetint

the offset node id

eid_offsetint

the offset element id

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror_plane(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF], plane: Any, mirror_model=None, log=None, debug: bool = True, use_nid_offset: bool = True)[source]

mirrors a model about an arbitrary plane

pyNastran.bdf.mesh_utils.mirror_mesh.write_bdf_symmetric(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF], out_filename=None, encoding=None, size: int = 8, is_double: bool = False, enddata: Optional[bool] = None, close: bool = True, plane: str = 'xz', log=None)[source]

Mirrors the model about the symmetry plane

Parameters
bdf_filenamestr / BDF()

str : the bdf filename BDF : the BDF model object

out_filenamevaries; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

encodingstr; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

sizeint; {8, 16}

the field size

is_doublebool; default=False

False : small field True : large field

enddatabool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

closebool; default=True

should the output file be closed

planestr; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns
modelBDF()

BDF : the BDF model object

nid_offsetint

the offset node id

eid_offsetint

the offset element id

Notes

Updates the BDF object to be symmetric
  • see bdf_mirror if you don’t want to write the model

Doesn’t equivalence nodes on the centerline.

Considers
  • nodes : GRID

  • elements, rigid_elements, mass_elements : see _mirror_elements

  • loads : see _mirror_loads

  • aero cards : see _mirror_aero

extract_bodies Module
defines:
  • extract_bodies(bdf_filename)

pyNastran.bdf.mesh_utils.extract_bodies.extract_bodies(bdf_filename, mpc_id=0)[source]

Finds the isolated bodies

Parameters
bdf_filenamestr/BDF

str : the path the the *.bdf file BDF : a BDF() boject

mpc_idint; default=0

0 : consider all MPCs >0 : use this MPC set not supported

Considers:
  • elements

  • rigid_elements

Doesn’t consider:
  • elements_mass

  • MPC

  • MPCADD

  • DMIx

Doesn’t support:
  • xref

  • duplicate element ids

  • large values

find_closest_nodes Module
defines:
  • nids_close = find_closest_nodes(nodes_xyz, nids, xyz_compare, neq_max, tol)

  • ieq = find_closest_nodes_index(nodes_xyz, xyz_compare, neq_max, tol)

pyNastran.bdf.mesh_utils.find_closest_nodes._not_equal_nodes_build_tree(nodes_xyz: Any, xyz_compare: Any, tol: float, neq_max: int = 4, msg: str = '') → Tuple[Any, numpy.ndarray, numpy.ndarray][source]

helper function for bdf_equivalence_nodes

Parameters
nodes_xyz(Nnodes, 3) float ndarray

the source points

xyz_compare(Ncompare, 3) float ndarray

the xyz points to compare to

tolfloat

the max spherical tolerance

neq_maxint; default=4

the number of close nodes

msgstr; default=’’

error message

Returns
kdtKDTree()

the kdtree object

ieqint ndarray

The indices of nodes_xyz where the nodes in xyz_compare are close??? neq_max = 1:

(N, ) int ndarray

neq_max > 1:

(N, N) int ndarray

slotsint ndarray

The indices of nodes_xyz where the nodes in xyz_compare are close??? neq_max = 1:

(N, ) int ndarray

neq_max > 1:

(N, N) int ndarray

msgstr; default=’’

error message

pyNastran.bdf.mesh_utils.find_closest_nodes.find_closest_nodes(nodes_xyz: Any, nids: Any, xyz_compare: Any, neq_max: int = 1, tol: Optional[float] = None, msg: str = '') → Any[source]

Finds the closest nodes to an arbitrary set of xyz points

Parameters
nodes_xyz(Nnodes, 3) float ndarray

the source points (e.g., xyz_cid0)

nids(Nnodes, ) int ndarray

the source node ids (e.g.; nid_cp_cid[:, 0])

xyz_compare(Ncompare, 3) float ndarray

the xyz points to compare to; xyz_to_find

tolfloat; default=None

the max spherical tolerance None : the whole model

neq_maxint; default=1

the number of “close” points

msgstr; default=’’

custom message used for errors

Returns
nids_close: (Ncompare, ) int ndarray

the close node ids

pyNastran.bdf.mesh_utils.find_closest_nodes.find_closest_nodes_index(nodes_xyz: Any, xyz_compare: Any, neq_max: int, tol: float, msg: str = '')[source]

Finds the closest nodes to an arbitrary set of xyz points

Parameters
nodes_xyz(Nnodes, 3) float ndarray

the source points

xyz_compare(Ncompare, 3) float ndarray

the xyz points to compare to

neq_maxint

the number of “close” points (default=4)

tolfloat

the max spherical tolerance

msgstr; default=’’

error message

Returns
slots(Ncompare, ) int ndarray

the indices of the close nodes corresponding to nodes_xyz

find_coplanar_elements Module
pyNastran.bdf.mesh_utils.find_coplanar_elements.find_coplanar_triangles(bdf_filename: Union[BDF, str], eids: Optional[List[int]] = None) → List[int][source]

Finds coplanar triangles

Parameters
bdf_filenameBDF/str

BDF: a model str: the path to the bdf input file

eidslist

the element ids to consider

Returns
coplanar_eidsList[int]

the elements that are coplanar

force_to_pressure Module
pyNastran.bdf.mesh_utils.force_to_pressure.force_to_pressure(bdf_filename, bdf_filename_out=None)[source]

converts FORCE cards to PLOAD4s for a shell model

free_edges Module
defines:

edges = free_edges(model, eids=None) edges = non_paired_edges(model, eids=None)

pyNastran.bdf.mesh_utils.free_edges._get_edge_to_eids_map(model, eids=None)[source]

helper method

pyNastran.bdf.mesh_utils.free_edges.free_edges(model: BDF, eids: Optional[List[int]] = None, maps=None) → List[Tuple[int, int]][source]

Gets the free edges for shell elements. A free edge is an edge that is only connected to 1 shell element.

Parameters
modelBDF()

the BDF model

eidsList[int]; default=None

a subset of elements to consider

mapsList[…] (default=None -> calculate)
the output from _get_maps(eids, map_names=None,

consider_0d=False, consider_0d_rigid=False, consider_1d=False, consider_2d=True, consider_3d=False)

Returns
edges: List[Tuple[int,int]]

list of node ids of each edges

pyNastran.bdf.mesh_utils.free_edges.non_paired_edges(model: BDF, eids: List[int] = None, maps=None) → List[Tuple[int, int]][source]

Gets the edges not shared by exactly 2 elements. This is useful for identifying rib/spar intersections.

Parameters
modelBDF()

the BDF model

eidsList[int]; default=None

a subset of elements to consider

mapsList[…] (default=None -> calculate)
the output from _get_maps(eids, map_names=None,

consider_0d=False, consider_0d_rigid=False, consider_1d=False, consider_2d=True, consider_3d=False)

Returns
non_paired_edgesList[(int nid1, int nid2), …]

the non-paired edges

free_faces Module
defines:
  • get_element_faces(model, element_ids=None)

  • get_solid_skin_faces(model)

  • write_skin_solid_faces(model, skin_filename,

    write_solids=False, write_shells=True, size=8, is_double=False, encoding=None)

pyNastran.bdf.mesh_utils.free_faces._write_shells(bdf_file, model, eid_set, face_map, eid_shell, pid_shell, mid_shell, mids_to_write)[source]

helper method for _write_skin_solid_faces

pyNastran.bdf.mesh_utils.free_faces._write_skin_solid_faces(model, skin_filename, face_map, nids_to_write, eids_to_write, mids_to_write, eid_set, eid_shell, pid_shell, mid_shell, write_solids=False, write_shells=True, size=8, is_double=False, encoding=None)[source]

helper method for write_skin_solid_faces

Parameters
modelBDF()

the BDF object

skin_filenamestr

the file to write

face_mapdict[sorted_face]face

sorted_face : List[int, int, int] / List[int, int, int, int] face : List[int, int, int] / List[int, int, int, int]

nids_to_writeList[int, int, …]

list of node ids to write

eids_to_writeList[int, int, …]

list of element ids to write

mids_to_writeList[int, int, …]

list of material ids to write

eid_setSet[int]

is the type right???

eid_shellint

the next id to use for the shell id

pid_shellint

the next id to use for the shell property

mid_shellint

the next id to use for the shell material

write_solidsbool; default=False

write solid elements that have skinned faces

write_shellsbool; default=True

write shell elements

sizeint; default=/8

the field width

is_doublebool; default=False

double precision flag

encodingstr; default=None -> system default

the string encoding

pyNastran.bdf.mesh_utils.free_faces.get_element_faces(model: pyNastran.bdf.bdf.BDF, element_ids: Optional[List[int]] = None) → Any[source]

Gets the elements and faces that are skinned from solid elements. This includes internal faces.

Parameters
modelBDF()

the BDF object

element_idsList[int] / None

skin a subset of element faces default=None -> all elements

Returns
eid_faces(int, List[(int, int, …)])

value1 : element id value2 : face

pyNastran.bdf.mesh_utils.free_faces.get_solid_skin_faces(model: pyNastran.bdf.bdf.BDF) → Any[source]

Gets the elements and faces that are skinned from solid elements This doesn’t include internal faces.

Parameters
modelBDF()

the BDF object

Returns
eid_setDict[tuple(int, int, …)] = List[int]

key : sorted face value : list of element ids with that face

face_mapDict[tuple(int, int, …)] = List[int]

key : sorted face value : unsorted face

pyNastran.bdf.mesh_utils.free_faces.write_skin_solid_faces(model, skin_filename, write_solids=False, write_shells=True, size=8, is_double=False, encoding=None, punch=False, log=None)[source]

Writes the skinned elements

Parameters
modelBDF() or str

BDF : the BDF object str : bdf_filename and the read_bdf method is called

skin_filenamestr

the file to write

write_solidsbool; default=False

write solid elements that have skinned faces

write_shellsbool; default=False

write shell elements

sizeint; default=8

the field width

is_doublebool; default=False

double precision flag

encodingstr; default=None -> system default

the string encoding

loglogger; default=None

a python logging object

punchbool; default=False

is this a punch file; should be used by the read_bdf if model is a string unused

get_oml Module
defines:
  • eids_oml = get_oml_eids(bdf_filename, eid_start, theta_tol=30.,

    is_symmetric=True, consider_flippped_normals=True)

pyNastran.bdf.mesh_utils.get_oml.get_oml_eids(bdf_filename: Union[str, pyNastran.bdf.bdf.BDF, pathlib.PurePath, _io.StringIO], eid_start: int, theta_tol: float = 30.0, is_symmetric: bool = True, consider_flippped_normals: bool = True) → Set[int][source]

Extracts the OML faces (outer mold line) of a shell model. In other words, find all the shell elements touching the current element without crossing an MPC or rigid element.

Parameters
bdf_filenamestr or BDF()

the bdf filename

eid_startint

the element to start from

theta_tolfloat; default=30.

the angular tolerance in degrees

is_symmetricbool; default=True

is the y=0 plane considered to be part of the OML

consider_flippped_normalsbool; default=True

if you extracted the free faces from tets, you can get flipped normals this considers a 180 degree error to be 0.0, which will cause other problems

pyNastran.bdf.mesh_utils.get_oml.main()[source]

runs the test problem

remove_unused Module
defines some methods for cleaning up a model
  • model = remove_unused(bdf_filename, remove_nids=True, remove_cids=True,

    remove_pids=True, remove_mids=True)

pyNastran.bdf.mesh_utils.remove_unused._remove(model: pyNastran.bdf.bdf.BDF, nids_used, cids_used, pids_used, pids_mass_used, mids_used, spcs_used, mpcs_used, pconv_used, tableht_used, tableh1_used, unused_desvars_used, remove_nids=True, remove_cids=True, remove_pids=True, remove_mids=True, remove_spcs=True, remove_mpcs=True, unused_remove_desvars=True)[source]

actually removes the cards

pyNastran.bdf.mesh_utils.remove_unused._remove_thermal(model: pyNastran.bdf.bdf.BDF, pconv_used, tableht_used, tableh1_used) → None[source]

removes some thermal cards

pyNastran.bdf.mesh_utils.remove_unused._store_dresp1(model, ids, nids_used, pids_used)[source]

helper for remove_unused

pyNastran.bdf.mesh_utils.remove_unused._store_elements(card_type, model, ids, nids_used, pids_used, mids_used, cids_used)[source]
pyNastran.bdf.mesh_utils.remove_unused._store_loads(model, unused_card_type, unused_ids, nids_used, eids_used, cids_used)[source]

helper for remove_unused

pyNastran.bdf.mesh_utils.remove_unused._store_masses(card_type, model, ids, nids_used, pids_mass_used, cids_used) → None[source]

handles masses

pyNastran.bdf.mesh_utils.remove_unused._store_nsm(model, ids, pids_used)[source]

helper for remove_unused

pyNastran.bdf.mesh_utils.remove_unused.remove_unused(bdf_filename: str, remove_nids: bool = True, remove_cids: bool = True, remove_pids: bool = True, remove_mids: bool = True, remove_spcs: bool = True, remove_mpcs: bool = True) → pyNastran.bdf.bdf.BDF[source]

Takes an uncross-referenced bdf and removes unused data

removes unused:
  • nodes

  • properties

  • materials

  • coords

  • spcs

  • mpcs

cannot be removed:
  • loads

split_cbars_by_pin_flag Module
defines:
  • model, pin_flag_map = split_cbars_by_pin_flag(

    bdf_filename, pin_flags_filename=None, bdf_filename_out=None)

pyNastran.bdf.mesh_utils.split_cbars_by_pin_flag.split_cbars_by_pin_flag(bdf_filename, pin_flags_filename=None, bdf_filename_out=None, debug=False)[source]

Splits bar elements if they have a pin flag. That way you can each side of the element (A/B) a unique color based on the pin flag. This doesn’t split non-pin flagged bars.

Parameters
bdf_filenamestr; BDF

str : use the read_bdf method BDF : assume it’s a model

pin_flags_filenamestr; default=None

the pin flag file to write this is optional as you may need to define your own map

bdf_filename_outstr; default=None

write the updated deck

debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

Returns
modelBDF()

the BDF object

pin_flag_mapdict[eid]pin_flag
eidint

the element id

pin_flagint

the bar pin flag

pyNastran.bdf.mesh_utils.split_cbars_by_pin_flag.write_pin_flag_map(pin_flag_map, pin_flags_filename)[source]

writes the pin flag map

split_elements Module
defines:
  • split_line_elements(bdf_model, eids, neids=2,

    eid_start=1, nid_start=1)

pyNastran.bdf.mesh_utils.split_elements.split_elements(bdf_filename)[source]

unimplemented method for splitting elements

pyNastran.bdf.mesh_utils.split_elements.split_line_elements(bdf_model, eids, neids=2, eid_start=1, nid_start=1)[source]

Splits a set of element ids

Parameters
eidsList[int]

element ids to split

neidsint; default=5

how many elements should a single bar be split into min=2

eid_startint; default=1

the starting element id

nid_startint; default=1

the starting node id

Returns
eids_outList[int]

the list of elements that have been added

eid_endint; default=1

the final element id

nid_endint; default=1

the final node id

A—–*—–B; neids=2
A–*–B; neids=4
utils Module
defines:

bdf merge (IN_BDF_FILENAMES)… [-o OUT_BDF_FILENAME]

bdf equivalence IN_BDF_FILENAME EQ_TOL

bdf renumber IN_BDF_FILENAME [-o OUT_BDF_FILENAME]

bdf mirror IN_BDF_FILENAME [-o OUT_BDF_FILENAME] [–plane PLANE] [–tol TOL]

bdf export_mcids IN_BDF_FILENAME [-o OUT_GEOM_FILENAME]

bdf split_cbars_by_pin_flags IN_BDF_FILENAME [-o OUT_BDF_FILENAME]

pyNastran.bdf.mesh_utils.utils._union(xval, iunion, ix)[source]

helper method for filter

pyNastran.bdf.mesh_utils.utils.cmd_line(argv=None, quiet=False)[source]

command line interface to multiple other command line scripts

pyNastran.bdf.mesh_utils.utils.cmd_line_bin(argv=None, quiet=False)[source]

bins the model into nbins

pyNastran.bdf.mesh_utils.utils.cmd_line_convert(argv=None, quiet=False)[source]

command line interface to bdf_merge

pyNastran.bdf.mesh_utils.utils.cmd_line_equivalence(argv=None, quiet: bool = False) → None[source]

command line interface to bdf_equivalence_nodes

pyNastran.bdf.mesh_utils.utils.cmd_line_export_caero_mesh(argv=None, quiet=False)[source]

command line interface to export_caero_mesh

pyNastran.bdf.mesh_utils.utils.cmd_line_export_mcids(argv=None, quiet=False)[source]

command line interface to export_mcids

pyNastran.bdf.mesh_utils.utils.cmd_line_filter(argv=None, quiet=False)[source]

command line interface to bdf filter

pyNastran.bdf.mesh_utils.utils.cmd_line_free_faces(argv=None, quiet=False)[source]

command line interface to bdf free_faces

pyNastran.bdf.mesh_utils.utils.cmd_line_merge(argv=None, quiet=False)[source]

command line interface to bdf_merge

pyNastran.bdf.mesh_utils.utils.cmd_line_mirror(argv=None, quiet: bool = False)[source]

command line interface to write_bdf_symmetric

pyNastran.bdf.mesh_utils.utils.cmd_line_renumber(argv=None, quiet=False)[source]

command line interface to bdf_renumber

pyNastran.bdf.mesh_utils.utils.cmd_line_scale(argv=None, quiet=False)[source]
pyNastran.bdf.mesh_utils.utils.cmd_line_split_cbars_by_pin_flag(argv=None, quiet=False)[source]

command line interface to split_cbars_by_pin_flag

pyNastran.bdf.mesh_utils.utils.cmd_line_transform(argv=None, quiet=False)[source]

command line interface to export_caero_mesh

utils Module
defines:

bdf merge (IN_BDF_FILENAMES)… [-o OUT_BDF_FILENAME]

bdf equivalence IN_BDF_FILENAME EQ_TOL

bdf renumber IN_BDF_FILENAME [-o OUT_BDF_FILENAME]

bdf mirror IN_BDF_FILENAME [-o OUT_BDF_FILENAME] [–plane PLANE] [–tol TOL]

bdf export_mcids IN_BDF_FILENAME [-o OUT_GEOM_FILENAME]

bdf split_cbars_by_pin_flags IN_BDF_FILENAME [-o OUT_BDF_FILENAME]

pyNastran.bdf.mesh_utils.utils._union(xval, iunion, ix)[source]

helper method for filter

pyNastran.bdf.mesh_utils.utils.cmd_line(argv=None, quiet=False)[source]

command line interface to multiple other command line scripts

pyNastran.bdf.mesh_utils.utils.cmd_line_bin(argv=None, quiet=False)[source]

bins the model into nbins

pyNastran.bdf.mesh_utils.utils.cmd_line_convert(argv=None, quiet=False)[source]

command line interface to bdf_merge

pyNastran.bdf.mesh_utils.utils.cmd_line_equivalence(argv=None, quiet: bool = False) → None[source]

command line interface to bdf_equivalence_nodes

pyNastran.bdf.mesh_utils.utils.cmd_line_export_caero_mesh(argv=None, quiet=False)[source]

command line interface to export_caero_mesh

pyNastran.bdf.mesh_utils.utils.cmd_line_export_mcids(argv=None, quiet=False)[source]

command line interface to export_mcids

pyNastran.bdf.mesh_utils.utils.cmd_line_filter(argv=None, quiet=False)[source]

command line interface to bdf filter

pyNastran.bdf.mesh_utils.utils.cmd_line_free_faces(argv=None, quiet=False)[source]

command line interface to bdf free_faces

pyNastran.bdf.mesh_utils.utils.cmd_line_merge(argv=None, quiet=False)[source]

command line interface to bdf_merge

pyNastran.bdf.mesh_utils.utils.cmd_line_mirror(argv=None, quiet: bool = False)[source]

command line interface to write_bdf_symmetric

pyNastran.bdf.mesh_utils.utils.cmd_line_renumber(argv=None, quiet=False)[source]

command line interface to bdf_renumber

pyNastran.bdf.mesh_utils.utils.cmd_line_scale(argv=None, quiet=False)[source]
pyNastran.bdf.mesh_utils.utils.cmd_line_split_cbars_by_pin_flag(argv=None, quiet=False)[source]

command line interface to split_cbars_by_pin_flag

pyNastran.bdf.mesh_utils.utils.cmd_line_transform(argv=None, quiet=False)[source]

command line interface to export_caero_mesh

pyNastran/op2

This is the pyNastran.op2.rst file.

errors Module

Inheritance diagram of pyNastran.op2.errors
exception pyNastran.op2.errors.DeviceCodeError[source]

Bases: SyntaxError

exception pyNastran.op2.errors.FortranMarkerError[source]

Bases: Exception

exception pyNastran.op2.errors.MixedVersionCard[source]

Bases: RuntimeError

exception pyNastran.op2.errors.MultipleSolutionNotImplementedError[source]

Bases: NotImplementedError

exception pyNastran.op2.errors.OverwriteTableError[source]

Bases: RuntimeError

exception pyNastran.op2.errors.SixtyFourBitError[source]

Bases: NotImplementedError

exception pyNastran.op2.errors.SortCodeError[source]

Bases: RuntimeError

pyNastran/op2

pyNastran/op2/op2

This is the pyNastran.op2.op2.rst file.

op2 Module
Inheritance diagram of pyNastran.op2.op2

Defines the main OP2 class. Defines:

  • read_op2(op2_filename=None, combine=True, subcases=None,

    exclude_results=None, include_results=None, log=None, debug=True, debug_file=None, build_dataframe=None, skip_undefined_matrices=True, mode=’msc’, encoding=None)

  • OP2(debug=True, log=None, debug_file=None, mode=’msc’) - build_dataframe() - combine_results(combine=True) - create_objects_from_matrices() - object_attributes(mode=’public’, keys_to_skip=None, filter_properties=False) - object_methods(mode=’public’, keys_to_skip=None) - print_subcase_key() - read_op2(op2_filename=None, combine=True, build_dataframe=None,

    skip_undefined_matrices=False, encoding=None)

    • set_mode(mode)

    • transform_displacements_to_global(i_transform, coords, xyz_cid0=None, debug=False)

    • transform_gpforce_to_global(nids_all, nids_transform, i_transform, coords, xyz_cid0=None)

class pyNastran.op2.op2.OP2(debug: bool = True, log: Optional[Any] = None, debug_file: Optional[str] = None, mode: Optional[str] = None)[source]

Bases: pyNastran.op2.op2_interface.op2_scalar.OP2_Scalar, pyNastran.op2.writer.op2_writer.OP2Writer

Initializes the OP2 object

Parameters
debugbool; default=False

enables the debug log and sets the debug in the logger

logLog()

a logging object to write debug messages to

(.. seealso:: import logging)

debug_filestr; default=None (No debug)

sets the filename that will be written to

modestr; default=None -> ‘msc’

{msc, nx}

assert_op2_equal(op2_model, skip_results: Optional[List[str]] = None, stop_on_failure: bool = True, debug: bool = False) → None[source]

Diffs the current op2 model vs. another op2 model.

Parameters
op2_modelOP2()

the model to compare to

skip_resultsList[str]; default=None -> []

results that shouldn’t be compred

stop_on_failurebool; default=True

True : Crashes if they’re not equal False : Go to the next object

debugbool; default=False

give slightly more debugging messages

Returns
is_equalbool

are the objects equal?

Raises
AssertionError/ValueErrorstop_on_failure=True and and error occurred
NotImplementedErrorthis is a sign of an unsupported object
build_dataframe() → None[source]

Converts the OP2 objects into pandas DataFrames

Todo

fix issues with: - RealDisplacementArray - RealPlateStressArray (???) - RealPlateStrainArray (???) - RealCompositePlateStrainArray (???)

combine_results(combine: str = True) → None[source]

we want the data to be in the same format and grouped by subcase, so we take

stress = {
    # isubcase, analysis_code, sort_method, count, superelement_adaptivity_index, pval_step
    (1, 2, 1, 0, 'SUPERELEMENT 0', '') : result1,
    (1, 2, 1, 0, 'SUPERELEMENT 10', '') : result2,
    (1, 2, 1, 0, 'SUPERELEMENT 20', '') : result3,
    (2, 2, 1, 0, 'SUPERELEMENT 0', '') : result4,

code = (isubcase, analysis_code, sort_method, count, ogs,
        superelement_adaptivity_index, pval_step)
  }

and convert it to:

stress = {
    1 : result1 + result2 + results3,
    2 : result4,
}
create_objects_from_matrices() → None[source]
creates the following objects:
  • monitor3 : MONPNT3 object from the MP3F matrix

  • monitor1 : MONPNT1 object from the PMRF, PERF, PFRF, AGRF, PGRF, AFRF matrices

export_hdf5(hdf5_filename: str) → None[source]

Converts the OP2 objects into hdf5 object

export_hdf5_file(hdf5_file: H5File, exporter=None) → None[source]

Converts the OP2 objects into hdf5 object

Parameters
hdf5_fileH5File()

an h5py object

exporterHDF5Exporter; default=None

unused

TODO: doesn’t support:
  • BucklingEigenvalues

export_hdf5_filename(hdf5_filename: str) → None[source]

Converts the OP2 objects into hdf5 object

TODO: doesn’t support:
  • BucklingEigenvalues

get_key_order() → List[Tuple[int, int, int, int, int, str]][source]
Returns
keys3List[int, int, int, int, int, str]

the keys in order

include_exclude_results(exclude_results: Optional[List[str]] = None, include_results: Optional[List[str]] = None) → None[source]

Sets results to include/exclude

Parameters
exclude_results / include_resultsList[str] / str; default=None

a list of result types to exclude/include one of these must be None

property is_geometry
load(obj_filename: str = 'model.obj') → None[source]

Loads a pickleable object

load_hdf5(hdf5_filename: str, combine: bool = True) → None[source]

Loads an h5 file into an OP2 object

load_hdf5_file(h5_file: H5File, combine: bool = True) → None[source]

Loads an h5 file object into an OP2 object

Parameters
h5_fileH5File()

an h5py file object

combinebool; default=True

runs the combine routine

load_hdf5_filename(hdf5_filename: str, combine: bool = True) → None[source]

Loads an h5 file into an OP2 object

Parameters
hdf5_filenamestr

the path to the an hdf5 file

combinebool; default=True

runs the combine routine

object_attributes(mode: str = 'public', keys_to_skip: Optional[List[str]] = None, filter_properties: bool = False) → List[str][source]

List the names of attributes of a class as strings. Returns public attributes as default.

Parameters
modestr

defines what kind of attributes will be listed * ‘public’ - names that do not begin with underscore * ‘private’ - names that begin with single underscore * ‘both’ - private and public * ‘all’ - all attributes that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
attribute_namesList[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

object_methods(mode: str = 'public', keys_to_skip: Optional[List[str]] = None) → List[str][source]

List the names of methods of a class as strings. Returns public methods as default.

Parameters
objinstance

the object for checking

modestr

defines what kind of methods will be listed * “public” - names that do not begin with underscore * “private” - names that begin with single underscore * “both” - private and public * “all” - all methods that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
methodList[str]

sorted list of the names of methods of a given type or None if the mode is wrong

print_subcase_key() → None[source]
read_op2(op2_filename: Optional[str] = None, combine: bool = True, build_dataframe: Optional[bool] = None, skip_undefined_matrices: bool = False, encoding: Optional[str] = None) → None[source]

Starts the OP2 file reading

Parameters
op2_filenamestr (default=None -> popup)

the op2_filename

combinebool; default=True

True : objects are isubcase based False : objects are (isubcase, subtitle) based;

will be used for superelements regardless of the option

#load_as_h5default=False

#loads the op2 as an h5 file to save memory #stores the result.element/data attributes in h5 format

build_dataframebool (default=None -> True if in iPython, False otherwise)

builds a pandas DataFrame for op2 objects

skip_undefined_matricesbool; default=False

True : prevents matrix reading crashes

encodingstr

the unicode encoding (default=None; system default)

save(obj_filename: str = 'model.obj', unxref: bool = True) → None[source]

Saves a pickleable object

saves() → str[source]

Saves a pickled string

set_mode(mode: str) → None[source]

Sets the mode as ‘msc’, ‘nx’, ‘autodesk’, ‘nasa95’, or ‘optistruct’

to_msc(msg='') → None[source]
to_nx(msg='') → None[source]
transform_displacements_to_global(icd_transform: Any, coords: Dict[int, Any], xyz_cid0: Optional[Any] = None, debug: bool = False) → None[source]

Transforms the data of displacement-like results into the global coordinate system for those nodes with different output coordinate systems. Takes indicies and transformation matricies for nodes with their output in coordinate systems other than the global.

Used in combination with BDF.get_displacement_index

Parameters
icd_transformdict{int cidint ndarray}

Dictionary from coordinate id to index of the nodes in BDF.point_ids that their output (CD) in that coordinate system.

coordsdict{int cid :Coord()}

Dictionary of coordinate id to the coordinate object Use this if CD is only rectangular Use this if CD is not rectangular

xyz_cid0(nnodes+nspoints, 3) float ndarray

the nodes in the global frame Don’t use this if CD is only rectangular Use this if CD is not rectangular

debugbool; default=False

developer debug

.. warning:: only works if all nodes are included…

test_pynastrangui isat_tran.dat isat_tran.op2 -f nastran

.. note:: Nastran has this concept of a basic (cid=0) and global (cid=cd)

coordinate system. They occur at the same time. Basic is for positions/properties, while global is for result outputs.

pyNastran’s OP2 interface uses:
  • cd=0 for global frames

  • cd>0 are local frames

pyNastran’s BDF interface uses:
  • cp=0 for global frames

  • cp>0 are local frames

transform_gpforce_to_global(nids_all, nids_transform, icd_transform, coords, xyz_cid0=None)[source]

Transforms the data of GPFORCE results into the global coordinate system for those nodes with different output coordinate systems. Takes indicies and transformation matricies for nodes with their output in coordinate systems other than the global.

Used in combination with BDF.get_displacement_index

Parameters
nids_all???

???

nids_transformdict{int cidint ndarray nds}

Dictionary from coordinate id to corresponding node ids.

icd_transformdict{int cidint ndarray}

Dictionary from coordinate id to index of the nodes in BDF.point_ids that their output (CD) in that coordinate system.

coordsdict{int cid :Coord()}

Dictionary of coordinate id to the coordinate object Use this if CD is only rectangular Use this if CD is not rectangular

xyz_cid0???

required for cylindrical/spherical coordinate systems

pyNastran.op2.op2.read_op2(op2_filename: Optional[str] = None, combine: bool = True, subcases: Optional[List[int]] = None, exclude_results: Optional[List[str]] = None, include_results: Optional[List[str]] = None, log: Optional[Any] = None, debug: bool = True, debug_file: Optional[str] = None, build_dataframe: Optional[bool] = None, skip_undefined_matrices: bool = True, mode: Optional[str] = None, encoding: Optional[str] = None) → pyNastran.op2.op2.OP2[source]

Creates the OP2 object without calling the OP2 class.

Parameters
op2_filenamestr (default=None -> popup)

the op2_filename

combinebool; default=True

True : objects are isubcase based False : objects are (isubcase, subtitle) based;

will be used for superelements regardless of the option

subcasesList[int, …] / int; default=None->all subcases

list of [subcase1_ID,subcase2_ID]

exclude_results / include_resultsList[str] / str; default=None

a list of result types to exclude/include one of these must be None

build_dataframebool (default=None -> True if in iPython, False otherwise)

builds a pandas DataFrame for op2 objects

skip_undefined_matricesbool; default=False

True : prevents matrix reading crashes

debugbool; default=False

enables the debug log and sets the debug in the logger

logLog()

a logging object to write debug messages to (.. seealso:: import logging)

modestr; default=None -> ‘msc’

the version of the Nastran you’re using {nx, msc, autodesk, optistruct}

debug_filestr; default=None (No debug)

sets the filename that will be written to

encodingstr

the unicode encoding (default=None; system default)

Returns
modelOP2()

an OP2 object

Todo

creates the OP2 object without all the read methods ..

.. note: this method will change in order to return an object that

does not have so many methods

pyNastran/op2/op2_geom

This is the pyNastran.op2.op2_geom.rst file.

op2_geom Module
Inheritance diagram of pyNastran.op2.op2_geom
Defines:
  • read_op2_geom(op2_filename=None, combine=True, subcases=None,

    exclude_results=None, include_results=None, validate=True, xref=True, build_dataframe=False, skip_undefined_matrices=True, mode=’msc’, log=None, debug=True, debug_file=None, encoding=None)

  • OP2Geom(make_geom=True, debug=False, log=None, debug_file=None, mode=’msc’) - OP2

class pyNastran.op2.op2_geom.OP2Geom(make_geom: bool = True, debug: bool = False, log: Optional[Any] = None, debug_file: Optional[str] = None, mode: str = 'msc')[source]

Bases: pyNastran.bdf.bdf.BDF, pyNastran.op2.op2_geom.OP2GeomCommon

creates an interface for the OP2 and BDF classes

Initializes the OP2 object

Parameters
make_geombool; default=False

reads the BDF tables

debugbool; default=False

enables the debug log and sets the debug in the logger

log: log()

a logging object to write debug messages to (.. seealso:: import logging)

debug_filedefault=None -> no debug

sets the filename that will be written to

modestr; default=’msc’

{msc, nx}

export_hdf5_file(hdf5_file, exporter=None)[source]

Converts the OP2 objects into hdf5 object

Parameters
hdf5_fileH5File()

an h5py object

exporterHDF5Exporter; default=None

unused

TODO: doesn’t support:
  • BucklingEigenvalues

gpdt_to_nodes()[source]

converts the GPDT & EQEXIN tables to node ids

property is_geometry
read_op2(op2_filename: Union[str, pathlib.PurePath, None] = None, combine: bool = True, build_dataframe=None, skip_undefined_matrices: bool = False, encoding: Optional[str] = None)[source]

see OP2.read_op2

class pyNastran.op2.op2_geom.OP2GeomCommon(make_geom: bool = True, debug: bool = False, log: Optional[Any] = None, debug_file: Optional[str] = None, mode: Optional[str] = None)[source]

Bases: pyNastran.op2.op2.OP2, pyNastran.op2.tables.geom.geom1.GEOM1, pyNastran.op2.tables.geom.geom2.GEOM2, pyNastran.op2.tables.geom.geom3.GEOM3, pyNastran.op2.tables.geom.geom4.GEOM4, pyNastran.op2.tables.geom.ept.EPT, pyNastran.op2.tables.geom.mpt.MPT, pyNastran.op2.tables.geom.edt.EDT, pyNastran.op2.tables.geom.edom.EDOM, pyNastran.op2.tables.geom.dit.DIT, pyNastran.op2.tables.geom.dynamics.DYNAMICS, pyNastran.op2.tables.geom.axic.AXIC

interface for the OP2Geom class for to loading subclasses

Initializes the OP2 object

Parameters
make_geombool; default=False

reads the BDF tables

debugbool; default=False

enables the debug log and sets the debug in the logger

log: log()

a logging object to write debug messages to (.. seealso:: import logging)

debug_filedefault=None -> no debug

sets the filename that will be written to

modestr; default=None -> ‘msc’

{msc, nx}

save(obj_filename: str = 'model.obj', unxref: bool = True) → None[source]

Saves a pickleable object

pyNastran.op2.op2_geom.attach_op2_results_to_bdf(bdf_model: pyNastran.bdf.bdf.BDF, op2_model: Optional[pyNastran.op2.op2.OP2] = None, validate: bool = True) → pyNastran.op2.op2_geom.OP2Geom[source]

We’re up-converting a BDF and an OP2 result into an OP2Geom object.

pyNastran.op2.op2_geom.bdf_to_op2_geom(model: pyNastran.bdf.bdf.BDF, validate: bool = True) → pyNastran.op2.op2_geom.OP2Geom[source]

converts a BDF() -> OP2Geom()

pyNastran.op2.op2_geom.read_op2_geom(op2_filename: Optional[Union[str, PurePath]] = None, combine: bool = True, subcases: Optional[List[int]] = None, exclude_results: Optional[List[str]] = None, include_results: Optional[List[str]] = None, validate: bool = True, xref: bool = True, build_dataframe: bool = False, skip_undefined_matrices: bool = True, mode: str = 'msc', log: SimpleLogger = None, debug: bool = True, debug_file: Optional[str] = None, encoding: Optional[str] = None)[source]

Creates the OP2 object without calling the OP2 class.

Parameters
op2_filenamestr (default=None -> popup)

the op2_filename

combinebool; default=True

True : objects are isubcase based False : objects are (isubcase, subtitle) based;

will be used for superelements regardless of the option

subcasesList[int, …] / int; default=None->all subcases

list of [subcase1_ID,subcase2_ID]

exclude_results / include_resultsList[str] / str; default=None

a list of result types to exclude/include one of these must be None

validatebool

runs various checks on the BDF (default=True)

xrefbool

should the bdf be cross referenced (default=True)

build_dataframebool; default=False

builds a pandas DataFrame for op2 objects

skip_undefined_matricesbool; default=False

True : prevents matrix reading crashes

logLog()

a logging object to write debug messages to

(.. seealso:: import logging)

debugbool; default=False

enables the debug log and sets the debug in the logger

debug_filestr; default=None (No debug)

sets the filename that will be written to

encodingstr

the unicode encoding (default=None; system default)

Returns
modelOP2()

an OP2 object

Todo

creates the OP2 object without all the read methods ..

.. note: this method will change in order to return an object that

does not have so many methods

data_in_material_coord Package
data_in_material_coord Module
Defines:
  • data_in_material_coord(bdf, op2, in_place=False)

pyNastran.op2.data_in_material_coord.angle2vec(v1: numpy.ndarray, v2: numpy.ndarray) → numpy.ndarray[source]

Using the definition of the dot product to get the angle

v1 o v2 = |v1| * |v2| * cos(theta) theta = np.arccos( (v1 o v2) / (|v1|*|v2|))

pyNastran.op2.data_in_material_coord.calc_imat(normals: numpy.ndarray, csysi: numpy.ndarray) → numpy.ndarray[source]

Calculates the i vector in the material coordinate system.

j = k x ihat jhat = j / |j| i = jhat x k

Notes

i is not a unit vector because k (the element normal) is not a unit vector.

pyNastran.op2.data_in_material_coord.check_theta(elem) → float[source]
pyNastran.op2.data_in_material_coord.data_in_material_coord(bdf: BDF, op2: OP2, in_place: bool = False, debug: bool = False) → OP2[source]

Convert OP2 2D element outputs to material coordinates

Nastran allows the use of ‘PARAM,OMID,YES’ to print 2D element forces, stresses and strains based on the material direction. However, the conversion only takes place in the F06 output file, whereas the OP2 output file remains in the element coordinate system.

This function converts the 2D element vectors to the material OP2 similarly to most of the post-processing tools (Patran, Femap, HyperView, etc). It handles both 2D elements with MCID or THETA.

Parameters
bdfBDF object

A BDF object that corresponds to the ‘op2’.

op2OP2 object

A OP2 object that corresponds to the ‘bdf’.

in_placebool; default=False

If true the original op2 object is modified, otherwise a new one is created.

Returns
op2_newOP2 object

A OP2 object with the abovementioned changes.

.. warning: doesn’t handle composite stresses/strains/forces
.. warning: doesn’t handle solid stresses/strains/forces (e.g. MAT11)
.. warning: zeros out data for CQUAD8s
pyNastran.op2.data_in_material_coord.get_eids_from_op2_vector(vector)[source]

Obtain the element ids for a given op2 vector

Parameters
vectorop2 vector

An op2 vector obtained, for example, doing:

vector = op2.cquad4_force[1]
vector = op2.cquad8_stress[1]
vector = op2.ctriar_force[1]
vector = op2.ctria3_stress[1]
pyNastran.op2.data_in_material_coord.is_mcid(elem)[source]

Determines if the element uses theta or the mcid (projected material coordinate system)

Parameters
elemvaries

an element object CQUAD4, CQUAD8, CQUADR CTRIA3, CTRIA6, CTRIAR

Returns
is_mcidbool

the projected material coordinate system is used

pyNastran.op2.data_in_material_coord.thetadeg_to_principal(Sxx: numpy.ndarray, Syy: numpy.ndarray, Sxy: numpy.ndarray) → numpy.ndarray[source]

Calculate the angle to the principal plane stress state

Parameters
Sxx, Syy, Sxyarray-like

Sigma_xx, Sigma_yy, Sigma_xy stresses.

Returns
thetadegnp.ndarray

Array with angles for which the given stresses are transformed to the principal stress state.

pyNastran.op2.data_in_material_coord.transf_Mohr(Sxx: numpy.ndarray, Syy: numpy.ndarray, Sxy: numpy.ndarray, theta_rad: numpy.ndarray) → Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray][source]

Mohr’s Circle-based Plane Stress Transformation

Parameters
Sxx, Syy, Sxyarray-like

Sigma_xx, Sigma_yy, Sigma_xy stresses.

thetaradarray-like

Array with angles for which the stresses should be transformed.

Returns
Sxx_theta, Syy_theta, Sxy_thetanp.ndarray

Transformed stresses.

export_to_vtk Package
export_to_vtk Module
pyNastran.op2.export_to_vtk.export_to_vtk(model_name: str) → None[source]
pyNastran.op2.export_to_vtk.export_to_vtk_filename(bdf_filename: str, op2_filename: str, vtk_filename: str, debug: bool = False, log=None) → None[source]

exports a BDF/OP2 to VTK

pyNastran.op2.export_to_vtk.pack_float_1d_array(fmt, data)[source]
pyNastran.op2.export_to_vtk.pack_float_2d_array(fmt, data)[source]
pyNastran.op2.export_to_vtk.pack_float_3d_array(fmt, data)[source]
pyNastran.op2.export_to_vtk.pack_int_array(fmt, data)[source]
pyNastran/op2/fortran_format

This is the pyNastran.op2.fortran_format.rst file.

fortran_format Module
Inheritance diagram of pyNastran.op2.fortran_format
Defines:
  • FortranFormat

class pyNastran.op2.fortran_format.FortranFormat[source]

Bases: object

defines basic methods for reading Fortran formatted data files

is_all_subcases = None

stores if the user entered [] for isubcases

show(n: int, types: str = 'ifs', endian=None, force: bool = False)[source]

Shows binary data

show_data(data, types: str = 'ifs', endian=None, force: bool = False)[source]

Shows binary data

show_ndata(n: int, types: str = 'ifs', force: bool = False)[source]
pyNastran/op2/op2_helper

This is the pyNastran.op2.op2_helper.rst file.

op2_helper Module
defines:
  • polar_to_real_imag

  • real_imag_to_mag_phase

pyNastran.op2.op2_helper.polar_to_real_imag(mag, phase)[source]

Converts magnitude-phase to real-imaginary so all complex results are consistent

Parameters
magfloat

magnitude c^2

phasefloat

phase angle phi (degrees; theta)

Returns
real_valuefloat

the real component a of a+bi

imag_valuefloat

the imaginary component b of a+bi

pyNastran.op2.op2_helper.real_imag_to_mag_phase(real_imag)[source]

returns the magnitude and phase (degrees) of a complex number

pyNastran/op2/vector_utils

This is the pyNastran.op2.vector_utils.rst file.

vector_utils Module
defines some methods for working with arrays:
  • filter1d(a, b=None, zero_tol=0.001)

  • where_searchsorted(a, v, side=’left’, x=None, y=None)

  • sortedsum1d(ids, values, axis=None)

  • iformat(format_old, precision=2)

  • abs_max_min_global(values)

  • abs_max_min_vector(values)

  • abs_max_min(values, global_abs_max=True)

  • principal_3d(o11, o22, o33, o12, o23, o13)

  • transform_force(force_in_local,

    coord_out, coords, nid_cd, i_transform)

  • transform_force_moment(force_in_local, moment_in_local,

    coord_out, coords, nid_cd, i_transform, xyz_cid0, summation_point_cid0=None, consider_rxf=True, debug=False, log=None)

  • transform_force_moment_sum(force_in_local, moment_in_local,

    coord_out, coords, nid_cd, i_transform, xyz_cid0, summation_point_cid0=None, consider_rxf=True, debug=False, log=None)

pyNastran.op2.vector_utils.abs_max_min(values, global_abs_max=True)[source]

Gets the maximum value of x and -x. This is used for getting the max/min principal stress.

pyNastran.op2.vector_utils.abs_max_min_global(values)[source]

This is useful for figuring out absolute max or min principal stresses across single/multiple elements and finding a global max/min value.

Parameters
values: ndarray/listtuple

an ND-array of values; common NDARRAY/list/tuple shapes:

  1. [nprincipal_stresses]

  2. [nelements, nprincipal_stresses]

Returns
abs_max_mins: int/float

an array of the max or min principal stress don’t input mixed types

nvalues >= 1
>>> element1 = [0.0, -1.0, 2.0]  # 2.0
>>> element2 = [0.0, -3.0, 2.0]  # -3.0
>>> values = abs_max_min_global([element1, element2])
>>> values
-3.0
>>> element1 = [0.0, -1.0, 2.0]  # 2.0
>>> values = abs_max_min_global([element1])
>>> values
2.0

Note

[3.0, 2.0, -3.0] will return 3.0, and [-3.0, 2.0, 3.0] will return 3.0

pyNastran.op2.vector_utils.abs_max_min_vector(values)[source]

This is useful for figuring out principal stresses across multiple elements.

Parameters
values: ndarray/listtuple

an array of values, where the rows are iterated over and the columns are going to be compressed

common NDARRAY/list/tuple shapes:
  1. [nprincipal_stresses]

  2. [nelements, nprincipal_stresses]

Returns
abs_max_mins: NDARRAY shape=[nelements] with dtype=values.dtype

an array of the max or min principal stress don’t input mixed types

::
>>> element1 = [0.0,  1.0, 2.0]  # 2.0
>>> element2 = [0.0, -1.0, 2.0]  # 2.0
>>> element3 = [0.0, -3.0, 2.0]  # -3.0
>>> values = [element1 element2, element3]
>>> values0 = abs_max_min_vectorized(values)
>>> values0
[2.0, 2.0, -3.0]

Note

[3.0, 2.0, -3.0] will return 3.0, and [-3.0, 2.0, 3.0] will return 3.0

pyNastran.op2.vector_utils.filter1d(a: numpy.ndarray, b: Optional[numpy.ndarray] = None, zero_tol: float = 0.001)[source]

Filters a 1d numpy array of values near 0.

Parameters
a(n, ) float ndarray

a vector to compare

b(n, ) float ndarray; default=None

another vector to compare If b is defined, both a and b must be near 0 for a value to be removed.

zero_tolfloat; default=0.001

the zero tolerance value

Returns
k(m, ) int ndarray

the indices of the removed values

a = [1., 2., 0.1]
>>> i = filter(a, zero_tol=0.5)
    ..
a[i]
>>> [0, 1]
    ..
a = [1., 2., 0.1]
b = [1., -0.1, 0.1]
>>> i = filter(a, b, zero_tol=0.5)
    ..
[0, 1]
pyNastran.op2.vector_utils.iformat(format_old: str, precision: int = 2) → str[source]

Converts binary data types to size vector arrays.

Parameters
format_oldstr

the int/float data types in single precision format

precisionint; default=2

the precision to convert to 1 : single precision (no conversion) 2 : double precision

Returns
format_newstr

the int/float data types in single/double precision format

Examples

>>> iformat('8i6f10s', precision=1)
'8i6f10s'
>>> iformat('8i6f10s', precision=2)
'8l6d10q'
pyNastran.op2.vector_utils.principal_3d(o11, o22, o33, o12, o23, o13)[source]

http://www.continuummechanics.org/cm/principalstrain.html

pyNastran.op2.vector_utils.sortedsum1d(ids, values, axis=None)[source]

Sums the values in a sorted 1d/2d array.

Parameters
ids(n, ) int ndarray

the integer values in a sorted order that indicate what is to be summed

values(n, m) float ndarray

the values to be summed Presumably m is 2 because this function is intended to be used for summing forces and moments

axisNone or int or tuple of ints, optional

Axis or axes along which a sum is performed. The default (axis=None) is perform a sum over all the dimensions of the input array. axis may be negative, in which case it counts from the last to the first axis. If this is a tuple of ints, a sum is performed on multiple axes, instead of a single axis or all the axes as before.

Not actually supported…

Returns
out(nunique, m) float ndarray

the summed values

Examples

1D Example For an set of arrays, there are 5 values in sorted order.

..code-block :: python

ids = [1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5] values = 1.0 * ids

We want to sum the values such that: ..code-block :: python

out = [2.0, 4.0, 9.0, 4.0, 15.0]

2D Example ..code-block :: python

ids = [1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5] values = [

[1.0, 1.0, 2.0, 2.0, 3.0, 3.0], [1.0, 1.0, 2.0, 2.0, 3.0, 3.0],

]

values = 1.0 * ids For 2D

Todo

This could probably be more efficient

Todo

Doesn’t support axis

pyNastran.op2.vector_utils.transform_force(force_in_local, coord_out: CORDx, coords: Dict[int, CORDx], nid_cd: int, unused_icd_transform)[source]

Transforms force/moment from global to local and returns all the forces.

Supports cylindrical/spherical coordinate systems.

Parameters
force(N, 3) ndarray

forces in the local frame

coord_outCORD()

the desired local frame

coordsdict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd(M, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transformdict[cd] = (Mi, ) int ndarray

the mapping for nid_cd

.. warning:: the function signature will change…
.. todo:: sum of moments about a point must have an rxF term to get the

same value as Patran.

Fglobal = Flocal @ T
Flocal = T.T @ Fglobal
Flocal2 = T2.T @ (Flocal1 @ T1)
pyNastran.op2.vector_utils.transform_force_moment(force_in_local, moment_in_local, coord_out: CORDx, coords: Dict[int, CORDx], nid_cd: int, icd_transform: Dict[int, ndarray], xyz_cid0: ndarray, summation_point_cid0: Optional[NDArray3float] = None, consider_rxf: bool = True, debug: bool = False, log: Optional[SimpleLogger] = None)[source]

Transforms force/moment from global to local and returns all the forces.

Parameters
force_in_local(N, 3) ndarray

forces in the local frame

moment_in_local(N, 3) ndarray

moments in the local frame

coord_outCORDx()

the desired local frame

coordsdict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd(M, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transformdict[cd] = (Mi, ) int ndarray

the mapping for nid_cd

xyz_cid0(n, 3) ndarray

the nodes in the global frame

summation_point_cid0(3, ) ndarray

the summation point in the global frame???

consider_rxfbool; default=True

considers the r x F term

debugbool; default=False

debugging flag

loglog; default=None

a log object that gets used when debug=True

Returns
force_out(n, 3) float ndarray

the ith float components in the coord_out coordinate frame

moment_out(n, 3) float ndarray

the ith moment components about the summation point in the coord_out coordinate frame

Todo

doesn’t seem to handle cylindrical/spherical systems ..

https://flexiblelearning.auckland.ac.nz/sportsci303/13_3/forceplate_manual.pdf
xyz0 = T_1_to_0 @ xyz1
xyz1 = T_1_to_0.T @ xyz0
xyz2 = T_2_to_0.T @ xyz0
xyz2 = T_2_to_0.T @ T_1_to_0 @ xyz1
xyz_g = T_a2g @ xyz_a
xyz_g = T_b2g @ xyz_b
T_b2g @ xyz_b = T_a2g @ xyz_a
xyz_b = T_b2g.T @ T_a2g @ xyz_a = T_g2b @ T_a2g @ xyz_a
pyNastran.op2.vector_utils.transform_force_moment_sum(force_in_local: NDArrayN3float, moment_in_local: NDArrayN3float, coord_out: CORDx, coords: Dict[int, CORDx], nid_cd: NDArrayN2int, icd_transform: Dict[int, NDArrayNint], xyz_cid0, summation_point_cid0=None, consider_rxf=True, debug=False, log=None)[source]

Transforms force/moment from global to local and returns a sum of forces/moments.

Parameters
force_in_local(N, 3) ndarray

forces in the local frame

moment_in_local(N, 3) ndarray

moments in the local frame

coord_outCORDx()

the desired local frame

coordsdict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd(M, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transformdict[cd] = (Mi, ) int ndarray

the mapping for nid_cd

xyz_cid0(nnodes + nspoints + nepoints, 3) ndarray

the grid locations in coordinate system 0

summation_point_cid0(3, ) ndarray

the summation point in the global frame

consider_rxfbool; default=True

considers the r x F term

debugbool; default=False

debugging flag

loglog; default=None

a log object that gets used when debug=True

Returns
force_out(n, 3) float ndarray

the ith float components in the coord_out coordinate frame

moment_out(n, 3) float ndarray

the ith moment components about the summation point in the coord_out coordinate frame

force_out_sum(3, ) float ndarray

the sum of forces in the coord_out coordinate frame

moment_out_sum(3, ) float ndarray

the sum of moments about the summation point in the coord_out coordinate frame

Todo

doesn’t seem to handle cylindrical/spherical systems ..

pyNastran.op2.vector_utils.where_searchsorted(a, v, side='left', x=None, y=None)[source]

Implements a np.where that assumes a sorted array set.

pyNastran/op2/op2_interface

op2_interface Package
op2_codes Module
Inheritance diagram of pyNastran.op2.op2_interface.op2_codes
pyNastran.op2.op2_interface.op2_codes.determine_sort_bits_meaning(table_code: int, sort_code: int, sort_bits: Tuple[int, int, int]) → Tuple[int, bool, bool][source]

Value Sort type Data format Random ===== ========= =========== ====== 0 SORT1 Real No 1 SORT1 Complex No 2 SORT2 Real No 3 SORT2 Complex No 4 SORT1 Real Yes 5 SORT2 ??? Yes 6 SORT2 Real Yes

table_code%1000 = function3()

SPCForce = table_code % 1000 (function 3)

pyNastran.op2.op2_interface.op2_codes.get_format_word(format_code: int) → str[source]
pyNastran.op2.op2_interface.op2_codes.get_scode_word(s_code: int, stress_bits: List[int]) → str[source]
pyNastran.op2.op2_interface.op2_codes.get_scode_word_assert(s_code: int, stress_bits: List[int]) → str[source]
pyNastran.op2.op2_interface.op2_codes.get_sort_method_from_table_name(table_name: bytes) → int[source]

helper method

pyNastran.op2.op2_interface.op2_codes.get_table_from_table_code(table_code: int, table_name: str, is_msc: bool = True) → str[source]

translates that a key of say 1 is the ‘OUG - Displacement vector’ table

op2_f06_common Module
Inheritance diagram of pyNastran.op2.op2_interface.op2_f06_common
class pyNastran.op2.op2_interface.op2_f06_common.OP2_F06_Common[source]

Bases: object

property cbar_force
property cbar_force_10nodes
property cbar_strain_energy
property cbeam_force
property cbeam_force_vu
property cbeam_strain_energy
property cbear_force
property cbend_force
property cbend_strain_energy
property cbush_force
property cbush_strain_energy
property cconeax_force
property cdamp1_force
property cdamp1_strain_energy
property cdamp2_force
property cdamp2_strain_energy
property cdamp3_force
property cdamp3_strain_energy
property cdamp4_force
property cdamp4_strain_energy
property cdum8_strain_energy
property celas1_force
property celas1_strain
property celas1_strain_energy
property celas1_stress
property celas2_force
property celas2_strain
property celas2_strain_energy
property celas2_stress
property celas3_force
property celas3_strain
property celas3_strain_energy
property celas3_stress
property celas4_force
property celas4_strain
property celas4_strain_energy
property celas4_stress
property cfast_force
property cgap_force
property cgap_strain_energy
property chexa_pressure_force
property chexa_strain
property chexa_strain_energy
property chexa_stress
property conm2_strain_energy
property conrod_force
property conrod_strain_energy
property cpenta_pressure_force
property cpenta_strain
property cpenta_strain_energy
property cpenta_stress
property cpyram_pressure_force
property cpyram_strain
property cpyram_strain_energy
property cpyram_stress
property cquad4_force
property cquad4_strain_energy
property cquad8_force
property cquad8_strain_energy
property cquadr_force
property cquadr_strain_energy
property cquadx_strain_energy
property crod_force
property crod_strain_energy
property cshear_force
property cshear_strain_energy
property ctetra_pressure_force
property ctetra_strain
property ctetra_strain_energy
property ctetra_stress
property ctria3_force
property ctria3_strain_energy
property ctria6_force
property ctria6_strain_energy
property ctriar_force
property ctriar_strain_energy
property ctriax6_strain_energy
property ctriax_strain_energy
property ctube_force
property ctube_strain_energy
property cvisc_force
property cweld_force
del_result(result_name)[source]

delattr, but considers sub-objects

property dmig_strain_energy
property genel_strain_energy
get_op2_stats(short=False)[source]

Gets info about the contents of the different attributes of the OP2 class.

Examples

*Detailed OP2 Stats* >>> self.get_op2_stats()

displacements[1]

isubcase = 1 type=RealDisplacementArray nnodes=72 data: [t1, t2, t3, r1, r2, r3] shape=[1, 72, 6] dtype=float32 gridTypes sort1 lsdvmns = [1]

spc_forces[1]

isubcase = 1 type=RealSPCForcesArray nnodes=72 data: [t1, t2, t3, r1, r2, r3] shape=[1, 72, 6] dtype=float32 gridTypes sort1 lsdvmns = [1]

ctetra_stress[1]

type=RealSolidStressArray nelements=186 nnodes=930 nodes_per_element=5 (including centroid) eType, cid data: [1, nnodes, 10] where 10=[oxx, oyy, ozz, txy, tyz, txz, o1, o2, o3, von_mises] data.shape = (1, 930, 10) element name: CTETRA sort1 lsdvmns = [1]

*Appreviated OP2 Stats* >>> self.get_op2_stats(short=True) displacements[1]; RealDisplacementArray; [1, 72, 6]; [t1, t2, t3, r1, r2, r3]

get_result(result_name)[source]

Getattr, but considers sub-objects

Examples

Example 1 >>> self.eigenvectors = get_result(‘eigenvectors’)

Example 2 >>> self.ato.displacements = get_result(‘ato.displacements’)

get_table_types()[source]

Gets the names of the results.

has_result(result_name: str) → bool[source]

checks to see if a result exists

isubcase_name_map = None

a dictionary that maps an integer of the subcaseName to the subcase_id

property rbe1_strain_energy
property rbe3_strain_energy
remove_empty_results()[source]
title = None

BDF Title

property vu_quad_force
property vu_tria_force
property weldc_strain_energy
class pyNastran.op2.op2_interface.op2_f06_common.Op2F06Attributes[source]

Bases: pyNastran.op2.op2_interface.op2_f06_common.OP2_F06_Common

result_set Module
Inheritance diagram of pyNastran.op2.op2_interface.result_set
Defines:
  • ResultSet(allowed_results)

    • allowed

    • found

    • saved

    • is_saved(result)

    • is_not_saved(result)

    • clear()

    • add(result)

    • remove(results)

    • _found_result(result)

    • update(self, results)

class pyNastran.op2.op2_interface.result_set.ResultSet(allowed_results: List[int], results_map, unused_log)[source]

Bases: object

This class is private storage interface class.

It’s an interface tool between the code and the results the user requests.

add(results: Union[str, List[str]]) → List[str][source]

adds a list/str of results

clear() → None[source]

clears all the results

is_not_saved(result: str) → bool[source]

checks to see if a result is saved

is_saved(result: str) → bool[source]

checks to see if a result is saved

remove(results: Union[str, List[str]]) → List[str][source]

removes a list/str of results

update(results: List[str]) → None[source]
write_utils Module

Defines methods for the op2 & hdf5 writer

pyNastran.op2.op2_interface.write_utils.export_to_hdf5(self, group, log)[source]

exports the object to HDF5 format

pyNastran.op2.op2_interface.write_utils.get_complex_fdtype(dtype)[source]

complex64 -> float32; complex128 -> float64

pyNastran.op2.op2_interface.write_utils.set_table3_field(str_fields, ifield, value)[source]

ifield is 1 based

pyNastran.op2.op2_interface.write_utils.to_column_bytes(data_list: List[numpy.ndarray], dtype_out: str, debug: bool = False) → numpy.ndarray[source]

Takes an stackable numpy array of mixed types (e.g., ints/strings) and casts them to the appropriate output datatype (typically float32/float64).

An array is stackable if it’s the same shape (e.g., ints/floats). This requirement is a bit looser for strings (4 characters per 32-bit float)

pyNastran.op2.op2_interface.write_utils.view_dtype(array_obj, dtype)[source]

handles downcasting data

pyNastran.op2.op2_interface.write_utils.view_idtype_as_fdtype(int_array, fdtype)[source]

If we’re downcasting from int64 to float32, we can’t directly go to float32. We need to first go to int32, then to float32.

pyNastran.op2.op2_interface.write_utils.write_table_header(op2_file, fascii, table_name)[source]

Writes the beginning of an op2 table

Parameters
op2_filefile

the op2 file object

table_namestr

the table name to write

op2_common

This is the pyNastran.op2_interface.op2_common.rst file.

op2_common Module
Inheritance diagram of pyNastran.op2.op2_interface.op2_common
op2_reader_helper

This is the pyNastran.op2_interface.op2_reader.rst file.

op2_reader Module
Defines various tables that don’t fit in other sections:
  • OP2Reader - read_cmodeext(self) - read_cmodeext_helper(self) - read_aemonpt(self) - read_monitor(self) - read_r1tabrg(self) - read_hisadd(self)

    • read_cstm(self)

    • read_dit(self)

    • read_extdb(self)

    • read_fol(self)

    • read_frl(self)

    • read_gpl(self)

    • read_ibulk(self)

    • read_intmod(self)

    • read_meff(self)

    • read_omm2(self)

    • read_sdf(self)

    • read_tol(self)

    • _skip_pcompts(self)

    • _read_pcompts(self)

  • Matrix - _get_matrix_row_fmt_nterms_nfloats(self, nvalues, tout) - _skip_matrix_mat(self) - read_matrix(self, table_name) - _read_matpool_matrix(self) - _read_matrix_mat(self) - grids_comp_array_to_index(grids1, comps1, grids2, comps2,

    make_matrix_symmetric)

  • Others - _get_marker_n(self, nmarkers) - read_markers(self) - _skip_subtables(self) - _skip_table_helper(self) - _print_month(self, month, day, year, zero, one) - read_results_table(self)

class pyNastran.op2.op2_interface.op2_reader.OP2Reader(op2: OP2)[source]

Stores methods that aren’t useful to an end user

property binary_debug

interface to the op2 object

property debug_file

interface to the op2 object

generic_stop_table(data: bytes, ndata: int)[source]

print table data when things get weird

get_marker1(rewind: bool = True, macro_rewind: bool = False) → int[source]
get_marker1_4(rewind: bool = True, macro_rewind: bool = False) → int[source]

Gets 1 marker See get_n_markers(…)

Parameters
rewindbool

should the file be returned to the starting point

macro_rewindbool

???

Returns
markersint

a single marker

get_marker1_8(rewind=True, macro_rewind=False) → int[source]

Gets 1 marker See get_n_markers(…)

Parameters
rewindbool

should the file be returned to the starting point

macro_rewindbool

???

Returns
markersint

a single marker

get_nmarkers(n: int, rewind=True, macro_rewind=False)[source]
get_nmarkers4(n: int, rewind=True, macro_rewind=False)[source]

Gets n markers, so if n=2, it will get 2 markers.

Parameters
nint

number of markers to get

rewindbool

should the file be returned to the starting point

Returns
markersList[int]

list of [1, 2, 3, …] markers

get_nmarkers8(n: int, rewind=True, macro_rewind=False)[source]

Gets n markers, so if n=2, it will get 2 markers.

Parameters
nint

number of markers to get

rewindbool

should the file be returned to the starting point

Returns
markersList[int]

list of [1, 2, 3, …] markers

get_skip_read_record_ndata()[source]

selects the read_record or skip_record depending on read_mode

get_subtable_name4(op2, data: bytes, ndata: int) → bytes[source]
get_subtable_name8(op2, data: bytes, ndata: int) → bytes[source]
h5_file = None

the h5 file object used to reduce memory usage

property is_debug_file

interface to the op2 object

is_valid_subcase() → bool[source]

Lets the code check whether or not to read a subcase

Returns
is_validbool

should this subcase defined by self.isubcase be read?

load_as_h5 = None

should an h5_file be created

property log

interface to the op2 object

read_3_blocks4() → bytes[source]
Reads a block following a pattern of:

[nbytes, data, nbytes] [nbytes, data, nbytes] [nbytes, data, nbytes]

This is intended to be used for reading marker triples

Returns
databytes

the data in binary

read_3_markers(markers, macro_rewind=True) → None[source]

Micro-optimizes read_markers for 3 markers.

read_3_markers4(markers, macro_rewind=True) → None[source]

Micro-optimizes read_markers for 3 markers.

Parameters
markersList[int, int, int]

markers to get; markers = [-10, 1, 0]

Raises
FortranMarkerError

if the expected table number is not found

read_aemonpt()[source]

reads the AEMONPT table D:NASAgitexamplesbackupaeroelasticityloadf.op2

read_bgpdt()[source]

reads the BGPDT, BGPDTS, BGPDTOLD tables

tested by TestOP2Matrix.test_gpspc

read_block()[source]
read_block4() → bytes[source]
Reads a block following a pattern of:

[nbytes, data, nbytes]

Returns
databytes

the data in binary

Notes

see read_3_blocks

read_block8() → bytes[source]
Reads a block following a pattern of:

[nbytes, data, nbytes]

Returns
databytes

the data in binary

Notes

see read_3_blocks

read_cddata()[source]

Cambell diagram summary

read_cstm()[source]

Reads the CSTM table, which defines the transform from global to basic.

Returns 14-column matrix 2-d array of the CSTM data:

[
 [ id1 type xo yo zo T(1,1:3) T(2,1:3) T(3,1:3) ]
 [ id2 type xo yo zo T(1,1:3) T(2,1:3) T(3,1:3) ]
 ...
]

T is transformation from local to basic for the coordinate system.

read_dbcopt()[source]

reads the DBCOPT table, which is a design variable history table

read_descyc()[source]

reads the DESCYC table

read_dscmcol()[source]

reads the DSCMCOL table, which defines the columns? for the DSCM2 table

read_eqexin()[source]

isat_random.op2

read_extdb()[source]
fails if a streaming block:
  • nx_spikeextse04c_0.op2

read_fol()[source]

Reads the FOL table Frequency response frequency output list

tested by TestOP2.test_monpnt3

Word

Name

Type

Description

1

NAME(2)

CHAR4

Data block name

3

FREQ

RS

Frequency

Word 3 repeats until End of Record

Word

Name

Type

Description

1

WORD1

I

Number of frequencies

2

WORD2

I

Frequency set record number

3

WORD3

I

Number of loads

4

UNDEF(3)

None

Not used

read_frl()[source]

reads the FRL (Frequency Response List) table

tested by TestOP2.test_op2_good_sine_01

read_geom_table()[source]

Reads a geometry table

read_gpdt()[source]

reads the GPDT table

tested by ???

read_gpl()[source]

reads the GPL table (grid point list?)

tested by TestOP2.test_beam_modes

read_gpls()[source]
read_hisadd()[source]

optimization history (SOL200) table

read_ibulk()[source]

tested by TestOP2.test_ibulk

read_mode = 1 (array sizing) read_mode = 1 (reading)

read_icase()[source]

tested by ???

read_mode = 1 (array sizing) read_mode = 1 (reading)

read_intmod()[source]

reads the INTMOD table

tested by TestNastranGUI.test_femap_rougv1_01

read_markers(markers: List[int], macro_rewind: bool = True) → None[source]
read_markers4(markers: List[int], macro_rewind: bool = True) → None[source]

Gets specified markers, where a marker has the form of [4, value, 4]. The “marker” corresponds to the value, so 3 markers takes up 9 integers. These are used to indicate position in the file as well as the number of bytes to read.

Because we’re checking the markers vs. what we expect, we just throw the data away.

Parameters
markersList[int]

markers to get; markers = [-10, 1]

Raises
FortranMarkerError

if the expected table number is not found

read_markers8(markers: List[int], macro_rewind: int = True) → None[source]

Gets specified markers, where a marker has the form of [4, value, 4]. The “marker” corresponds to the value, so 3 markers takes up 9 integers. These are used to indicate position in the file as well as the number of bytes to read.

Because we’re checking the markers vs. what we expect, we just throw the data away.

Parameters
markersList[int]

markers to get; markers = [-10, 1]

Raises
FortranMarkerError

if the expected table number is not found

read_matrix(table_name)[source]

General method for reading matrices and MATPOOL matrices

read_meff()[source]

reads the MEFF table

property read_mode

interface to the op2 object

read_monitor()[source]

reads the MONITOR table; new version D:NASAgitexamplesbackupaeroelasticityloadf.op2

read_nastran_version(mode: str)[source]
reads the version header

ints = (3, 4, 12, 1, 28, 12, 12, 4, 7, 4, 28, 1414742350, 541999442, 1414680390, 1346458656, 1145643077, 1146045216, 539828293, 28, 4, 2, 4, 8, 1482184792, 1482184792, 8, 4, -1, 4, 4, 0, 4, 4, 2, 4, 8, 1297040711, 538976305, 8, 4, -1

read_omm2()[source]

reads the OMM2 table

read_qualinfo()[source]

Reads the QUALINFO table

-100001 (AUXMID=0;AFPMID=0;DESITER=0;HIGHQUAL=0;PVALID=0;DESINC=0;DISCRETE=FALSE;MASSID=0;ARBMID=0;PARTNAME=’ ‘;TRIMID=0;MODULE=0) -100000 (AUXMID=0;AFPMID=0;DESITER=0;HIGHQUAL=0;PVALID=0;DESINC=0;ARBMID=0;PARTNAME=’ ‘;DISCRETE=FALSE;TRIMID=0)

-99999 (AUXMID=0;AFPMID=0;HIGHQUAL=0;PVALID=0;DESINC=0;PRESEQP=TRUE;ARBMID=0;PARTNAME=’ ‘;TRIMID=0;FLXBDYID=0;DFPHASE=’ ‘) -99998 (AUXMID=0;AFPMID=0;DESITER=0;HIGHQUAL=0;DESINC=0;DISCRETE=FALSE;ARBMID=0;MASSID=0;PARTNAME=’ ‘;TRIMID=0)

1431 (HIGHQUAL=0;AUXMID=0;AFPMID=0;DESINC=0;ARBMID=0;PARTNAME=’ ‘;TRIMID=0;FLXBDYID=0) 1459 (PEID=0;DESITER=0;PVALID=0;NL99=0;APRCH=’ ‘;QCPLD=’ ‘;HIGHQUAL=0;AUXMID=0;DESINC=0;DISCRETE=FALSE;MASSID=0;PARTNAME=’ ‘;MODULE=0) 1461 (PEID=0;APRCH=’ ‘;QCPLD=’ ‘;HIGHQUAL=0;AUXMID=0;DESINC=0;PARTNAME=’ ‘;MODULE=0) 1541 (SEID=0;PEID=0;MTEMP=0;DESITER=0;PVALID=0;APRCH=’ ‘;QCPLD=’ ‘;HIGHQUAL=0;P2G=’ ‘;K2GG=’ ‘;M2GG=’ ‘;DELTA=FALSE;AUXMID=0;BNDSHP=FALSE;ADJOINT=FALSE;DESINC=0;DISCRETE=FALSE;CASEF06=’ ‘;ISOLAPP=1;SUBCID=0;OSUBID=1;STEPID=0;RGYRO=0;PARTNAME=’ ‘;SSTEPID=0;MODULE=0)

Word Name Type Description 1 NAME(2) CHAR4 Datablock Name

Word Name Type Description 1 DBKEY I database KEY associated with qualifiers 2 QLEN(C) I length in words of qualifiers string 3 QUALSTR CHAR4 Qualifier information string Word 3 repeats QLEN times

Word Name Type Description 1 FUNIT I Fortran unit op2 file was written to 2 NUMKEYS I Number of keys 3 BIT(5) I ,{

read_r1tabrg()[source]

Reads the R1TABRG design response optimization table

read_results_table()[source]

Reads a results table

read_results_table4() → None[source]

Reads a results table

read_results_table8() → None[source]

Reads a results table

read_sdf()[source]

reads the SDF table

read_stdisp()[source]

reads the STDISP table

read_string_block() → bytes[source]
read_table_name(table_names: List[bytes]) → str[source]
read_table_name4(table_names: List[bytes]) → str[source]
read_table_name8(table_names: List[bytes]) → str[source]
read_tol()[source]

This is probably broken for MSC Nastran

read_xsop2dir()[source]

Matrix datablocks are named with the matrix name, and they contain only the matrices with no row and column DOF information.

External superelements are written to the OP2 in the XSOP2DIR datablock which contains the directory of matrices, and multiple EXTDB datablocks that contain these matrices. The information in XSOP2DIR can be used to rename the EXTDB datablocks to their corresponding matrix name.

The MATPOOL datablock contains matrices of several different formats. MATPOOL matrices are DMIG-formatted matrices. Matrices from all of these sources can be stored as structured array.

show(n: int, types: str = 'ifs', endian: Optional[str] = None, force: bool = False)[source]

shows the next N bytes

Parameters
nint

the number of bytes to show

typesstr; default=’ifs’

the data types to show

endianstr; default=None -> active endian

the data endian

forcebool; default=False

overwrite the n=2000 limiter

show_data(data: bytes, types: str = 'ifs', endian: Optional[str] = None, force: bool = False)[source]

Shows a data block as various types

Parameters
databytes

the binary string bytes

typesstr; default=’ifs’

i - int f - float s - string d - double (float64; 8 bytes) q - long long (int64; 8 bytes)

l - long (int; 4 bytes) I - unsigned int (int; 4 bytes) L - unsigned long (int; 4 bytes) Q - unsigned long long (int; 8 bytes)

endianstr; default=None -> auto determined somewhere else in the code

the big/little endian {>, <}

forcebool; default=False

overwrite the n=2000 limiter

.. warning:: ‘s’ is apparently not Python 3 friendly
show_ndata(n: int, types: str = 'ifs')[source]
unpack_table_name(data: bytes) → bytes[source]
unpack_table_name4(data: bytes) → bytes[source]

table names can apparently be 8 or 32 characters

unpack_table_name8(data: bytes) → bytes[source]

table names can apparently be 8 or 32 characters

exception pyNastran.op2.op2_interface.op2_reader.SubTableReadError[source]
pyNastran.op2.op2_interface.op2_reader.dscmcol_dresp1(responses: Dict[int, Dict[str, Any]], nresponses_dresp1: int, ints, floats) → None[source]

helper for DSCMCOL

pyNastran.op2.op2_interface.op2_reader.dscmcol_dresp2(responses: Dict[int, Dict[str, Any]], nresponses_dresp2: int, ints, floats) → None[source]

helper for DSCMCOL

pyNastran.op2.op2_interface.op2_reader.eqexin_to_nid_dof_doftype(eqexin1, eqexin2) → Tuple[Any, Any, Any][source]

assemble dof table

pyNastran.op2.op2_interface.op2_reader.get_table_size_from_ncolumns(table_name: str, nvalues: int, ncolumns: int) → int[source]
pyNastran.op2.op2_interface.op2_reader.grids_comp_array_to_index(grids1, comps1, grids2, comps2, make_matrix_symmetric: bool) → Tuple[Any, Any, int, int, int][source]

Maps the dofs

Returns
ja???

???

jb???

???

nja???

???

njb???

???

nj???

???

pyNastran.op2.op2_interface.op2_reader.mapfmt(fmt: bytes, size: int) → bytes[source]
pyNastran.op2.op2_interface.op2_reader.mapfmt_str(fmt: bytes, size: int) → bytes[source]
pyNastran.op2.op2_interface.op2_reader.reshape_bytes_block(block: bytes) → bytes[source]
pyNastran.op2.op2_interface.op2_reader.reshape_bytes_block_size(name_bytes: bytes, size: int = 4) → bytes[source]
pyNastran.op2.op2_interface.op2_reader.reshape_bytes_block_strip(name_bytes: bytes, size: int = 4) → str[source]
pyNastran.op2.op2_interface.op2_reader.update_op2_datacode(op2, data_code_old)[source]
op2_scalar

This is the pyNastran.op2_interface.op2_scalar.rst file.

op2_scalar Module
Inheritance diagram of pyNastran.op2.op2_interface.op2_scalar

Defines the sub-OP2 class. This should never be called outside of the OP2 class.

  • OP2_Scalar(debug=False, log=None, debug_file=None)

    Methods - set_subcases(subcases=None) - set_transient_times(times) - read_op2(op2_filename=None, combine=False) - set_additional_generalized_tables_to_read(tables) - set_additional_result_tables_to_read(tables) - set_additional_matrices_to_read(matrices)

    Attributes - total_effective_mass_matrix - effective_mass_matrix - rigid_body_mass_matrix - modal_effective_mass_fraction - modal_participation_factors - modal_effective_mass - modal_effective_weight - set_as_msc() - set_as_optistruct()

    Private Methods - _get_table_mapper() - _not_available(data, ndata) - _table_crasher(data, ndata) - _table_passer(data, ndata) - _validate_op2_filename(op2_filename) - _create_binary_debug() - _make_tables() - _read_tables(table_name) - _skip_table(table_name) - _read_table_name(rewind=False, stop_on_failure=True) - _update_generalized_tables(tables) - _read_cmodext() - _read_cmodext_helper(marker_orig, debug=False) - _read_geom_table() - _finish()

pyNastran.op2.op2_interface.op2_scalar.create_binary_debug(op2_filename: str, debug_file: str, log) → Tuple[bool, Any][source]

helper method

pyNastran.op2.op2_interface.op2_scalar.main()[source]

testing pickling

pyNastran/op2/result_objects

result_objects Package
element_table_object Module
Inheritance diagram of pyNastran.op2.result_objects.element_table_object
class pyNastran.op2.result_objects.element_table_object.ElementTableArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the ElementTableArray

combine(result, is_sort1=True)[source]
data_type()[source]
get_stats(short: bool = False) → List[str][source]
property headers
class pyNastran.op2.result_objects.element_table_object.RealElementTableArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.element_table_object.ElementTableArray

data_type() → str[source]
extract_xyplot(element_ids, index)[source]
property is_complex
property is_real
property nnodes_per_element
op2_objects Module
Inheritance diagram of pyNastran.op2.result_objects.op2_objects
class pyNastran.op2.result_objects.op2_objects.BaseElement(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

class pyNastran.op2.result_objects.op2_objects.BaseScalarObject[source]

Bases: pyNastran.op2.op2_interface.op2_codes.Op2Codes

The base scalar class is used by:
  • RealEigenvalues

  • BucklingEigenvalues

  • ComplexEigenvalues

  • ScalarObject

build_dataframe() → None[source]

creates a pandas dataframe

property class_name
export_to_hdf5(group, log: cpylog.SimpleLogger) → None[source]

exports the object to HDF5 format

get_headers()[source]
get_stats(short: bool = False)[source]
object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]
object_methods(mode='public', keys_to_skip=None)[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True) → int[source]
class pyNastran.op2.result_objects.op2_objects.ScalarObject(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseScalarObject

Used by all vectorized objects including:
  • DisplacementArray

  • RodStressArray

apply_data_code() → None[source]
cast_grid_type(grid_type_str)[source]

converts a grid_type string to an integer

property dataframe

alternate way to get the dataframe

get_data_code(prefix: str = ' ') → List[str][source]
get_unsteady_value()[source]
print_data_members()[source]

Prints out the “unique” vals of the case.

Uses a provided list of data_code[‘data_names’] to set the values for each subcase. Then populates a list of self.name+’s’ (by using setattr) with the current value. For example, if the variable name is ‘mode’, we make self.modes. Then to extract the values, we build a list of of the variables that were set like this and then loop over them to print their values.

This way there is no dependency on one result type having [‘mode’] and another result type having [‘mode’,’eigr’,’eigi’].

recast_gridtype_as_string(grid_type)[source]

converts a grid_type integer to a string

Point type (per NX 10; OUG table; p.5-663): =1, GRID Point =2, Scalar Point =3, Extra Point =4, Modal =5, p-elements, 0-DOF -6, p-elements, number of DOF

update_data_code(data_code)[source]
update_dt(data_code, unused_dt)[source]

This method is called if the object already exits and a new time/freq/load step is found

pyNastran.op2.result_objects.op2_objects.get_complex_times_dtype(nonlinear_factor: Union[int, float], size: int) → Tuple[str, str, str][source]
pyNastran.op2.result_objects.op2_objects.get_times_dtype(nonlinear_factor: Union[int, float], size: int, analysis_code_fmt=None) → Tuple[str, str, str][source]
scalar_table_object Module
Inheritance diagram of pyNastran.op2.result_objects.scalar_table_object
defines:
  • ScalarTableObject

class pyNastran.op2.result_objects.scalar_table_object.RealScalarTableArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.scalar_table_object.ScalarTableArray

data_type()[source]
extract_xyplot(node_ids, index)[source]
property is_complex
property is_real
write_op2(op2_file, fascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.result_objects.scalar_table_object.ScalarTableArray(data_code, unused_is_sort1, isubcase, unused_dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

build()[source]

sizes the vectorized attributes of the ScalarTableArray

build_data(ntimes, nnodes, ntotal, nx, ny, float_fmt)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

combine(result, is_sort1=True)[source]
data_type()[source]
finalize()[source]

Calls any OP2 objects that need to do any post matrix calcs

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property headers
set_as_sort1()[source]

changes the table into SORT1

table_object Module
Inheritance diagram of pyNastran.op2.result_objects.table_object
defines:
  • TableObject

  • RealTableArray

  • ComplexTableArray

these are used by:
  • RealDisplacementArray

  • RealVelocityArray

  • RealAccelerationArray

  • RealEigenvaluesArray

  • RealSPCForcesArray

  • RealMPCForcesArray

  • RealAppliedLoadsArray

  • ComplexDisplacementArray

  • ComplexVelocityArray

  • ComplexAccelerationArray

  • ComplexEigenvaluesArray

  • ComplexSPCForcesArray

  • ComplexMPCForcesArray

  • ComplexAppliedLoadsArray

class pyNastran.op2.result_objects.table_object.ComplexTableArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.TableArray

complex displacement style table

classmethod add_freq_case(table_name, node_gridtype, data, isubcase, freqs, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
data_type()[source]
extract_xyplot(node_ids, index, index_str)[source]
property is_complex
property is_real
write_op2(op2_file, fascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

write_sort1_as_sort1(f06_file, page_num, page_stamp, header, words, is_mag_phase)[source]
write_sort1_as_sort2(f06_file, page_num, page_stamp, header, words, is_mag_phase)[source]
class pyNastran.op2.result_objects.table_object.RealTableArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.TableArray

displacement style table

classmethod add_modal_case(table_name, node_gridtype, data, isubcase, modes, eigenvalues, mode_cycles, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
classmethod add_static_case(table_name, node_gridtype, data, isubcase, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
classmethod add_transient_case(table_name, node_gridtype, data, isubcase, times, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
data_type()[source]
extract_xyplot(node_ids, index)[source]
property is_complex
property is_real
set_as_static_case()[source]
write_csv(csv_file, is_mag_phase=False)[source]
write_op2(op2_file, fascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.result_objects.table_object.TableArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

Base class for:
  • RealTableArray

  • ComplexTableArray

assert_equal(table, rtol=1e-05, atol=1e-08)[source]
build()[source]

sizes the vectorized attributes of the TableArray

build_data(ntimes, nnodes, ntotal, nx, ny, float_fmt)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

works: 0.24.2 broken: 0.25.0

combine(result, is_sort1=True)[source]
data_type()[source]
finalize()[source]

Calls any OP2 objects that need to do any post matrix calcs

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property headers
set_as_sort1()[source]

changes the table into SORT1

pyNastran.op2.result_objects.table_object.append_sort1_sort2(data1, data2, to_sort1=True)[source]

data1 : (ntimes, nnids, 6) data2 : (nnids, ntimes, 6)

pyNastran.op2.result_objects.table_object.oug_data_code(table_name, analysis_code, is_sort1=True, is_random=False, random_code=0, title='', subtitle='', label='', is_msc=True)[source]
pyNastran.op2.result_objects.table_object.pandas_extract_rows(data_frame, ugridtype_str, index_names)[source]

removes the t2-t6 for S and E points

op2/result_objects Package
design_response Module
Inheritance diagram of pyNastran.op2.result_objects.design_response
class pyNastran.op2.result_objects.design_response.Convergence(ndesign_variables)[source]

Bases: object

append(design_iter, iconvergence, conv_result, obj_initial, obj_final, constraint_max, row_constraint_max, desvar_values)[source]
get_convergence()[source]
get_stats(short: bool = False)[source]
class pyNastran.op2.result_objects.design_response.DSCMCOL(responses)[source]

Bases: object

‘ —– IDENTIFICATION OF COLUMNS IN THE DESIGN SENSITIVITY —–’ ‘ —– MATRIX THAT ARE ASSOCIATED WITH DRESP1 ENTRIES —–’ ‘’ ‘’ ‘ —– WEIGHT/VOLUME RESPONSES —–’ ‘ ——————————————’ ‘ COLUMN DRESP1 RESPONSE’ ‘ NO. ENTRY ID TYPE ‘ ‘ ——————————————’ ‘ 1 1 WEIGHT ‘ ‘’ ‘’ ‘ —– STATICS RESPONSES —–’ ‘ ————————————————————————————————————————’ ‘ COLUMN DRESP1 RESPONSE GRID/ELM VIEW COMPONENT SUB PLY ‘ ‘ NO. ENTRY ID TYPE ID ELM ID NO. CASE NO. ‘ #’ COLUMN DRESP1 RESPONSE GRID/ELM VIEW COMPONENT SUB ‘ #’ NO. ENTRY ID TYPE ID ELM ID NO. CASE ‘ ‘ ————————————————————————————————————————’ ‘ 2 2 STRESS 1 5 1’ ‘ 3 2 STRESS 3 5 1’ ‘ 4 10501 DISP 100 1 1’ ‘’ ‘’ #’ —- RETAINED DRESP2 RESPONSES —-’ #’’ #’ ———————————————————————————————————-’ #’ INTERNAL DRESP2 RESPONSE EQUATION LOWER UPPER ‘ #’ ID ID LABEL ID BOUND VALUE BOUND ‘ #’ ———————————————————————————————————-’ #’ 3 105 DISPMAG 3 -1.0000E+20 9.4677E-05 2.5000E-04’ ‘ —– IDENTIFICATION OF COLUMNS IN THE DESIGN SENSITIVITY —–’ ‘ —– MATRIX THAT ARE ASSOCIATED WITH DRESP2 ENTRIES —–’ ‘’ ‘’ ‘ ———————————————————-’ ‘ COLUMN DRESP2 SUB FREQ/ ‘ ‘ NO. ENTRY ID CASE TIME ‘ ‘ ———————————————————-’ ‘ 96 103 0 0.00000’ ‘ 97 104 0 0.00000’ ‘ 100 105 1’

internal_response_id = iresponse + 1 = column in DSCM2

property external_ids
get_responses_by_group()[source]
get_stats(short: bool = False)[source]
property names
class pyNastran.op2.result_objects.design_response.Desvars(desvars)[source]

Bases: object

get_stats(short: bool = False)[source]
class pyNastran.op2.result_objects.design_response.DisplacementResponse[source]

Bases: object

append(internal_id, dresp_id, response_label, region, subcase, type_flag, seid, nid, component)[source]
get_stats(short: bool = False)[source]
name = 'displacement'
class pyNastran.op2.result_objects.design_response.FlutterResponse[source]

Bases: object

append(internal_id, dresp_id, response_label, region, subcase, type_flag, seid, mode, mach, velocity, density, flutter_id)[source]
get_stats(short: bool = False)[source]
name = 'flutter'
class pyNastran.op2.result_objects.design_response.ForceResponse[source]

Bases: pyNastran.op2.result_objects.design_response.PropertyResponse

name = 'force'
class pyNastran.op2.result_objects.design_response.FractionalMassResponse[source]

Bases: object

append(internal_id, dresp_id, response_label, region, subcase, type_flag, seid)[source]
get_stats(short: bool = False)[source]
name = 'fractional_mass'
class pyNastran.op2.result_objects.design_response.PropertyResponse[source]

Bases: object

common class for StressResponse, StrainResponse, and ForceResponse

append(internal_id, dresp_id, response_label, region, subcase, type_flag, seid, item_code, pid)[source]
get_stats(short: bool = False)[source]
class pyNastran.op2.result_objects.design_response.Responses[source]

Bases: object

Defines SOL 200 responses from the R1TABRG table

get_stats(short: bool = False) → str[source]
get_table_types()[source]
class pyNastran.op2.result_objects.design_response.StrainResponse[source]

Bases: pyNastran.op2.result_objects.design_response.PropertyResponse

name = 'strain'
class pyNastran.op2.result_objects.design_response.StressResponse[source]

Bases: pyNastran.op2.result_objects.design_response.PropertyResponse

name = 'stress'
class pyNastran.op2.result_objects.design_response.WeightResponse[source]

Bases: object

add_from_op2(out, log)[source]

Weight Response

1 IRID I Internal response identification number 2 RID I External response identification number 3 TYPE(C) I Response type 4 LABEL(2) CHAR4 Label 6 REGION I Region identifier 7 SCID I Subcase identification number 8 UNDEF(2) I Not used 10 SEID I Superelement identification number or ALL 11 UNDEF(2) I Not used

13 UNDEF I Not used 14 TYFLG I Flag to indicate how response is referenced 15 SEID I Superelement identificaiton number

—> 3i 8s 7i 3i

# —– WEIGHT RESPONSE —– # ——————————————————————————— # INTERNAL DRESP1 RESPONSE ROW COLUMN LOWER INPUT OUTPUT UPPER # ID ID LABEL ID ID BOUND VALUE VALUE BOUND # ——————————————————————————— # 1 1 WEIGHT 3 3 N/A 2.9861E+05 2.9852E+05 N/A

# ? ? ? LABEL? ? ? ROW_ID? COL_ID? ? ? ? ? ? ? #(1, 1, 1, ‘WEIGHT ‘, 0, 1011, 3, 3, 0, 0, 0, 0, 0, 0) #(1, 1000, 1, ‘W ‘, 0, 1, 3, 3, 0, 0, 0, 0, 0, 0) # # per dev forum; 538976288 is probably just ‘ ‘ #(1, 1, 1, ‘WEIGHT ‘, 0, 1, 3, 3, 0, 0, 538976288, 538976288, 0, 0)

append(internal_id, dresp_id, response_label, region, subcase, type_flag, seid, row_id, column_id)[source]
get_stats(short: bool = False)[source]
grid_point_weight Module

#.. inheritance-diagram:: pyNastran.op2.result_objects.grid_point_weight

defines the GridPointWeight class

class pyNastran.op2.result_objects.grid_point_weight.GridPointWeight(reference_point, MO, S, mass, cg, IS, IQ, Q, approach_code=1, table_code=13, title='', subtitle='', label='', superelement_adaptivity_index='')[source]
export_to_hdf5(group, log) → None[source]

exports the object to HDF5 format

get_stats(key='', short=True)[source]
object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]
object_methods(mode='public', keys_to_skip=None)[source]
write_f06(f06_file, page_stamp, page_num)[source]

writes the f06

Parameters
f06_filefile / StringIO

a file-like object

page_stampstr

the page formatter (e.g., ‘PAGE %i’)

page_numint

the active page number

Returns
page_numint

the new page number

write_op2(op2_file, op2_ascii, date, endian=b'<')[source]
pyNastran.op2.result_objects.grid_point_weight.make_grid_point_weight(reference_point, MO, approach_code=1, table_code=13, title='', subtitle='', label='', superelement_adaptivity_index='') → None[source]

creates a grid point weight table

# :show-inheritance:

matrix Module

#.. inheritance-diagram:: pyNastran.op2.result_objects.matrix

Defines the Matrix class

class pyNastran.op2.result_objects.matrix.Matrix(name, form, is_matpool=False)[source]

Defines a Matrix object that’s stored in op2.matrices

Attributes
namestr

the name of the matrix

datavaries

dense : np.ndarray sparse : coo_matrix data is initialized by setting the matrix.data attribute externally

is_matpoolbool

is this a matpool matrix

Initializes a Matrix

Parameters
namestr

the name of the matrix

formint

the matrix type

is_matpoolbool

is this a matpool matrix

+——+—————–+
| Form | Meaning |
+======+=================+
| 1 | Square |
| 2 | Rectangular |
| 6 | Symmetric |
| 9 | Pseudo identity |
+——+—————–+
build_dataframe()[source]

exports the object to pandas format

export_to_hdf5(group, log)[source]

exports the object to HDF5 format

object_attributes(mode='public', keys_to_skip=None, filter_properties=False)[source]
object_methods(mode='public', keys_to_skip=None)[source]
property shape_str

gets the matrix description

write(mat, print_full=True)[source]

writes to the F06

class pyNastran.op2.result_objects.matrix.MatrixDict(name)[source]

storage object for KDICT, MDICT, BDICT, etc. is op2.matdicts

add(eltype, numwids, numgrid, dof_per_grid, form, eids, ge, address, sil, xform=None)[source]

Sets the next set of the KDICT

property element_names
property nelements

# :show-inheritance:

monpnt Module

#.. inheritance-diagram:: pyNastran.op2.result_objects.monpnt

class pyNastran.op2.result_objects.monpnt.MONPNT1(frequencies, matrices, comp_matrices)[source]

MONPNT1 table

write(f06_file, page_stamp: str = '', page_num: int = 1)[source]
class pyNastran.op2.result_objects.monpnt.MONPNT3(frequencies, matrix)[source]

MONPNT3 table

write(f06_file, page_stamp: str = '', page_num: int = 1)[source]

# :show-inheritance:

pyNastran/op2/tables

tables Package
ogpwg Module
Inheritance diagram of pyNastran.op2.tables.ogpwg
class pyNastran.op2.tables.ogpwg.OGPWG[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

utils Module
pyNastran.op2.tables.utils.get_eid_dt_from_eid_device(eid_device, dt, sort_method)[source]

common unvectorized method for transforming SORT2 data into SORT1

pyNastran/op2/tables/geom
geom Package
geom_common Module
Inheritance diagram of pyNastran.op2.tables.geom.geom_common
class pyNastran.op2.tables.geom.geom_common.GeomCommon[source]

Bases: object

increase_card_count(name: str, count_num: int = 1)[source]
class pyNastran.op2.tables.geom.geom_common.SuppressFileIO[source]

Bases: object

close()[source]
flush()[source]
open(fname)[source]
write(msg)[source]
class pyNastran.op2.tables.geom.geom_common.SuppressLogging[source]

Bases: object

debug(msg)[source]
flush()[source]
info(msg)[source]
pyNastran/op2/tables/geom
dit Module
Inheritance diagram of pyNastran.op2.tables.geom.dit

defines readers for BDF objects in the OP2 DIT/DITS table

class pyNastran.op2.tables.geom.dit.DIT[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 tables

pyNastran.op2.tables.geom.dit.get_iend_from_ints(ints)[source]

istart = iend + 2 for (-1, -1) flag to end a table

dynamics Module
Inheritance diagram of pyNastran.op2.tables.geom.dynamics

defines readers for BDF objects in the OP2 DYNAMIC/DYNAMICS table

class pyNastran.op2.tables.geom.dynamics.DYNAMICS[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 dynamics loads/methods

geom1 Module
Inheritance diagram of pyNastran.op2.tables.geom.geom1

defines readers for BDF objects in the OP2 GEOM1/GEOM1S table

class pyNastran.op2.tables.geom.geom1.GEOM1[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 nodes/coords

geom2 Module
Inheritance diagram of pyNastran.op2.tables.geom.geom2

defines readers for BDF objects in the OP2 GEOM2/GEOM2S table

class pyNastran.op2.tables.geom.geom2.GEOM2[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 elements

add_op2_element(elem)[source]

checks that eids are positive and that -1 node ids become None

read_convm6(data, nelements, n)[source]
read_convm7(data, nelements, n)[source]
pyNastran.op2.tables.geom.geom2.convert_theta_to_mcid(theta)[source]

odd function…

geom3 Module
Inheritance diagram of pyNastran.op2.tables.geom.geom3

defines readers for BDF objects in the OP2 GEOM3/GEOM3S table

class pyNastran.op2.tables.geom.geom3.GEOM3[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 loads

geom4 Module
Inheritance diagram of pyNastran.op2.tables.geom.geom4

defines readers for BDF objects in the OP2 GEOM4/GEOM4S table

class pyNastran.op2.tables.geom.geom4.GEOM4[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 constraints

pyNastran.op2.tables.geom.geom4.fill_rbe3_wt_comp_gijs(i, j, idata, fdata)[source]

helper for read_rbe3s_from_idata_fdata

pyNastran.op2.tables.geom.geom4.get_minus_2_index(idata)[source]

helper for get_minus_2_index

pyNastran.op2.tables.geom.geom4.read_rbe3s_from_idata_fdata(self, idata, fdata)[source]

1 EID I Element identification number 2 REFG I Reference grid point identification number 3 REFC I Component numbers at the reference grid point

4 WT1 RS Weighting factor for components of motion at G 5 C I Component numbers 6 G I Grid point identification number Word 6 repeats until -1 occurs

Words 4 through 6 repeat until -2 occurs

7 GM I Grid point identification number for dependent degrees-of-freedom 8 CM I Component numbers of dependent degrees-of-freedom

Words 7 through 8 repeat until -3 occurs

data = [99 99 123456 1.0 123 44 45 48 49 -1 -3] data = [61 71 123456 1.0 123 70 75 77 -1 -3

62 71 123456 1.0 123 58 59 72 -1 -3]

data = [1001100 1001100 123456 1.0 123456 10011 10002 -1 -2 -3

1002500 1002500 123456 1.0 123456 10025 10020 -1 -2 -3] eid refg refc wt c g …

data = [107, 1, 123456, 1.0, 1234, 10600, 10601, -1, -2, -3, 0/0.0,

207, 2, 123456, 1.0, 1234, 20600, 20601, -1, -2, -3, 0/0.0, 307, 3, 123456, 1.0, 1234, 30600, 30601, -1, -2, -3, 0/0.0]]

data = [ 407, 4, 123, 1.0, 123, 41201, 41210, 41212, 41221, -1, -0.25, 123, 41200, 41202, 41220, 41222, -1, -2, -3, 0, 408, 4, 456, 1.0, 123, 41201, 41210, 41212, 41221, -1, 1.0, 123, 41200, 41202, 41220, 41222, -1, -2, -3, 0) ] RBE3 407 4 123 1.0 123 41201 41210

41212 41221 -.25 123 41200 41202 41220 41222

RBE3 408 4 456 1.0 123 41201 41210

41212 41221 +.25 123 41200 41202 41220 41222

ept Module
Inheritance diagram of pyNastran.op2.tables.geom.ept

defines readers for BDF objects in the OP2 EPT/EPTS table

class pyNastran.op2.tables.geom.ept.EPT[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 properties

pyNastran.op2.tables.geom.ept.break_by_minus1(idata)[source]

helper for read_nsm_nx

mpt Module
Inheritance diagram of pyNastran.op2.tables.geom.mpt

defines readers for BDF objects in the OP2 MPT/MPTS table

class pyNastran.op2.tables.geom.mpt.MPT[source]

Bases: pyNastran.op2.tables.geom.geom_common.GeomCommon

defines methods for reading op2 materials & time-stepping methods

add_op2_material(mat)[source]
pyNastran/op2/tables/lama_eigenvalues

lama/lama_eigenvalues Package =====#####===================

This is the pyNastran.op2.tables.lama_eigenvalues.rst file.

lama Package

This is the pyNastran.op2.tables.lama_eigenvalues.lama.rst file.

lama Module
Inheritance diagram of pyNastran.op2.tables.lama_eigenvalues.lama
defines the LAMA class to read:
  • RealEigenvalues

  • ComplexEigenvalues

  • BucklingEigenvalues

from the OP2

class pyNastran.op2.tables.lama_eigenvalues.lama.LAMA[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

lama/lama_objects Package =====#####===============

This is the pyNastran.op2.tables.lama_eigenvalues.lama_objects.rst file.

lama_objects Module
Inheritance diagram of pyNastran.op2.tables.lama_eigenvalues.lama_objects
class pyNastran.op2.tables.lama_eigenvalues.lama_objects.BucklingEigenvalues(title, table_name, nmodes=0)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseScalarObject

add_op2_line(data, imode)[source]
build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
is_buckling()[source]
property is_complex
property is_real
write_f06(f06_file, header, page_stamp, page_num=1)[source]
class pyNastran.op2.tables.lama_eigenvalues.lama_objects.ComplexEigenvalues(title, table_name, nmodes)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseScalarObject

cycle = freq = eigi / (2*pi) radians = eigi damping = atan2(eigi, eigr) * 2

add_op2_line(data, i)[source]
build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header, page_stamp, page_num=1)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.lama_eigenvalues.lama_objects.RealEigenvalues(abs(eigenvalue)) / (2. * pi) radians = sqrt(abs(eigenvalue))[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseScalarObject

add_f06_data(data)[source]
add_f06_line(data, imode)[source]
build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header, page_stamp, page_num=1)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

pyNastran/op2/tables/oee_energy
oee_energy Package
oee_objects Module
Inheritance diagram of pyNastran.op2.tables.oee_energy.oee_objects
class pyNastran.op2.tables.oee_energy.oee_objects.ComplexStrainEnergyArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

      FREQUENCY =  2.000000E+03
                               E L E M E N T   S T R A I N   E N E R G I E S   ( A V E R A G E )

                ELEMENT-TYPE = QUAD4               * TOTAL ENERGY OF ALL ELEMENTS IN PROBLEM     =   1.611784E-08
                SUBCASE               1            * TOTAL ENERGY OF ALL ELEMENTS IN SET      -1 =   1.611784E-08
0
                       ELEMENT-ID       STRAIN-ENERGY (MAG/PHASE)               PERCENT OF TOTAL    STRAIN-ENERGY-DENSITY
                                5       2.027844E-10 /   0.0                         1.2581              2.027844E-09
assert_equal(table, rtol=1e-05, atol=1e-08)[source]
build()[source]

sizes the vectorized attributes of the ComplexStrainEnergyArray

build_data(dtype)[source]

actually performs the build step

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oee_energy.oee_objects.RealStrainEnergyArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

                          E L E M E N T   S T R A I N   E N E R G I E S

ELEMENT-TYPE = QUAD4     * TOTAL ENERGY OF ALL ELEMENTS IN PROBLEM   = 9.817708E+08
SUBCASE               1  * TOTAL ENERGY OF ALL ELEMENTS IN SET     1 = 4.192036E+08

   ELEMENT-ID   STRAIN-ENERGY  PERCENT OF TOTAL  STRAIN-ENERGY-DENSITY
           12   2.291087E+07        2.3336            2.291087E+02
           13   1.582968E+07        1.6124            1.055312E+02
           14   6.576075E+07        6.6982            3.288037E+02
classmethod add_static_case(table_name, element_name, element, data, isubcase, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
assert_equal(table, rtol=1e-05, atol=1e-08)[source]
build()[source]

sizes the vectorized attributes of the RealStrainEnergyArray

build_data(dtype, idtype, fdtype)[source]

actually performs the build step

build_dataframe()[source]

major-axis - the axis

mode 1 2 3 freq 1.0 2.0 3.0 ElementID Item 1 T1

major_axis / top = [

[1, 2, 3], [1.0, 2.0, 3.0]

] minor_axis / headers = [ese, %, sed] name = mode

finalize()[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
set_as_sort1()[source]

changes the table into SORT1

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

pyNastran.op2.tables.oee_energy.oee_objects.oee_data_code(table_name, analysis_code, is_sort1=True, is_random=False, random_code=0, title='', subtitle='', label='', is_msc=True)[source]

helper for result creation writing

onr Module
Inheritance diagram of pyNastran.op2.tables.oee_energy.onr
class pyNastran.op2.tables.oee_energy.onr.ONR[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

get_onr_prefix_postfix()[source]

Creates the prefix/postfix that splits off ATO, CRM, PSD, nonlinear, etc. results. We also fix some of the sort bits as typing:

STRESS(PLOT,SORT1,RALL) = ALL

will actually create the OESRMS2 table (depending on what else is in your case control). However, it’s in an OESATO2 table, so we know it’s really SORT2.

Also, if you’re validating the sort_bit flags, *RMS2 and *NO2 are actually SORT1 tables.

NX Case Control Block Description =============== ========== =========== NLSTRESS OESNLXR Nonlinear static stresses BOUTPUT OESNLBR Slideline stresses STRESS OESNLXD Nonlinear Transient Stresses STRESS OES1C/OSTR1C Ply stresses/strains STRESS OES1X Element stresses with intermediate (CBAR and CBEAM)

station stresses and stresses on nonlinear elements

STRESS OES/OESVM Element stresses (linear elements only) STRAIN OSTR1 Element strains STRESS/STRAIN DOES1/DOSTR1 Scaled Response Spectra MODCON OSTRMC Modal contributions

pyNastran/op2/tables/oef_forces
oef_forces Package
Subpackages
oef Module
Inheritance diagram of pyNastran.op2.tables.oef_forces.oef
Defines the Real/Complex Forces created by:

FORCE = ALL

NX Case Control Block Description =============== ========== =========== FORCE OEF1 Element forces or heat flux (linear elements only) FORCE OEF1X Element forces (nonlinear elements only) ???? HOEF1 ??? FORCE DOEF1 Scaled Response Spectra MODCON OEFMC Modal contributions FORCE OEF1X Element forces with intermediate (CBAR and CBEAM)

station forces and forces on nonlinear elements

FLUX HOEF1 Element heat flux

class pyNastran.op2.tables.oef_forces.oef.OEF[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

Defines OEFx table reading for element forces/heat flux

get_oef_prefix_postfix()[source]

NX Case Control Block Description =============== ========== =========== NLSTRESS OESNLXR Nonlinear static stresses BOUTPUT OESNLBR Slideline stresses STRESS OESNLXD Nonlinear Transient Stresses STRESS OES1C/OSTR1C Ply stresses/strains STRESS OES1X Element stresses with intermediate (CBAR and CBEAM)

station stresses and stresses on nonlinear elements

STRESS OES/OESVM Element stresses (linear elements only) STRAIN OSTR1 Element strains STRESS/STRAIN DOES1/DOSTR1 Scaled Response Spectra MODCON OSTRMC Modal contributions

pyNastran.op2.tables.oef_forces.oef.oef_cbar_imag(self, data, obj: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBarForceArray, nelements, ntotal, is_magnitude_phase) → int[source]
pyNastran.op2.tables.oef_forces.oef.oef_cbar_real(self, data, obj: pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBarForceArray, nelements, ntotal) → int[source]
pyNastran.op2.tables.oef_forces.oef.oef_cbeam_imag_177(self, data, obj: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBeamForceArray, nelements, ntotal, is_magnitude_phase) → int[source]
pyNastran.op2.tables.oef_forces.oef.oef_cbeam_real_100(self, data: bytes, obj: pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBeamForceArray, nelements: int, ntotal: int, dt: Any) → int[source]
pyNastran.op2.tables.oef_forces.oef.oef_shells_composite_real_9(self, data: bytes, obj: pyNastran.op2.tables.oef_forces.oef_force_objects.FailureIndicesArray, nelements: int, ntotal: int, dt: Any) → int[source]
oef_complex_force_objects Module
Inheritance diagram of pyNastran.op2.tables.oef_forces.oef_complex_force_objects
class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBarForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBarWeldForceArray

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBarWeldForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

build()[source]

sizes the vectorized attributes of the ComplexCBarForceArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBeamForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

assert_equal(table, rtol=1e-05, atol=1e-08)[source]
build()[source]

sizes the vectorized attributes of the ComplexCBeamForceArray

build_dataframe()[source]

creates a pandas dataframe

finalize()[source]

it’s required that the object be in SORT1

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBeamForceVUArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

ELTYPE = 191 Beam view element (VUBEAM)

2 PARENT I Parent p-element identification number 3 COORD I CID coordinate system identification number 4 ICORD CHAR4 ICORD flat/curved and so on TCODE,7 =0 Real 5 VUGRID I VU grid ID for output grid 6 POSIT RS x/L position of VU grid identification number 7 POS(3) RS Y, Z, W coordinate of output point 10 NX RS Normal x 11 TXY RS Shear xy 12 TZX RS Shear zx

ELTYPE = 191 Beam view element (VUBEAM)

TCODE,7 = 1 Real/imaginary or magnitude/phase 5 VUGRID I VU grid identification number for output grid 6 POSIT RS x/L position of VU grid identification number

7 FORCEXR RS Force x real/mag. 8 SHEARYR RS Shear force y real/mag. 9 SHEARZR RS Shear force z real/mag. 10 TORSINR RS Torsional moment x real/mag. 11 BENDYR RS Bending moment y real/mag. 12 BENDZR RS Bending moment z real/mag.

13 FORCEXI RS Force x imag./phase 14 SHEARYI RS Shear force y imag./phase 15 SHEARZI RS Shear force z imag./phase 16 TORSINI RS Torsional moment x imag./phase 17 BENDYI RS Bending moment y imag./phase 18 BENDZI RS Bending moment z imag./phase Words 5 through max repeat 2 times

build()[source]

sizes the vectorized attributes of the ComplexCBendForceVUArray

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
C O M P L E X F O R C E S I N P - V E R S I O N B E A M E L E M E N T S ( B E A M )

(REAL/IMAGINARY)

VU-ELEMENT ID= 100001001, P-ELEMENT ID = 1, OUTPUT COORD. ID= 0, P OF EDGES = 3

VUGRID VUGRID DIST/ - BENDING MOMENTS - -WEB SHEARS - AXIAL TOTAL

ID. LENGTH PLANE 1 PLANE 2 PLANE 1 PLANE 2 FORCE TORQUE

111001001 0.000 0.000000E+00 -1.598690E+05 0.000000E+00 -1.040952E+06 0.000000E+00 0.000000E+00

0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00

111001002 0.333 0.000000E+00 5.328967E+04 0.000000E+00 1.872484E+05 0.000000E+00 0.000000E+00

0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00

C O M P L E X S T R A I N S I N P - V E R S I O N B E A M E L E M E N T S ( B E A M )

(REAL/IMAGINARY)

VU-ELEMENT ID= 100001003, P-ELEMENT ID = 1, OUTPUT COORD. ID= 0, P OF EDGES = 3

VUGRID VUGRID DIST/ LOCATION LOCATION LOCATION LOCATION

ID. LENGTH C D E F

111001003 0.667 -2.557904E+00 -2.557904E+00 2.557904E+00 2.557904E+00

0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00

111001004 1.000 7.673713E+00 7.673713E+00 -7.673713E+00 -7.673713E+00

0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceMomentArray

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBendForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the ComplexCBendForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex

is the result complex?

property is_real

is the result real?

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBushForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceMomentArray

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCShearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the ComplexCShearForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCWeldForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexCBarWeldForceArray

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexDamperForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexSpringDamperForceArray

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceMomentArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

build()[source]

sizes the vectorized attributes of the ComplexCBushForceArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.ForceObject

property is_complex
property is_real
property nnodes_per_element
class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceVU_2DArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the ComplexCShearForceArray

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexPlate2ForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

add_new_element_sort1(dt, eid, term, nid, mx, my, mxy, bmx, bmy, bmxy, tx, ty)[source]
build()[source]

sizes the vectorized attributes of the ComplexPlate2ForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexPlateForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

build()[source]

sizes the vectorized attributes of the ComplexPlateForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexRodForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

build()[source]

sizes the vectorized attributes of the ComplexRodForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexSolidPressureForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

build()[source]

sizes the vectorized attributes of the ComplexSolidPressureForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexSpringDamperForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexForceObject

build()[source]

sizes the vectorized attributes of the ComplexSpringDamperForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexSpringForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexSpringDamperForceArray

class pyNastran.op2.tables.oef_forces.oef_complex_force_objects.ComplexViscForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the ComplexViscForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
oef_force_objects Module
Inheritance diagram of pyNastran.op2.tables.oef_forces.oef_force_objects
class pyNastran.op2.tables.oef_forces.oef_force_objects.FailureIndicesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the FailureIndices

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.ForceObject(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

eid_to_element_node_index(eids)[source]
finalize() → None[source]

it’s required that the object be in SORT1

get_element_index(eids)[source]
get_headers()[source]
set_as_sort1() → None[source]

the data is in SORT1, but the flags are wrong

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealBendForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealBendForceArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBar100ForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

CBAR-34s are converted to CBAR-100s when you have PLOAD1s (distributed bar loads). The number of stations by default is 2, but with a CBARAO, you can change this (max of 8 points; 6 internal points).

If you use a CBARO without PLOAD1s, you wil turn CBAR-34s into CBAR-100s as well.

build()[source]

sizes the vectorized attributes of the RealCBar100ForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBarFastForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

34-CBAR 118-WELDP (MSC) 119-CFAST

build()[source]

sizes the vectorized attributes of the RealCBarForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBarForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBarFastForceArray

34-CBAR

classmethod add_static_case(table_name, element, data, isubcase, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBeamForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

add_new_element_sort1(dt, eid, nid, sd, bm1, bm2, ts1, ts2, af, ttrq, wtrq)[source]
build()[source]

sizes the vectorized attributes of the RealCBeamForceArray

build_dataframe()[source]

creates a pandas dataframe

finalize()[source]

it’s required that the object be in SORT1

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBeamForceVUArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

ELTYPE = 191 Beam view element (VUBEAM)

2 PARENT I Parent p-element identification number 3 COORD I Coordinate system identification number 4 ICORD CHAR4 Flat/curved and so on

TCODE,7 = 0 Real 5 VUGRID I VU grid ID for output grid 6 POSIT RS x/L position of VU grid identification number 7 FORCEX RS Force x 8 SHEARY RS Shear force y 9 SHEARZ RS Shear force z 10 TORSION RS Torsional moment x 11 BENDY RS Bending moment y 12 BENDZ RS Bending moment z

DIRECT TRANSIENT RESPONSE ADAPTIVITY INDEX= 1

0 PVAL ID= 1 SUBCASE= 1

VU-ELEMENT ID = 100001002

F O R C E S I N P - V E R S I O N B E A M E L E M E N T S ( B E A M )

TIME = 0.000000E+00, P-ELEMENT ID = 1, OUTPUT COORD. ID = 0, P OF EDGES = 1

VUGRID VUGRID DIST/ - BENDING MOMENTS - -WEB SHEARS - AXIAL TOTAL

ID. LENGTH PLANE 1 PLANE 2 PLANE 1 PLANE 2 FORCE TORQUE

111001002 0.333 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 111001003 0.667 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00

F O R C E S I N P - V E R S I O N B E A M E L E M E N T S ( B E A M )

TIME = 1.000000E+00, P-ELEMENT ID = 1, OUTPUT COORD. ID = 0, P OF EDGES = 1

VUGRID VUGRID DIST/ - BENDING MOMENTS - -WEB SHEARS - AXIAL TOTAL

ID. LENGTH PLANE 1 PLANE 2 PLANE 1 PLANE 2 FORCE TORQUE

111001002 0.333 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.982032E-01 0.000000E+00 111001003 0.667 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 9.982032E-01 0.000000E+00

build()[source]

sizes the vectorized attributes of the RealCBeamForceVUArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header()[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceMomentArray

get_f06_header()[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBushForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceMomentArray

get_f06_header()[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCFastForceArrayMSC(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceMomentArray

126-CFAST-MSC

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCFastForceArrayNX(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBarFastForceArray

119-CFAST

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCGapForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealCGapForceArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCShearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealCShearForceArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealCWeldForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealCBarFastForceArray

117-CWELD

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealConeAxForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealConeAxForceArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealDamperForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealSpringDamperForceArray

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
property nnodes_per_element
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceMomentArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealCBushForceArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.ForceObject

property is_complex
property is_real
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceVU2DArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

F O R C E S I N P - V E R S I O N T R I A N G U L A R E L E M E N T S ( T R I A 3 )

TIME = 2.500000E-03, P-ELEMENT ID = 11, OUTPUT COORD. ID = 0, P OF EDGES = 3 3 3

LOCAL X DIR. = PROJECTED +X DIR., LOCAL NORMAL = COUNTER-CLOCKWISE, ANGLE = 0.0000

VUGRID - MEMBRANE FORCES - - BENDING MOMENTS - - TRANSVERSE SHEAR FORCES -

ID. FX FY FXY MX MY MXY QX QY

111001001 1.497761E+02 4.493284E+01 1.755556E+01 4.601057E+02 1.380317E+02 3.821717E+01 1.924838E+01 1.298280E-13 111001002 -1.284408E+01 -9.296992E-01 -6.540499E+00 -3.195809E+01 9.447659E+01 2.340929E+00 -4.620755E-01 1.074264E+01 111001003 -1.336704E+02 -4.010114E+01 1.236144E+01 4.553836E+02 1.366151E+02 -2.018654E+01 9.028288E+01 -1.651896E-13

build()[source]

sizes the vectorized attributes of the RealForceVU2DArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]

F O R C E S I N P - V E R S I O N T R I A N G U L A R E L E M E N T S ( T R I A 3 )

TIME = 2.500000E-03, P-ELEMENT ID = 11, OUTPUT COORD. ID = 0, P OF EDGES = 3 3 3

LOCAL X DIR. = PROJECTED +X DIR., LOCAL NORMAL = COUNTER-CLOCKWISE, ANGLE = 0.0000

VUGRID - MEMBRANE FORCES - - BENDING MOMENTS - - TRANSVERSE SHEAR FORCES -

ID. FX FY FXY MX MY MXY QX QY

111001001 1.497761E+02 4.493284E+01 1.755556E+01 4.601057E+02 1.380317E+02 3.821717E+01 1.924838E+01 1.298280E-13 111001002 -1.284408E+01 -9.296992E-01 -6.540499E+00 -3.195809E+01 9.447659E+01 2.340929E+00 -4.620755E-01 1.074264E+01 111001003 -1.336704E+02 -4.010114E+01 1.236144E+01 4.553836E+02 1.366151E+02 -2.018654E+01 9.028288E+01 -1.651896E-13

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealPlateBilinearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealPlateBilinearForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealPlateForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealPlateForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealRodForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

classmethod add_static_case(table_name, element_name, element, data, isubcase, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
build()[source]

sizes the vectorized attributes of the RealRodForceArray

build_data(ntimes, nelements, float_fmt='float32')[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealSolidPressureForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealSolidPressureForceArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealSpringDamperForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

classmethod add_static_case(table_name, element_name, element, data, isubcase, is_sort1=True, is_random=False, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
build()[source]

sizes the vectorized attributes of the RealSpringDamperForceArray

build_data(ntimes, nelements, dtype, idtype, fdtype)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_stats(short: bool = False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oef_forces.oef_force_objects.RealSpringForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealSpringDamperForceArray

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
property nnodes_per_element
class pyNastran.op2.tables.oef_forces.oef_force_objects.RealViscForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build()[source]

sizes the vectorized attributes of the RealViscForceArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
pyNastran.op2.tables.oef_forces.oef_force_objects.oef_data_code(table_name, analysis_code, is_sort1=True, is_random=False, random_code=0, title='', subtitle='', label='', is_msc=True)[source]
oef_thermal_objects Module
Inheritance diagram of pyNastran.op2.tables.oef_forces.oef_thermal_objects
class pyNastran.op2.tables.oef_forces.oef_thermal_objects.Real1DHeatFluxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

1-ROD, 2-BEAM, 3-TUBE, 10-CONROD, 34-BAR, 69-BEND

build()[source]

sizes the vectorized attributes of the Real1DHeatFluxArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex

is the result complex?

property is_real

is the result real?

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_thermal_objects.RealChbdyHeatFluxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the RealChbdyHeatFluxArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex

is the result complex?

property is_real

is the result real?

property nnodes_per_element
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oef_forces.oef_thermal_objects.RealConvHeatFluxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the RealConvHeatFluxArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex

is the result complex?

property is_real

is the result real?

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oef_forces.oef_thermal_objects.RealHeatFluxVU3DArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

189-VUQUAD 190-VUTRIA,191-VUBEAM

build()[source]

sizes the vectorized attributes of the RealHeatFluxVU3DArray

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oef_forces.oef_thermal_objects.RealHeatFluxVUBeamArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the RealHeatFluxVUBeamArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oef_forces.oef_thermal_objects.RealHeatFluxVUShellArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build()[source]

sizes the vectorized attributes of the ElementTableArray

data_type() → str[source]
get_stats(short: bool = False) → List[str][source]
property headers
property is_complex

is the result complex?

property is_real

is the result real?

class pyNastran.op2.tables.oef_forces.oef_thermal_objects.RealHeatFlux_2D_3DArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.element_table_object.RealElementTableArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
pyNastran/op2/tables/oes_stress_strain
oes_stress_strain Package
oes_nonlinear_rod Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.oes_nonlinear_rod
class pyNastran.op2.tables.oes_stressStrain.oes_nonlinear_rod.RealNonlinearRodArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

ELEMENT-ID =     102
                         N O N L I N E A R   S T R E S S E S   I N   R O D   E L E M E N T S      ( C R O D )
  TIME          AXIAL STRESS         EQUIVALENT         TOTAL STRAIN       EFF. STRAIN          EFF. CREEP        LIN. TORSIONAL
                                       STRESS                             PLASTIC/NLELAST          STRAIN              STRESS
2.000E-02        1.941367E+01        1.941367E+01        1.941367E-04        0.0                 0.0                 0.0
3.000E-02        1.941367E+01        1.941367E+01        1.941367E-04        0.0                 0.0                 0.0

tested by elements/loadstep_elements.op2

build()[source]

sizes the vectorized attributes of the RealNonlinearRodArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

oes_objects Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_objects
class pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

finalize()[source]

it’s required that the object be in SORT1

property is_curvature
property is_fiber_distance
property is_max_shear
property is_stress
property is_von_mises
set_as_sort1()[source]

the data is in SORT1, but the flags are wrong

class pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject(data_code, isubcase)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

property is_strain
property is_stress
update_dt(data_code, dt)[source]

This method is called if the object already exits and a new time/freq/load step is found

class pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject(data_code, isubcase)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

property is_strain
property is_stress
update_dt(data_code, dt)[source]

This method is called if the object already exits and a new time/freq/load step is found

pyNastran.op2.tables.oes_stressStrain.real.oes_objects.oes_data_code(table_name, analysis_code, is_sort1=True, is_random=False, random_code=0, title='', subtitle='', label='', is_msc=True)[source]
Subpackages
oes Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.oes
Defines the Real/Complex Stresses/Strains created by:

STRESS = ALL STRAIN = ALL

NX Case Control Block Description =============== ========== =========== NLSTRESS OESNLXR Nonlinear static stresses BOUTPUT OESNLBR Slideline stresses STRESS OESNLXD Nonlinear Transient Stresses STRESS OES1C/OSTR1C Ply stresses/strains STRESS OES1X Element stresses with intermediate (CBAR and CBEAM)

station stresses and stresses on nonlinear elements

STRESS OES/OESVM Element stresses (linear elements only) STRAIN OSTR1 Element strains STRESS/STRAIN DOES1/DOSTR1 Scaled Response Spectra MODCON OSTRMC Modal contributions

class pyNastran.op2.tables.oes_stressStrain.oes.OES[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

Defines the OES class that is used to read stress/strain data

get_oes_prefix_postfix() → Tuple[str, str][source]

Creates the prefix/postfix that splits off ATO, CRM, PSD, nonlinear, etc. results. We also fix some of the sort bits as typing:

STRESS(PLOT,SORT1,RALL) = ALL

will actually create the OESRMS2 table (depending on what else is in your case control). However, it’s in an OESATO2 table, so we know it’s really SORT2.

Also, if you’re validating the sort_bit flags, *RMS2 and *NO2 are actually SORT1 tables.

NX Case Control Block Description =============== ========== =========== NLSTRESS OESNLXR Nonlinear static stresses BOUTPUT OESNLBR Slideline stresses STRESS OESNLXD Nonlinear Transient Stresses STRESS OES1C/OSTR1C Ply stresses/strains STRESS OES1X Element stresses with intermediate (CBAR and CBEAM)

station stresses and stresses on nonlinear elements

STRESS OES/OESVM Element stresses (linear elements only) STRAIN OSTR1 Element strains STRESS/STRAIN DOES1/DOSTR1 Scaled Response Spectra MODCON OSTRMC Modal contributions

get_stress_mapper()[source]
obj_set_element(obj, ielement, ielement2, data, nelements)[source]
oesrt_cquad4_95(data: bytes, ndata: int) → int[source]

unsupported element

pyNastran.op2.tables.oes_stressStrain.oes.oes_cbar100_real_10(self, data: bytes, obj, nelements: int, ntotal: int, dt: Any) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cbar_complex_19(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarStressArray, pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarStrainArray], nelements: int, ntotal: int, is_magnitude_phase: bool) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cbar_real_16(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarStressArray, pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarStrainArray], nelements: int, ntotal: int, dt) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cbeam_complex_111(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.complex.oes_beams.ComplexBeamStressArray, pyNastran.op2.tables.oes_stressStrain.complex.oes_beams.ComplexBeamStrainArray], nelements: int, nnodes: int, ntotal: int, is_magnitude_phase: bool) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cbeam_random_67(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamStressArray, pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamStrainArray], nelements: int, nnodes: int, ntotal: int, dt: Any) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cbeam_real_111(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamStressArray, pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamStrainArray], nelements: int, ntotal: int, dt: Any) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cquad4_144_random(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStressArray, pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStrainArray], nelements: int, ntotal: int, nnodes: int, ndata: int) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cquad4_144_real(self, data: bytes, ndata: int, obj: pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateStrainArray, ntotal: int, nelements: int, nnodes: int, dt: Any) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cquad4_33_complex_15(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateStressArray, pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateStrainArray], nelements: int, ntotal: int, nnodes: int, is_magnitude_phase: bool) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cquad4_33_complex_17(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateStressArray, pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateStrainArray], nelements: int, ntotal: int, is_magnitude_phase: bool) → int[source]

OESVM1/2 - Table of element stresses or strains with von Mises OSTRVM1/2 for frequency response results.

pyNastran.op2.tables.oes_stressStrain.oes.oes_cquad4_33_random_11(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStressArray, pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStrainArray], nelements: int, ntotal: int) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_cquad4_33_random_9(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStressArray, pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStrainArray], nelements: int, ntotal: int) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_ctria3_random_11(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStressArray, pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStrainArray], nelements: int, ntotal: int) → int[source]
pyNastran.op2.tables.oes_stressStrain.oes.oes_ctria3_random_9(self, data: bytes, obj: Union[pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStressArray, pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStrainArray], nelements: int, ntotal: int) → int[source]
oes_hyperelastic Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.oes_hyperelastic
class pyNastran.op2.tables.oes_stressStrain.oes_hyperelastic.HyperelasticQuadArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the HyperelasticQuadArray

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
is_complex() → bool[source]
is_real() → bool[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oes_nonlinear Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.oes_nonlinear
defines:
  • RealNonlinearPlateArray

class pyNastran.op2.tables.oes_stressStrain.oes_nonlinear.RealNonlinearPlateArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

tested by elements/loadstep_elements.op2

add_new_eid_sort1(dt, eid, etype, fd, sx, sy, sz, txy, es, eps, ecs, ex, ey, ez, exy)[source]
build()[source]

sizes the vectorized attributes of the RealNonlinearPlateArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property is_stress
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.oes_nonlinear.RealNonlinearSolidArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

tested by elements/loadstep_elements.op2

build()[source]

sizes the vectorized attributes of the RealNonlinearPlateArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property is_stress
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
pyNastran.op2.tables.oes_stressStrain.oes_nonlinear.nan_filter(t1, t2)[source]
Real
oes_bars Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_bars
class pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(dt, eid, s1a, s2a, s3a, s4a, axial, smaxa, smina, MSt, s1b, s2b, s3b, s4b, smaxb, sminb, MSc)[source]
classmethod add_static_case(table_name, element_name, element, data, isubcase, is_sort1=True, is_random=False, is_stress=True, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
build()[source]

sizes the vectorized attributes of the RealBarArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_bars.RealBarArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_bars100 Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_bars100
class pyNastran.op2.tables.oes_stressStrain.real.oes_bars100.RealBar10NodesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(etype, dt, eid, sd, sxc, sxd, sxe, sxf, axial, smax, smin, MS)[source]
build()[source]

sizes the vectorized attributes of the RealBar10NodesArray

build_dataframe()[source]

creates a pandas dataframe

get_element_index(eids)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_bars100.RealBar10NodesStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_bars100.RealBar10NodesArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_bars100.RealBar10NodesStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_bars100.RealBar10NodesArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_bush Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_bush
class pyNastran.op2.tables.oes_stressStrain.real.oes_bush.RealBushArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the RealBushArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_elements
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_bush.RealBushStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_bush.RealBushArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_bush.RealBushStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_bush.RealBushArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_bush1d Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_bush1d
class pyNastran.op2.tables.oes_stressStrain.real.oes_bush1d.RealBush1DStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the RealBush1DStressArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property is_stress
property nnodes_per_elements
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
oes_beams Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_beams
class pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamArray(data_code, is_sort1, isubcase, unused_dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

common class used by:
  • RealBeamStressArray

  • RealBeamStrainArray

add_new_eid_sort1(dt, eid, grid, sd, sxc, sxd, sxe, sxf, smax, smin, mst, msc)[source]
build()[source]

sizes the vectorized attributes of the RealBeamArray

build_dataframe()[source]

creates a pandas dataframe

finalize()[source]

it’s required that the object be in SORT1

get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

Real CBEAM Strain

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealBeamArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

Real CBEAM Stress

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealNonlinearBeamArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

tested by elements/loadstep_elements.op2

add_new_eid_sort1(dt, eid, grid_a, unused_ca, long_ca, eqs_ca, te_ca, eps_ca, ecs_ca, unused_da, long_da, eqs_da, te_da, eps_da, ecs_da, unused_ea, long_ea, eqs_ea, te_ea, eps_ea, ecs_ea, unused_fa, long_fa, eqs_fa, te_fa, eps_fa, ecs_fa, grid_b, unused_cb, long_cb, eqs_cb, te_cb, eps_cb, ecs_cb, unused_db, long_db, eqs_db, te_db, eps_db, ecs_db, unused_eb, long_eb, eqs_eb, te_eb, eps_eb, ecs_eb, unused_fb, long_fb, eqs_fb, te_fb, eps_fb, ecs_fb)[source]
build()[source]

sizes the vectorized attributes of the RealNonlinearBeamArray

get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealNonlinearBeamStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_beams.RealNonlinearBeamArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

tested by elements/loadstep_elements.op2

get_headers() → List[str][source]
oes_composite_plates Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_composite_plates
class pyNastran.op2.tables.oes_stressStrain.real.oes_composite_plates.RealCompositePlateArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(etype, dt, eid, layer, o11, o22, t12, t1z, t2z, angle, major, minor, ovm)[source]
build()[source]

sizes the vectorized attributes of the RealCompositePlateArray

build_dataframe()[source]

major-axis - the axis

mode 1 2 3 freq 1.0 2.0 3.0 T1 T2 T3 R1 R2 R3

major_axis / top = [

[1, 2, 3], [1.0, 2.0, 3.0]

] minor_axis / headers = [T1, T2, T3, R1, R2, R3] name = mode

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_composite_plates.RealCompositePlateStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_composite_plates.RealCompositePlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
property is_strain
property is_stress
class pyNastran.op2.tables.oes_stressStrain.real.oes_composite_plates.RealCompositePlateStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_composite_plates.RealCompositePlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
property is_strain
property is_stress
oes_gap Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_gap
class pyNastran.op2.tables.oes_stressStrain.real.oes_gap.NonlinearGapStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the NonlinearGapStressArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers() → List[str][source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
oes_plates Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_plates
class pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(dt, eid, node_id, fiber_dist, oxx, oyy, txy, angle, major_principal, minor_principal, ovm)[source]
add_new_node_sort1(dt, eid, node_id, fiber_dist, oxx, oyy, txy, angle, major_principal, minor_principal, ovm)[source]
build()[source]

sizes the vectorized attributes of the RealPlateArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_nnodes_bilinear()[source]

gets the number of nodes and whether or not the element has bilinear results

get_stats(short=False) → List[str][source]
is_bilinear()[source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

used for:
  • RealPlateStressArray

  • RealPlateStrainArray

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_plates.RealPlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_rods Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_rods
class pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealBushStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealRodArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

classmethod add_static_case(table_name, element_name, element, data, isubcase, is_sort1=True, is_random=False, is_stress=True, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
build()[source]

sizes the vectorized attributes of the RealRodArray

build_data(ntimes, nelements, dtype, idtype, fdtype)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealRodStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealRodStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_rods.RealRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_shear Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_shear
class pyNastran.op2.tables.oes_stressStrain.real.oes_shear.RealShearArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the RealShearArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header()[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_shear.RealShearStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_shear.RealShearArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_f06_header() → List[str][source]
get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_shear.RealShearStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_shear.RealShearArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_f06_header()[source]
get_headers() → List[str][source]
oes_solids Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_solids
class pyNastran.op2.tables.oes_stressStrain.real.oes_solids.RealSolidArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_eid_sort1(unused_etype, cid, dt, eid, unused_node_id, oxx, oyy, ozz, txy, tyz, txz, o1, o2, o3, unused_acos, unused_bcos, unused_ccos, unused_pressure, ovm)[source]
add_node_sort1(dt, eid, unused_inode, node_id, oxx, oyy, ozz, txy, tyz, txz, o1, o2, o3, unused_acos, unused_bcos, unused_ccos, unused_pressure, ovm)[source]
build()[source]

sizes the vectorized attributes of the RealSolidArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
property nnodes_per_element_no_centroid
update_data_components()[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_solids.RealSolidStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_solids.RealSolidArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_solids.RealSolidStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_solids.RealSolidArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_springs Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_springs
class pyNastran.op2.tables.oes_stressStrain.real.oes_springs.RealNonlinearSpringStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

#ELEMENT-ID =     102
                         #N O N L I N E A R   S T R E S S E S   I N   R O D   E L E M E N T S      ( C R O D )
  #TIME          AXIAL STRESS         EQUIVALENT         TOTAL STRAIN       EFF. STRAIN          EFF. CREEP        LIN. TORSIONAL
                                       #STRESS                             PLASTIC/NLELAST          STRAIN              STRESS
#2.000E-02        1.941367E+01        1.941367E+01        1.941367E-04        0.0                 0.0                 0.0
#3.000E-02        1.941367E+01        1.941367E+01        1.941367E-04        0.0                 0.0                 0.0
build()[source]

sizes the vectorized attributes of the RealNonlinearSpringStressArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property is_stress
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_springs.RealSpringArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

classmethod add_static_case(table_name, element_name, element, data, isubcase, is_sort1=True, is_random=False, is_stress=True, is_msc=True, random_code=0, title='', subtitle='', label='')[source]
build()[source]

sizes the vectorized attributes of the RealSpringArray

build_data(ntimes, nelements, dtype)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

v 0.24 Static 0 ElementID Item 30 spring_stress 0.0 31 spring_stress 0.0 32 spring_stress 0.0 33 spring_stress 0.0

v 0.25 for test_bdf_op2_elements_01 Static ElementID spring_stress 0 30 0.0 1 31 0.0 2 32 0.0 3 33 0.0 …

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
update_data_components()[source]
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.real.oes_springs.RealSpringStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_springs.RealSpringArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_springs.RealSpringStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_springs.RealSpringArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
oes_triax Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.real.oes_triax
class pyNastran.op2.tables.oes_stressStrain.real.oes_triax.RealTriaxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the RealTriaxArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_triax.RealTriaxStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_triax.RealTriaxArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.real.oes_triax.RealTriaxStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_triax.RealTriaxArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
Complex
oes_bars Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_bars
class pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(dt, eid, e1a, e2a, e3a, e4a, axial, e1b, e2b, e3b, e4b)[source]
build()[source]

sizes the vectorized attributes of the ComplexCBarArray

build_dataframe()[source]

creates a pandas dataframe

get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_bars.ComplexBarArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_bush Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_bush
class pyNastran.op2.tables.oes_stressStrain.complex.oes_bush.ComplexCBushArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the ComplexCBushArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.complex.oes_bush.ComplexCBushStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_bush.ComplexCBushArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_f06_header(is_mag_phase=True)[source]

C:UserssdoyleDropboxmove_tplofprand1.op2

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_bush.ComplexCBushStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_bush.ComplexCBushArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
oes_bush1d Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_bush1d
class pyNastran.op2.tables.oes_stressStrain.complex.oes_bush1d.ComplexCBush1DArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the ComplexCBush1DArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_bush1d.ComplexCBush1DStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_bush1d.ComplexCBush1DArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
oes_plates Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_plates
class pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

ELEMENT FIBER - STRESSES IN ELEMENT COORDINATE SYSTEM -

ID. DISTANCE NORMAL-X NORMAL-Y SHEAR-XY VON MISES

0 101 -5.000000E-01 -8.152692E-01 / 0.0 -1.321875E+00 / 0.0 -3.158517E+00 / 0.0 5.591334E+00

5.000000E-01 1.728573E+00 / 0.0 -7.103837E+00 / 0.0 2.856040E+00 / 0.0 9.497519E+00

floats = (1011,
-0.5, -0.8152692, 0.0, -1.321874, 0.0, -3.158516, 0.0, 5.591334,

0.5, 1.7285730, 0.0, -7.103837, 0.0, 2.856039, 0.0, 9.497518)

add_ovm_sort1(dt, eid, node_id, fdr, oxx, oyy, txy, ovm) → None[source]
build() → None[source]

sizes the vectorized attributes of the ComplexPlateArray

build_dataframe() → None[source]

creates a pandas dataframe

get_stats(short: bool = False) → List[str][source]
property has_von_mises

what is the form of the table (NX includes Von Mises)

property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True) → int[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>') → int[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexPlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.ComplexTriaxStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_eid_sort1(dt, eid, loc, rs, azs, As, ss)[source]
add_new_eid_sort1(dt, eid, node_id, fdr, oxx, oyy, txy)[source]
add_new_node_sort1(dt, eid, gridc, fdr, oxx, oyy, txy)[source]
build() → None[source]

sizes the vectorized attributes of the ComplexPlateArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
pyNastran.op2.tables.oes_stressStrain.complex.oes_plates.get_nnodes(self)[source]
oes_rods Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_rods
class pyNastran.op2.tables.oes_stressStrain.complex.oes_rods.ComplexRodArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the ComplexRodArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.complex.oes_rods.ComplexRodStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_rods.ComplexRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_rods.ComplexRodStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_rods.ComplexRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_f06_header(is_mag_phase=True)[source]
get_headers() → List[str][source]
oes_solids Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_solids
class pyNastran.op2.tables.oes_stressStrain.complex.oes_solids.ComplexSolidArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_eid_sort1(element_num, element_type, dt, eid, cid, ctype, nodef)[source]
add_node_sort1(dt, eid, grid, inode, ex, ey, ez, etxy, etyz, etzx)[source]
build()[source]

sizes the vectorized attributes of the ComplexSolidArray

build_dataframe()[source]

creates a pandas dataframe

combine(results)[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.complex.oes_solids.ComplexSolidStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_solids.ComplexSolidArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_solids.ComplexSolidStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_solids.ComplexSolidArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
pyNastran.op2.tables.oes_stressStrain.complex.oes_solids.get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
oes_shear Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_shear
class pyNastran.op2.tables.oes_stressStrain.complex.oes_shear.ComplexShearArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

Common class for:
  • ComplexShearStressArray

  • ComplexShearStrainArray

build()[source]

sizes the vectorized attributes of the ComplexShearArray

build_dataframe()[source]

creates a pandas dataframe

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property headers
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
C O M P L E X F O R C E S A C T I N G O N S H E A R P A N E L E L E M E N T S (CSHEAR)

(REAL/IMAGINARY)

====== POINT 1 ====== ====== POINT 2 ====== ====== POINT 3 ====== ====== POINT 4 ======

ELEMENT F-FROM-4 F-FROM-2 F-FROM-1 F-FROM-3 F-FROM-2 F-FROM-4 F-FROM-3 F-FROM-1
ID KICK-1 SHEAR-12 KICK-2 SHEAR-23 KICK-3 SHEAR-34 KICK-4 SHEAR-41
28 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

class pyNastran.op2.tables.oes_stressStrain.complex.oes_shear.ComplexShearStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_shear.ComplexShearArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

class pyNastran.op2.tables.oes_stressStrain.complex.oes_shear.ComplexShearStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_shear.ComplexShearArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

oes_springs Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.complex.oes_springs
class pyNastran.op2.tables.oes_stressStrain.complex.oes_springs.ComplexSpringDamperArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the ComplexSpringDamperArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header(is_mag_phase=True, is_sort1=True)[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.oes_stressStrain.complex.oes_springs.ComplexSpringStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_springs.ComplexSpringDamperArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.complex.oes_springs.ComplexSpringStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.complex.oes_springs.ComplexSpringDamperArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
Random
oes_bars Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_bars
class pyNastran.op2.tables.oes_stressStrain.random.oes_bars.RandomBarArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(dt, eid, s1a, s2a, s3a, s4a, axial, s1b, s2b, s3b, s4b)[source]
build()[source]

sizes the vectorized attributes of the RealBarArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_bars.RandomBarStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_bars.RandomBarArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_bars.RandomBarStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_bars.RandomBarArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_bend Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_bend
class pyNastran.op2.tables.oes_stressStrain.random.oes_bend.RandomBendArray(data_code, is_sort1, isubcase, unused_dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

common class used by:
  • RandomBendStressArray

  • RandomBendStrainArray

build()[source]

sizes the vectorized attributes of the RealBeamArray

build_dataframe()[source]

creates a pandas dataframe

finalize()[source]

it’s required that the object be in SORT1

get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_bend.RandomBendStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_bend.RandomBendArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

Random CBEND Strain

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_bend.RandomBendStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_bend.RandomBendArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

Random CBEND Stress

get_headers() → List[str][source]
oes_beams Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_beams
class pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamArray(data_code, is_sort1, isubcase, unused_dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

common class used by:
  • RandomBeamStressArray

  • RandomBeamStrainArray

add_new_eid_sort1(dt, eid, grid, sd, sxc, sxd, sxe, sxf)[source]
build()[source]

sizes the vectorized attributes of the RealBeamArray

build_dataframe()[source]

creates a pandas dataframe

finalize()[source]

it’s required that the object be in SORT1

get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

Random CBEAM Strain

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_beams.RandomBeamArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

Random CBEAM Stress

get_headers() → List[str][source]
oes_composite_plates Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_composite_plates
class pyNastran.op2.tables.oes_stressStrain.random.oes_composite_plates.RandomCompositePlateArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_new_eid_sort1(etype, dt, eid, layer, o11, o22, t12)[source]
build()[source]

sizes the vectorized attributes of the RealCompositePlateArray

build_dataframe()[source]

major-axis - the axis

mode 1 2 3 freq 1.0 2.0 3.0 T1 T2 T3 R1 R2 R3

major_axis / top = [

[1, 2, 3], [1.0, 2.0, 3.0]

] minor_axis / headers = [T1, T2, T3, R1, R2, R3] name = mode

eid_to_element_node_index(eids)[source]
finalize()[source]

Calls any OP2 objects that need to do any post matrix calcs

get_element_index(eids)[source]
get_f06_header(is_mag_phase=True)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property has_von_mises

what is the form of the table (NX includes Von Mises)

property is_complex
property is_real
nnodes_per_element()[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_composite_plates.RandomCompositePlateStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_composite_plates.RandomCompositePlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
property is_strain
property is_stress
class pyNastran.op2.tables.oes_stressStrain.random.oes_composite_plates.RandomCompositePlateStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_composite_plates.RandomCompositePlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
property is_strain
property is_stress
oes_plates Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_plates
class pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_ovm_sort1(dt, eid, nid, fd1, oxx1, oyy1, txy1, ovm1, fd2, oxx2, oyy2, txy2, ovm2)[source]

unvectorized method for adding SORT1 transient data

add_ovm_sort2(dt, eid, nid, fd1, oxx1, oyy1, txy1, ovm1, fd2, oxx2, oyy2, txy2, ovm2)[source]

unvectorized method for adding SORT2 transient data

build()[source]

sizes the vectorized attributes of the ComplexPlateArray

build_data(ntimes, nelements, nlayers, nnodes, ntotal, nx, ny, dtype)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

finalize()[source]

Calls any OP2 objects that need to do any post matrix calcs

get_stats(short=False) → List[str][source]
property has_von_mises

what is the form of the table (NX includes Von Mises)

property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_plates.RandomPlateArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

NX 2 FD1 RS Z1 = Fibre Distance 3 SX1 RS Normal in x at Z1 4 SY1 RS Normal in y at Z1 5 TXY1 RS Shear in xy at Z1 6 FD2 RS Z2 = Fibre Distance 7 SX2 RS Normal in x at Z2 8 SY2 RS Normal in y at Z2 9 TXY2 RS Shear in xy at Z2

get_headers() → List[str][source]
pyNastran.op2.tables.oes_stressStrain.random.oes_plates.get_nnodes(self)[source]
oes_rods Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_rods
class pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomBushStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomRodArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the RealRodArray

build_data(ntimes, nelements, dtype)[source]

actually performs the build step

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_f06_header(is_mag_phase=True)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomRodStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomRodStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_rods.RandomRodArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
oes_shear Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_shear
class pyNastran.op2.tables.oes_stressStrain.random.oes_shear.RandomShearArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build()[source]

sizes the vectorized attributes of the RealShearArray

build_dataframe()[source]

creates a pandas dataframe

get_f06_header()[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_shear.RandomShearStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_shear.RandomShearArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_f06_header()[source]
get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_shear.RandomShearStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_shear.RandomShearArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_f06_header()[source]
get_headers() → List[str][source]
oes_solids Module
Inheritance diagram of pyNastran.op2.tables.oes_stressStrain.random.oes_solids
class pyNastran.op2.tables.oes_stressStrain.random.oes_solids.RandomSolidArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

add_eid_sort1(unused_etype, cid, dt, eid, unused_node_id, oxx, oyy, ozz, txy, tyz, txz)[source]
add_node_sort1(dt, eid, unused_inode, node_id, oxx, oyy, ozz, txy, tyz, txz)[source]
build()[source]

sizes the vectorized attributes of the RealSolidArray

build_dataframe()[source]

creates a pandas dataframe

eid_to_element_node_index(eids)[source]
get_element_index(eids)[source]
get_headers()[source]
get_stats(short=False) → List[str][source]
property is_complex
property is_real
property nnodes_per_element
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_solids.RandomSolidStrainArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_solids.RandomSolidArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StrainObject

get_headers() → List[str][source]
class pyNastran.op2.tables.oes_stressStrain.random.oes_solids.RandomSolidStressArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.random.oes_solids.RandomSolidArray, pyNastran.op2.tables.oes_stressStrain.real.oes_objects.StressObject

get_headers() → List[str][source]
pyNastran/op2/tables/ogf_gridPointForces
ogf_gridPointForces Package
ogf_objects Module
Inheritance diagram of pyNastran.op2.tables.ogf_gridPointForces.ogf_objects
class pyNastran.op2.tables.ogf_gridPointForces.ogf_objects.ComplexGridPointForcesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.ogf_gridPointForces.ogf_objects.GridPointForces

build()[source]

sizes the vectorized attributes of the ComplexGridPointForcesArray

build_dataframe()[source]

major-axis - the axis

mode 1 2 3 freq 1.0 2.0 3.0 nodeID ElementID Item 1 2 T1

major_axis / top = [

[1, 2, 3], [1.0, 2.0, 3.0]

] minor_axis / headers = [T1, T2, T3, R1, R2, R3] name = mode

property element_name
get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_op2(op2_file, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

class pyNastran.op2.tables.ogf_gridPointForces.ogf_objects.GridPointForces(data_code, is_sort1, isubcase)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

class pyNastran.op2.tables.ogf_gridPointForces.ogf_objects.RealGridPointForcesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.ogf_gridPointForces.ogf_objects.GridPointForces

G R I D P O I N T F O R C E B A L A N C E

POINT-ID ELEMENT-ID SOURCE T1 T2 T3 R1 R2 R3

0 13683 3736 TRIAX6 4.996584E+00 0.0 1.203093E+02 0.0 0.0 0.0

13683 3737 TRIAX6 -4.996584E+00 0.0 -1.203093E+02 0.0 0.0 0.0 13683 TOTALS 6.366463E-12 0.0 -1.364242E-12 0.0 0.0 0.0

assert_equal(table, rtol=1e-05, atol=1e-08)[source]
build() → None[source]

sizes the vectorized attributes of the RealGridPointForcesArray

build_dataframe() → None[source]

major-axis - the axis

mode 1 2 3 freq 1.0 2.0 3.0 nodeID ElementID Item 1 2 T1

major_axis / top = [

[1, 2, 3], [1.0, 2.0, 3.0]

] minor_axis / headers = [T1, T2, T3, R1, R2, R3] name = mode

property element_name
extract_freebody_loads(eids: NDArrayNint, coord_out: CORD, coords: Dict[int, CORD], nid_cd: NDArrayN2int, icd_transform: Dict[int, NDArrayNint], itime=0, debug=True, log: Optional[SimpleLogger] = None)[source]

Extracts Patran-style freebody loads. Freebody loads are the external loads.

Parameters
eids(Nelements, ) int ndarray

all the elements to consider

coord_outCORD2R()

the output coordinate system

coordsdict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd(Nnodes, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transformdict[cd] = (Nnodesi, ) int ndarray

the mapping for nid_cd

summation_point(3, ) float ndarray

the summation point in output??? coordinate system

itimeint; default=0

the time to extract loads for

debugbool; default=False

debugging flag

loglog; default=None

a log object that gets used when debug=True

Returns
force_out(Nnodes, 3) float ndarray

the ith float components in the coord_out coordinate frame

moment_out(Nnodes, 3) float ndarray

the ith moment components about the summation point in the coord_out coordinate frame

Todo

doesn’t seem to handle cylindrical/spherical systems ..

Warning

not done ..

extract_interface_loads(nids: NDArrayNint, eids: NDArrayNint, coord_out, coords, nid_cd, icd_transform, xyz_cid0: NDArrayN3float, summation_point: Optional[NDArray3float] = None, consider_rxf: bool = True, itime: int = 0, debug: bool = False, log: Optional[SimpleLogger] = None) → Tuple[NDArray3float, NDArray3float][source]

Extracts Patran-style interface loads. Interface loads are the internal loads at a cut.

Parameters
nids(Nnodes, ) int ndarray

all the nodes to consider; must be sorted

eids(Nelements, ) int ndarray

all the elements to consider; must be sorted

coord_outCORD2R()

the output coordinate system

coordsdict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd(Nnodes, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transformdict[cd] = (Nnodesi, ) int ndarray

the mapping for nid_cd

xyz_cid0(nnodes + nspoints + nepoints, 3) ndarray

the grid locations in coordinate system 0

summation_point0(3, ) float ndarray; default=None

None : no load summation array : the summation point in the global frame

consider_rxfbool; default=True

considers the r x F term

itimeint; default=0

the time to extract loads for

debugbool; default=False

debugging flag

loggerlogger; default=None

a logger object that gets used when debug=True

Returns
force_out(Nnodes, 3) float ndarray

the ith float components in the coord_out coordinate frame

moment_out(Nnodes, 3) float ndarray

the ith moment components about the summation point in the coord_out coordinate frame

force_out_sum(3, ) float ndarray

the sum of forces in the coord_out coordinate frame

moment_out_sum(3, ) float ndarray

the sum of moments about the summation point in the coord_out coordinate frame

Todo

doesn’t seem to handle cylindrical/spherical systems ..

Todo

Add support for: 2D output style:

  • This would allow for shell problems to have loads applied in the plane of the shells

  • This would require normals

1D output style:
  • Make loads in the direction of the element

This process can’t be done for 0D or 3D elements

finalize() → bool[source]

required so the OP2 writer works…

find_centroid_of_load(f, m)[source]

Mx = ry*Fz - rz*Fy My = rz*Fx - rx*Fz Mz = rx*Fy - ry*Fx

{M} = [F]{r} [F] = [

[ 0, -Fy, Fz], [-Fz, 0, Fx], [ Fy, -Fx, 0],

] {r} = [F]^-1 {M}

When the determinant of [F] is nonzero (2D):

Life is easy

When the determinant of [F] is zero: When Fx != Fy != Fz and they don’t equal 0 there are 3 solutions:

where M=[0, 0, 0]

det([F]) = 0:

[F]{x} = [lambda]{x}

where one of the eigenvalues is 0? (the trivial case) and

However, [F] is singular, so let rx=0: Mx = ry*Fz - rz*Fy My = rz*Fx Mz = -ry*Fx let Fx=0, so ry, rz != 0, but My=Mz=0 -> ry = rz*Fy/Fz let rz = 1 -> ry = Fy/Fz <0, Fy/Fz, 1>

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
shear_moment_diagram(xyz_cid0, eids, nids, icd_transform, element_centroids_cid0, coords, nid_cd, stations, coord_out, idir=0, itime=0, debug=False, log=None)[source]

Computes a series of forces/moments at various stations along a structure.

Parameters
xyz_cid0(Nnodes, 3) float ndarray

all the nodes in the model xyz position in the global frame

eids(Nelements, ) int ndarray

an array of element ids to consider

nids(Nnodes, ) int ndarray

an array of node ids corresponding to xyz_cid0

icd_transformdict[cd] = (Nnodesi, ) int ndarray

the mapping for nid_cd

element_centroids_cid0(Nelements, 3) float ndarray

an array of element centroids corresponding to eids

coordsdict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd(Nnodes, 2) int ndarray

the (BDF.point_ids, cd) array

stations(nstations, ) float ndarray

the station to sum forces/moments about be careful of picking exactly on symmetry planes/boundaries of elements or nodes this list should be sorted (negative to positive)

coord_outCORD2R()

the output coordinate system

idirint; default=0

the axis of the coordinate system to consider as the axial direction

Notes

  1. Clip elements based on centroid. Elements that are less than the ith station are kept.

2. Get the nodes for those elements. 3a. Extract the freebody loads and sum them about the

summation point (todo).

3b. Extract the interface loads and sum them about the

summation point.

Examples

Imagine a swept aircraft wing. Define a coordinate system in the primary direction of the sweep. Note that station 0 doesn’t have to be perfectly at the root of the wing.

Create stations from this point.

Todo

Not Tested…Does 3b work? Can 3a give the right answer?

write_csv(csv_file, is_mag_phase=False)[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
write_f06_time(f06_file, itime=0, i=None, header=None, page_num=1, page_stamp='')[source]
write_op2(op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

ogpf Module
Inheritance diagram of pyNastran.op2.tables.ogf_gridPointForces.ogpf
Defines the Real/Complex Forces created by:

GPFORCE = ALL

class pyNastran.op2.tables.ogf_gridPointForces.ogpf.OGPF[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

pyNastran/op2/tables/opg_appliedLoads
opg_appliedLoads Package
opg Module
Inheritance diagram of pyNastran.op2.tables.opg_appliedLoads.opg
Defines the Real/Complex Forces created by:

OLOAD = ALL

class pyNastran.op2.tables.opg_appliedLoads.opg.OPG[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

opg_load_vector Module
Inheritance diagram of pyNastran.op2.tables.opg_appliedLoads.opg_load_vector
class pyNastran.op2.tables.opg_appliedLoads.opg_load_vector.ComplexLoadVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.opg_appliedLoads.opg_load_vector.RealLoadVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.opg_appliedLoads.opg_load_vector.RealTemperatureVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.scalar_table_object.RealScalarTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.opg_appliedLoads.opg_load_vector.RealThermalVelocityVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.scalar_table_object.RealScalarTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
opg_objects Module
Inheritance diagram of pyNastran.op2.tables.opg_appliedLoads.opg_objects
class pyNastran.op2.tables.opg_appliedLoads.opg_objects.AppliedLoadsVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

build()[source]

sizes the vectorized attributes of the AppliedLoadsVectorArray

data_type()[source]
get_stats(short: bool = False) → List[str][source]
class pyNastran.op2.tables.opg_appliedLoads.opg_objects.ComplexAppliedLoadsVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.opg_appliedLoads.opg_objects.AppliedLoadsVectorArray

data_type() → str[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.opg_appliedLoads.opg_objects.RealAppliedLoadsVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.opg_appliedLoads.opg_objects.AppliedLoadsVectorArray

data_type() → str[source]
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
opnl_force_vector Module
Inheritance diagram of pyNastran.op2.tables.opg_appliedLoads.opnl_force_vector
class pyNastran.op2.tables.opg_appliedLoads.opnl_force_vector.ComplexForceVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.opg_appliedLoads.opnl_force_vector.RealForceVectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
pyNastran/op2/tables/oqg_constraintForces
oqg_constraintForces Package
oqg Module
Inheritance diagram of pyNastran.op2.tables.oqg_constraintForces.oqg
This file defines the OUG Table, which contains:
  • Real/Complex SPC Forces - SPCFORCE = ALL

  • Real/Complex MPC Forces - MPCFORCE = ALL

  • Real Temperature Gradient & Flux - FLUX = ALL

class pyNastran.op2.tables.oqg_constraintForces.oqg.OQG[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

oqg_mpc_forces Module
Inheritance diagram of pyNastran.op2.tables.oqg_constraintForces.oqg_mpc_forces
class pyNastran.op2.tables.oqg_constraintForces.oqg_mpc_forces.ComplexMPCForcesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oqg_constraintForces.oqg_mpc_forces.RealMPCForcesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oqg_spc_forces Module
Inheritance diagram of pyNastran.op2.tables.oqg_constraintForces.oqg_spc_forces
class pyNastran.op2.tables.oqg_constraintForces.oqg_spc_forces.ComplexSPCForcesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oqg_constraintForces.oqg_spc_forces.RealSPCForcesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oqg_thermal_gradient_and_flux Module
Inheritance diagram of pyNastran.op2.tables.oqg_constraintForces.oqg_thermal_gradient_and_flux
class pyNastran.op2.tables.oqg_constraintForces.oqg_thermal_gradient_and_flux.RealTemperatureGradientAndFluxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
pyNastran/op2/tables/ogs_grid_point_stresses
ogs_grid_point_stresses Package
ogs Module
Inheritance diagram of pyNastran.op2.tables.ogs_grid_point_stresses.ogs
class pyNastran.op2.tables.ogs_grid_point_stresses.ogs.OGS[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

ogs_surface_stresses Module
Inheritance diagram of pyNastran.op2.tables.ogs_grid_point_stresses.ogs_surface_stresses
class pyNastran.op2.tables.ogs_grid_point_stresses.ogs_surface_stresses.GridPointStressesSurfaceDiscontinutiesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

build()[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
class pyNastran.op2.tables.ogs_grid_point_stresses.ogs_surface_stresses.GridPointStressesVolumeDirectArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

build()[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]

‘ D I R E C T S T R E S S E S A T G R I D P O I N T S - - V O L U M E 101’ ‘ OUTPUT COORDINATE SYSTEM = 0 BASIC ‘ ‘ GRID NORMAL-X NORMAL-Y NORMAL-Z SHEAR-XY SHEAR-YZ SHEAR-ZX MEAN VON MISES’ ‘ ID PRESSURE’ ‘ 1 1.455E+03 -1.548E+02 -2.927E+02 -1.573E+01 3.326E+01 -3.438E+03 -3.357E+02 6.188E+03’ ‘ 2 1.093E+03 -1.996E+02 -1.682E+02 1.542E+02 5.962E+01 -4.104E+03 -2.417E+02 7.227E+03’

class pyNastran.op2.tables.ogs_grid_point_stresses.ogs_surface_stresses.GridPointStressesVolumePrincipalArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

build()[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
class pyNastran.op2.tables.ogs_grid_point_stresses.ogs_surface_stresses.GridPointSurfaceStressesArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.ScalarObject

‘ S T R E S S E S A T G R I D P O I N T S - - S U R F A C E 5

‘,

‘0 SURFACE X-AXIS X NORMAL(Z-AXIS) Z REFERENCE COORDINATE SYSTEM FOR SURFACE DEFINITION CID 0

‘,

‘ GRID ELEMENT STRESSES IN SURFACE SYSTEM PRINCIPAL STRESSES MAX

‘,

‘ ID ID FIBRE NORMAL-X NORMAL-Y SHEAR-XY ANGLE MAJOR MINOR SHEAR VON MISES

‘]

‘0 13683 3736 TRIAX6 4.996584E+00 0.0 1.203093E+02 0.0 0.0 0.0’ ‘ 13683 3737 TRIAX6 -4.996584E+00 0.0 -1.203093E+02 0.0 0.0 0.0’ ‘ 13683 TOTALS 6.366463E-12 0.0 -1.364242E-12 0.0 0.0 0.0’

build()[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers() → List[str][source]
get_stats(short: bool = False) → List[str][source]
property is_complex
property is_real
write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
pyNastran/op2/tables/oug
oug Package
oug Module
Inheritance diagram of pyNastran.op2.tables.oug.oug
This file defines the OUG Table, which contains:
  • Real/Complex Displacement - DISPLACEMENT = ALL

  • Real/Complex Acceleration - ACCELERATION = ALL

  • Real/Complex Velocity - VELOCITY = ALL

  • Real/Complex Eigenvectors - DISPLACEMENT = ALL

  • Real Temperature - DISPLACEMENT = ALL

class pyNastran.op2.tables.oug.oug.OUG[source]

Bases: pyNastran.op2.op2_interface.op2_common.OP2Common

OUG : Output U in the global frame

U is:
  • Displacement

  • Velocity

  • Accelerations

The global frame is:
  • the analysis coordinate frame, not the 0 coordinate frame

update_mode_cycle(name)[source]
oug_accelerations Module
Inheritance diagram of pyNastran.op2.tables.oug.oug_accelerations
class pyNastran.op2.tables.oug.oug_accelerations.ComplexAccelerationArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oug.oug_accelerations.RealAccelerationArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oug_displacements Module
Inheritance diagram of pyNastran.op2.tables.oug.oug_displacements
class pyNastran.op2.tables.oug.oug_displacements.ComplexDisplacementArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oug.oug_displacements.RealDisplacementArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oug_eigenvectors Module
Inheritance diagram of pyNastran.op2.tables.oug.oug_eigenvectors
class pyNastran.op2.tables.oug.oug_eigenvectors.ComplexEigenvectorArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp: str = 'PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oug.oug_eigenvectors.RealEigenvectorArray(data_code, is_sort1, isubcase, dt, f06_flag=False)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

get_phi()[source]

gets the eigenvector matrix

Returns
phi(ndof, nmodes)

the eigenvector matrix

TODO: doesn’t consider SPOINTs/EPOINTs
classmethod phi_to_data(phi)[source]

(ndof, nmodes) -> (nmodes, nnodes, 6)

set_phi(phi)[source]

(ndof, nmodes) -> (nmodes, nnodes, 6)

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oug_temperatures Module
Inheritance diagram of pyNastran.op2.tables.oug.oug_temperatures
class pyNastran.op2.tables.oug.oug_temperatures.RealTemperatureArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.scalar_table_object.RealScalarTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
oug_velocities Module
Inheritance diagram of pyNastran.op2.tables.oug.oug_velocities
class pyNastran.op2.tables.oug.oug_velocities.ComplexVelocityArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.ComplexTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]
class pyNastran.op2.tables.oug.oug_velocities.RealVelocityArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.table_object.RealTableArray

write_f06(f06_file, header=None, page_stamp='PAGE %s', page_num: int = 1, is_mag_phase: bool = False, is_sort1: bool = True)[source]

pyNastran/f06

This is the pyNastran.f06.rst file.

f06_writer Module

Inheritance diagram of pyNastran.f06.f06_writer
defines the F06Writer class and:
  • write_f06(…)

pyNastran.f06.f06_writer.make_end(end_flag: bool = False, options: Optional[Dict[str, str]] = None) → str[source]

creates the F06 footer

pyNastran.f06.f06_writer.make_f06_header() → str[source]
pyNastran.f06.f06_writer.make_stamp(title: Optional[str], today: Optional[datetime.date] = None, build: Optional[str] = None) → str[source]
pyNastran.f06.f06_writer.sorted_bulk_data_header() → str[source]

creates the bulk data echo header

f06_formatting Module

pyNastran.f06.f06_formatting.get_key0(adict)[source]

Gets the “first” key in a dictionary

The entry is kind of irrelevant.

pyNastran.f06.f06_formatting.get_key0_compare(adict)[source]

Gets the “first” key in a dictionary

The entry is kind of irrelevant.

pyNastran.f06.f06_formatting.write_float_10e(val: float) → str[source]
pyNastran.f06.f06_formatting.write_float_11e(val: float) → str[source]

writes a Nastran formatted 11.4 float

pyNastran.f06.f06_formatting.write_float_12e(val: float) → str[source]

writes a Nastran formatted 12.5 float

pyNastran.f06.f06_formatting.write_float_13e(val: float) → str[source]

writes a Nastran formatted 13.6 float

pyNastran.f06.f06_formatting.write_floats_10e(vals: List[float]) → List[str][source]

writes a series of Nastran formatted 10.3 floats

pyNastran.f06.f06_formatting.write_floats_12e(vals: List[float]) → List[str][source]

writes a series of Nastran formatted 12.5 floats

pyNastran.f06.f06_formatting.write_floats_13e(vals: List[float]) → List[str][source]

writes a series of Nastran formatted 13.6 floats

pyNastran.f06.f06_formatting.write_floats_8p1e(vals: List[float]) → List[str][source]

writes an 8.1E formatted number

pyNastran.f06.f06_formatting.write_floats_8p4f(vals: List[float]) → List[str][source]

writes an 8.4F formatted number

pyNastran.f06.f06_formatting.write_imag_floats_13e(vals: List[float], is_mag_phase: bool) → List[str][source]

errors Module

Inheritance diagram of pyNastran.f06.errors
exception pyNastran.f06.errors.FatalError[source]

Bases: RuntimeError

utils Package

This is the pyNastran.utils.rst file.

#:mod:gui_io Module #——————– # #.. inheritance-diagram:: pyNastran.utils.gui_io # #.. automodule:: pyNastran.utils.gui_io # :members: # :undoc-members: # :show-inheritance:

mathematics Module

Various mathematical functions are defined in this file. This includes:
  • gauss(n)

  • get_abs_index(data, axis=1)

  • get_abs_max(min_values, max_values)

  • get_max_index(data, axis=1)

  • get_min_index(data, axis=1)

  • integrate_positive_unit_line(x, y, min_value=0.)

  • integrate_unit_line(x, y)

  • is_float_ranged(a, x, b)

  • is_list_ranged(a, List, b)

  • list_print(list_a, tol=1e-8, float_fmt=’%-3.2g’, zero_fmt=’ 0’)

  • print_annotated_matrix(A, row_names=None, col_names=None, tol=1e-8)

  • print_matrix(A, tol=1e-8)

  • reduce_matrix(matrix_a, nids)

  • roundup(value, round_increment=100)

  • solve_tridag(A, D)

  • unique2d(a)

All beams are LineProperty objects. Multi-segment beams are IntegratedLineProperty objects.

pyNastran.utils.mathematics.Area(a, b)
pyNastran.utils.mathematics.gauss(n)[source]

A quadrature rule: an approximation of the definite integral of a function. Currently implementation supports up to 5 quadrature points.

Function returns following values depending on n (number of points):

  • n = 1:

  • f$ 0 f$ –> f$ 2 f$

  • n = 2:

  • f$ pm 1/sqrt{3} f$ –> f$ 1 f$

  • n = 3

  • f$ 0 f$ –> f$ 8/9 f$

  • f$ pmsqrt{3/5} f$ –> f$ 5/9 f$

  • n = 4:

  • f$ pmsqrt{left( 3 - 2sqrt{6/5} right)/7} f$ –> f$ (18+sqrt{30})/36 f$

  • f$ pmsqrt{left( 3 + 2sqrt{6/5} right)/7} f$ –> f$ (18-sqrt{30})/36 f$

  • n = 5:

  • f$ 0 f$ –> f$ 128/225 f$

  • f$ pmfrac{1}{3}sqrt{5-2sqrt{10/7}} f$ –> f$ (322+13sqrt{70})/900 f$

  • f$ pmfrac{1}{3}sqrt{5+2sqrt{10/7}} f$ –> f$ (322-13sqrt{70})/900 f$

Parameters

n – Number of quadrature points

Returns lists

points and corresponding weights, sorted by points value

pyNastran.utils.mathematics.get_abs_index(data, axis=1)[source]

Gets the maximum absolute value of a 2D matrix along an axis

Examples

>>> data = [
        [4.0, 2.2, 3.0, 5.0, 2.2]  # subcase 1
        [4.1, 2.1, 3.1, 5.1, 2.1], # subcase 2
    ]
>>> max_values, index = get_min_index(data, axis=1)
>>> out
[4.1, 2.2, 3.1, 5.1, 2.2]
>>> index
[1, 0, 1, 1, 0]
pyNastran.utils.mathematics.get_abs_max(min_values, max_values, dtype='float32')[source]

Get return the value with the greatest magnitude, preserving sign.

pyNastran.utils.mathematics.get_max_index(data, axis=1)[source]

Gets the maximum values of a 2D matrix along an axis

Examples

>>> data = [
        [4.0, 2.2, 3.0, 5.0, 2.2]  # subcase 1
        [4.1, 2.1, 3.1, 5.1, 2.1], # subcase 2
    ]
>>> max_values, index = get_max_index(data, axis=1)
>>> out
[4.1, 2.2, 3.1, 5.1, 2.2]
>>> index
[1, 0, 1, 1, 0]
pyNastran.utils.mathematics.get_min_index(data, axis=1)[source]

Gets the minimum values of a 2D matrix along an axis

Examples

>>> data = [
        [4.0, 2.2, 3.0, 5.0, 2.2]  # subcase 1
        [4.1, 2.1, 3.1, 5.1, 2.1], # subcase 2
    ]
>>> min_values, index = get_min_index(data, axis=1)
>>> out
[4.0, 2.1, 3.0, 5.0, 2.1]
>>> index
[0, 1, 0, 0, 1]
pyNastran.utils.mathematics.integrate_positive_unit_line(x, y, min_value=0.0)[source]

Integrates a line of length 1.0 by linear interpolation

Parameters
xList[float]

the independent variable

yList[float]

the dependent variable

min_valuefloat; default=0.0

???

Returns
integrated_valuefloat

the area under the curve

pyNastran.utils.mathematics.integrate_unit_line(x, y)[source]

Integrates a line of length 1.0 by linear interpolation

Parameters
xList[float]

the independent variable

yList[float]

the dependent variable

Returns
integrated_valuefloat

the area under the curve

pyNastran.utils.mathematics.is_float_ranged(a, x, b)[source]

Returns true if a<= x <= b or a-x < 0 < b-x.

Parameters
afloat

the lower bound value (inclusive)

xList[float, …]

the search values

b: float

the upper bound value (inclusive)

Returns
is_rangedbool

True/False

pyNastran.utils.mathematics.is_list_ranged(a, List, b)[source]

Returns true if a<= x <= b or a-x < 0 < b-x

Parameters
afloat

the lower bound value (inclusive)

xList[float, …]

the search values

b: float

the upper bound value (inclusive)

Returns
is_rangedbool

True/False

pyNastran.utils.mathematics.list_print(list_a, tol=1e-08, float_fmt='%-3.2g', zero_fmt=' 0')[source]

prints a list / numpy array in a readable format

pyNastran.utils.mathematics.print_annotated_matrix(A, row_names=None, col_names=None, tol=1e-08)[source]

Takes a list/dictionary and annotates the row number with that value indicies go from 0 to N

pyNastran.utils.mathematics.print_matrix(A, tol=1e-08)[source]

prints a 2d matrix in a readable format

pyNastran.utils.mathematics.reduce_matrix(matrix_a, nids)[source]

takes a list of ids and removes those rows and cols

pyNastran.utils.mathematics.roundup(value, round_increment=100)[source]

Rounds up to the next N.

Parameters
valueint

the value to round up

round_incrementint

the increment to round by

.. python
>>> 100 = roundup(10)
>>> 200 = roundup(105)
>>> 300 = roundup(200)
>>> 1000 = roundup(200, 1000)
>>> 2000 = roundup(1000, 1000)
>>> 2000 = roundup(1001, 1000)
.. note: this function is used to ensure that renumbering is more

obvious when testing

nastran_utils Module

pyNastran.utils.nastran_utils.run_nastran(bdf_filename: str, nastran_cmd: str = 'nastran', keywords: Union[str, List[str], Dict[str, str], None] = None, run: bool = True, run_in_bdf_dir: bool = True) → Tuple[Optional[int], List[str]][source]

Call a nastran subprocess with the given filename

Parameters
bdf_filenamestring

Filename of the Nastran .bdf file

keywordsstr/dict/list of strings, optional

Default keywords are ‘scr=yes’, ‘bat=no’, ‘old=no’, and ‘news=no’

runbool; default=True

let’s you disable actually running Nastran to test out code/get the call arguments

run_in_local_dirbool; default=True

True : output (e.g., *.f06) will go to the current working directory (default) False : outputs (e.g., *.f06) will go to the input BDF directory

Returns
return_codeint

the nastran flag

cmd_argsList[str]

the nastran commands that go into subprocess

numpy_utils Module

Interface to various numpy utilities

pyNastran.utils.numpy_utils.zip_strict(*arrays)[source]

__init__ Module

defines:
  • deprecated(old_name, new_name, deprecated_version, levels=None)

  • print_bad_path(path)

  • object_attributes(obj, mode=’public’, keys_to_skip=None)

  • object_methods(obj, mode=’public’, keys_to_skip=None)

pyNastran.utils.__init__.b(string: str) → bytes[source]

reimplementation of six.b(…) to work in Python 2

pyNastran.utils.__init__.check_path(filename: str, name: str = 'file') → None[source]

checks that the file exists

pyNastran.utils.__init__.int_version(name: str, version: str) → List[int][source]

splits the version into a tuple of integers

pyNastran.utils.__init__.ipython_info() → Optional[str][source]

determines if iPython/Jupyter notebook is running

pyNastran.utils.__init__.is_binary_file(filename: Union[str, pathlib.PurePath]) → bool[source]

Return true if the given filename is binary.

Parameters
filenamestr

the filename to test

Returns
binary_flagbool

True if filename is a binary file (contains null byte) and False otherwise.

raises

IOError if the file cannot be opened. ..

Based on the idea (.. seealso:: http://bytes.com/topic/python/answers/21222-determine-file-type-binary-text)
that file is binary if it contains null.

Warning

this may not work for unicode. ..

pyNastran.utils.__init__.is_file_obj(filename: str) → bool[source]

does this object behave like a file object?

pyNastran.utils.__init__.object_attributes(obj: Any, mode: str = 'public', keys_to_skip: Optional[List[str]] = None, filter_properties: bool = False) → List[str][source]

List the names of attributes of a class as strings. Returns public attributes as default.

Parameters
objinstance

the object for checking

modestr

defines what kind of attributes will be listed * ‘public’ - names that do not begin with underscore * ‘private’ - names that begin with single underscore * ‘both’ - private and public * ‘all’ - all attributes that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

filter_properties: bool: default=False

filters the @property objects

Returns
attribute_namesList[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

pyNastran.utils.__init__.object_methods(obj: Any, mode: str = 'public', keys_to_skip: Optional[List[str]] = None) → List[str][source]

List the names of methods of a class as strings. Returns public methods as default.

Parameters
objinstance

the object for checking

modestr

defines what kind of methods will be listed * “public” - names that do not begin with underscore * “private” - names that begin with single underscore * “both” - private and public * “all” - all methods that are defined for the object

keys_to_skipList[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns
methodList[str]

sorted list of the names of methods of a given type or None if the mode is wrong

pyNastran.utils.__init__.object_stats(obj: Any, mode: str = 'public', keys_to_skip: Optional[List[str]] = None, filter_properties: bool = False) → str[source]

Prints out an easy to read summary of the object

pyNastran.utils.__init__.print_bad_path(path: str) → str[source]

Prints information about the existence (access possibility) of the parts of the given path. Useful for debugging when the path to a given file is wrong.

Parameters
pathstr

path to check

Returns
msgstr

string with information whether access to parts of the path is possible

pyNastran.utils.__init__.remove_files(filenames)[source]

remvoes a series of files; quietly continues if the file can’t be removed

atmosphere Module

Contains the following atmospheric functions:

  • density = atm_density(alt, mach)

  • mach = atm_mach(alt, velocity)

  • velocity = atm_velocity(alt, mach)

  • pressure = atm_pressure(alt)

  • temperature = atm_temperature(alt)

  • sos = atm_speed_of_sound(alt)

  • mu = atm_dynamic_viscosity_mu(alt)

  • nu = atm_kinematic_viscosity_nu(alt)

  • eas = atm_equivalent_airspeed(alt, mach)

  • rho, machs, velocity = make_flfacts_alt_sweep(

    mach, alts, eas_limit=1000., alt_units=’m’, velocity_units=’m/s’, density_units=’kg/m^3’, eas_units=’m/s’)

  • rho, machs, velocity = make_flfacts_mach_sweep(

    alt, machs, eas_limit=1000., alt_units=’m’, velocity_units=’m/s’, density_units=’kg/m^3’, eas_units=’m/s’)

All the default units are in English units because the source equations are in English units.

pyNastran.utils.atmosphere.atm_density(alt: float, R: float = 1716.0, alt_units: str = 'ft', density_units: str = 'slug/ft^3') → float[source]

Freestream Density f$ rho_{infty} f$

Parameters
altfloat

altitude in feet or meters

Rfloat; default=1716.

gas constant for air in english units (???)

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

density_unitsstr; default=’slug/ft^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

Returns
rhofloat

density f$ rho f$ in density_units

Based on the formula P=pRT
f[ large rho=frac{p}{R T} f]
pyNastran.utils.atmosphere.atm_dynamic_pressure(alt: float, mach: float, alt_units: str = 'ft', pressure_units: str = 'psf') → float[source]

Freestream Dynamic Pressure f$ q_{infty} f$

Parameters
altfloat

Altitude in alt_units

machfloat

Mach Number f$ M f$

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

pressure_unitsstr; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

Returns
dynamic_pressurefloat

Returns dynamic pressure in pressure_units

The common method that requires many calculations…
f[ large q = frac{1}{2} rho V^2 f]
f[ large p = rho R T f]
f[ large M = frac{V}{a} f]
f[ large a = sqrt{gamma R T} f]
so…
f[ large q = frac{gamma}{2} p M^2 f]
pyNastran.utils.atmosphere.atm_dynamic_viscosity_mu(alt: float, alt_units: str = 'ft', visc_units: str = '(lbf*s)/ft^2') → float[source]

Freestream Dynamic Viscosity f$ mu_{infty} f$

Parameters
altfloat

Altitude in alt_units

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

visc_unitsstr; default=’(lbf*s)/ft^2’

the viscosity units; (lbf*s)/ft^2, (N*s)/m^2, Pa*s

Returns
mufloat

dynamic viscosity f$ mu_{infty} f$ in (lbf*s)/ft^2 or (N*s)/m^2 (SI)

See also

sutherland_viscoscity ..

pyNastran.utils.atmosphere.atm_equivalent_airspeed(alt: float, mach: float, alt_units: str = 'ft', eas_units: str = 'ft/s') → float[source]

Freestream equivalent airspeed

Parameters
altfloat

altitude in alt_units

Machfloat

Mach Number

$ M
$
alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

eas_unitsstr; default=’ft/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

Returns
easfloat

equivalent airspeed in eas_units

EAS = TAS * sqrt(rho/rho0)
p = rho * R * T
rho = p/(RT)
rho/rho0 = p/T * T0/p0
TAS = a * M
EAS = a * M * sqrt(p/T * T0/p0)
EAS = a * M * sqrt(p*T0 / (T*p0))
pyNastran.utils.atmosphere.atm_kinematic_viscosity_nu(alt: float, alt_units: str = 'ft', visc_units: str = 'ft^2/s') → float[source]

Freestream Kinematic Viscosity f$ nu_{infty} f$

Parameters
altfloat

Altitude in alt_units

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

visc_unitsstr; default=’slug/ft^3’

the kinematic viscosity units; ft^2/s, m^2/s

Returns
nufloat

kinematic viscosity f$ nu_{infty} f$ in visc_units

f[ large nu = frac{mu}{rho} f]

See also

sutherland_viscoscity ..

Todo

better debug ..

pyNastran.utils.atmosphere.atm_mach(alt: float, V: float, alt_units: str = 'ft', velocity_units: str = 'ft/s') → float[source]

Freestream Mach Number

Parameters
altfloat

altitude in alt_units

Vfloat

Velocity in velocity_units

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

velocity_unitsstr; default=’ft/s’

the velocity units; ft/s, m/s, in/s, knots

Returns
machfloat

Mach Number f$ M f$

f[ large M = frac{V}{a} f]
pyNastran.utils.atmosphere.atm_pressure(alt: float, alt_units: str = 'ft', pressure_units: str = 'psf') → float[source]

Freestream Pressure f$ p_{infty} f$

Parameters
altfloat

Altitude in alt_units

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

pressure_unitsstr; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

Returns
pressurefloat

Returns pressure in pressure_units

.. note:

from BAC-7006-3352-001-V1.pdf # Bell Handbook of Aerodynamic Heatingn page ~236 - Table C.1n These equations were used b/c they are valid to 300k ft.n Extrapolation is performed above that.n

pyNastran.utils.atmosphere.atm_speed_of_sound(alt: float, alt_units: str = 'ft', velocity_units: str = 'ft/s', gamma: float = 1.4) → float[source]

Freestream Speed of Sound f$ a_{infty} f$

Parameters
altfloat

Altitude in alt_units

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

velocity_unitsstr; default=’ft/s’

the velocity units; ft/s, m/s, in/s, knots

Returns
speed_of_sound, afloat

Returns speed of sound in velocity_units

f[ large a = sqrt{gamma R T} f]
pyNastran.utils.atmosphere.atm_temperature(alt: float, alt_units: str = 'ft', temperature_units: str = 'R') → float[source]

Freestream Temperature f$ T_{infty} f$

Parameters
altfloat

Altitude in alt_units

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

temperature_unitsstr; default=’R’

the altitude units; R, K

Returns
Tfloat

temperature in degrees Rankine or Kelvin (SI)

.. note:

from BAC-7006-3352-001-V1.pdf # Bell Handbook of Aerodynamic Heatingn page ~236 - Table C.1n These equations were used because they are valid to 300k ft.n Extrapolation is performed above that.

pyNastran.utils.atmosphere.atm_unit_reynolds_number(alt: float, mach: float, alt_units: str = 'ft', reynolds_units: str = '1/ft') → float[source]

Returns the Reynolds Number per unit length.

Parameters
altfloat

Altitude in alt_units

machfloat

Mach Number f$ M f$

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

reynolds_unitsstr; default=’1/ft’

the altitude units; 1/ft, 1/m, 1/in

Returns
ReynoldsNumber/Lfloat

Reynolds number per unit length in reynolds_units

f[ large Re = frac{ rho V L}{mu} f]
f[ large Re_L = frac{ rho V }{mu} f]
pyNastran.utils.atmosphere.atm_unit_reynolds_number2(alt: float, mach: float, alt_units: str = 'ft', reynolds_units: str = '1/ft') → float[source]

Returns the Reynolds Number per unit length.

Parameters
altfloat

Altitude in alt_units

machfloat

Mach Number f$ M f$

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

reynolds_unitsstr; default=’1/ft’

the altitude units; 1/ft, 1/m, 1/in

Returns
ReynoldsNumber/Lfloat

the Reynolds Number per unit length

f[ large Re_L = frac{ rho V}{mu} = frac{p M a}{mu R T} f]
.. note:

this version of Reynolds number directly calculates the base quantities, so multiple calls to atm_press and atm_temp are not made

pyNastran.utils.atmosphere.atm_velocity(alt: float, mach: float, alt_units: str = 'ft', velocity_units: str = 'ft/s') → float[source]

Freestream Velocity f$ V_{infty} f$

Parameters
altfloat

altitude in alt_units

Machfloat

Mach Number f$ M f$

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

velocity_unitsstr; default=’ft/s’

the velocity units; ft/s, m/s, in/s, knots

Returns
velocityfloat

Returns velocity in velocity_units

f[ large V = M a f]
pyNastran.utils.atmosphere.convert_altitude(alt: float, alt_units_in: str, alt_units_out: str) → float[source]

nominal unit is ft

pyNastran.utils.atmosphere.convert_density(density: float, density_units_in: str, density_units_out: str) → float[source]

nominal unit is slug/ft^3

pyNastran.utils.atmosphere.convert_pressure(pressure: float, pressure_units_in: str, pressure_units_out: str) → float[source]

nominal unit is psf

pyNastran.utils.atmosphere.convert_velocity(velocity: float, velocity_units_in: str, velocity_units_out: str) → float[source]

nominal unit is ft/s

pyNastran.utils.atmosphere.get_alt_for_density(density: float, density_units: str = 'slug/ft^3', alt_units: str = 'ft', nmax: int = 20, tol: float = 5.0) → float[source]

Gets the altitude associated with a given air density.

Parameters
densityfloat

the air density in slug/ft^3

density_unitsstr; default=’slug/ft^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

alt_unitsstr; default=’ft’

sets the units for the output altitude; ft, m, kft

nmaxint; default=20

max number of iterations for convergence

tolfloat; default=5.

tolerance in alt_units

Returns
altfloat

the altitude in feet

pyNastran.utils.atmosphere.get_alt_for_eas_with_constant_mach(equivalent_airspeed: float, mach: float, velocity_units: str = 'ft/s', alt_units: str = 'ft', nmax: int = 20, tol: float = 5.0) → float[source]

Gets the altitude associated with a equivalent airspeed.

Parameters
equivalent_airspeedfloat

the equivalent airspeed in velocity_units

machfloat

the mach to hold constant

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

nmaxint; default=20

max number of iterations for convergence

tolfloat; default=5.

tolerance in alt_units

Returns
altfloat

the altitude in alt units

pyNastran.utils.atmosphere.get_alt_for_pressure(pressure: float, pressure_units: str = 'psf', alt_units: str = 'ft', nmax: int = 20, tol: float = 5.0) → float[source]

Gets the altitude associated with a pressure.

Parameters
pressurefloat

the pressure lb/ft^2 (SI=Pa)

pressure_unitsstr; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

nmaxint; default=20

max number of iterations for convergence

tolfloat; default=5.

tolerance in alt_units

Returns
altfloat

the altitude in alt_units

pyNastran.utils.atmosphere.get_alt_for_q_with_constant_mach(q: float, mach: float, pressure_units: str = 'psf', alt_units: str = 'ft', nmax: int = 20, tol: float = 5.0) → float[source]

Gets the altitude associated with a dynamic pressure.

Parameters
qfloat

the dynamic pressure lb/ft^2 (SI=Pa)

machfloat

the mach to hold constant

pressure_unitsstr; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

alt_unitsstr; default=’ft’

the altitude units; ft, kft, m

nmaxint; default=20

max number of iterations for convergence

tolfloat; default=5.

tolerance in alt_units

Returns
altfloat

the altitude in alt_units

pyNastran.utils.atmosphere.make_flfacts_alt_sweep(mach: float, alts: List[float], eas_limit: float = 1000.0, alt_units: str = 'm', velocity_units: str = 'm/s', density_units: str = 'kg/m^3', eas_units: str = 'm/s') → Tuple[NDArrayNfloat, NDArrayNfloat, NDArrayNfloat][source]

Makes a sweep across altitude for a constant Mach number.

Parameters
altList[float]

Altitude in alt_units

Machfloat

Mach Number

$ M
$
eas_limitfloat

Equivalent airspeed limiter in eas_units

alt_unitsstr; default=’m’

the altitude units; ft, kft, m

velocity_unitsstr; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_unitsstr; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_unitsstr; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

pyNastran.utils.atmosphere.make_flfacts_eas_sweep(alt: float, eass: List[float], alt_units: str = 'm', velocity_units: str = 'm/s', density_units: str = 'kg/m^3', eas_units: str = 'm/s') → Tuple[NDArrayNfloat, NDArrayNfloat, NDArrayNfloat][source]

Makes a sweep across equivalent airspeed for a constant altitude.

Parameters
altfloat

Altitude in alt_units

eassList[float]

Equivalent airspeed in eas_units

alt_unitsstr; default=’m’

the altitude units; ft, kft, m

velocity_unitsstr; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_unitsstr; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_unitsstr; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

pyNastran.utils.atmosphere.make_flfacts_mach_sweep(alt: float, machs: List[float], eas_limit: float = 1000.0, alt_units: str = 'm', velocity_units: str = 'm/s', density_units: str = 'kg/m^3', eas_units: str = 'm/s') → Tuple[NDArrayNfloat, NDArrayNfloat, NDArrayNfloat][source]

Makes a sweep across Mach number for a constant altitude.

Parameters
altfloat

Altitude in alt_units

MachsList[float]

Mach Number

$ M
$
eas_limitfloat

Equivalent airspeed limiter in eas_units

alt_unitsstr; default=’m’

the altitude units; ft, kft, m

velocity_unitsstr; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_unitsstr; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_unitsstr; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

pyNastran.utils.atmosphere.sutherland_viscoscity(T: float) → float[source]

Helper function that calculates the dynamic viscosity f$ mu f$ of air at a given temperature.

Parameters
Tfloat

Temperature T is in Rankine

Returns
mufloat

dynamic viscosity f$ mu f$ of air in (lbf*s)/ft^2

.. note:

prints a warning if T>5400 deg R

Sutherland’s Equationn
From Aerodynamics for Engineers 4th Editionn
John J. Bertin 2002n
page 6 eq 1.5bn
dict_to_h5py Module

pyNastran/converters

format_converter Module

Multi-input/output format converter

pyNastran.converters.format_converter.cmd_line_format_converter(argv=None, quiet: str = False) → None[source]

Interface for format_converter

pyNastran.converters.format_converter.element_slice(tecplot, data: Dict[str, Any]) → None[source]

removes solid elements from a tecplot model

pyNastran.converters.format_converter.process_cart3d(cart3d_filename: str, fmt2: str, fname2: str, log: SimpleLogger, data: Dict[str, Any], quiet: bool = False) → None[source]

Converts Cart3d to STL/Nastran/Tecplot/Cart3d

pyNastran.converters.format_converter.process_nastran(bdf_filename: str, fmt2: str, fname2: str, log: Optional[SimpleLogger] = None, data: Optional[Dict[str, Any]] = None, debug: bool = True, quiet: bool = False) → None[source]

Converts Nastran to STL/Cart3d/Tecplot/UGRID3d

pyNastran.converters.format_converter.process_stl(stl_filename: str, fmt2: str, fname2: str, log: SimpleLogger, data: Optional[Dict[str, Any]] = None, quiet: bool = False) → None[source]

Converts STL to Nastran/Cart3d

pyNastran.converters.format_converter.process_tecplot(tecplot_filename: str, fmt2: str, fname2: str, log: SimpleLogger, data: Optional[Dict[str, Any]] = None, quiet: bool = False) → None[source]

Converts Tecplot to Tecplot

Globs all input tecplot files (e.g. tecplot*.plt)

pyNastran.converters.format_converter.process_ugrid(ugrid_filename: str, fmt2: str, fname2: str, log: SimpleLogger, data: Optional[SimpleLogger] = None, quiet: bool = False) → None[source]

Converts UGRID to Nastran/Cart3d/STL/Tecplot

pyNastran.converters.format_converter.process_vrml(vrml_filename: str, fmt2: str, fname2: str, log: SimpleLogger, data: Dict[str, Any], quiet: bool = False) → None[source]

Converts VRML to Nastran

pyNastran.converters.format_converter.run_format_converter(fmt1: str, fname1: str, fmt2: str, fname2: str, data: Dict[str, Any], log: SimpleLogger, quiet: bool = False) → None[source]

Runs the format converter

Subpackages

abaqus Package
abaqus Module
Inheritance diagram of pyNastran.converters.abaqus.abaqus

Defines the Abaqus class

class pyNastran.converters.abaqus.abaqus.Abaqus(log=None, debug=True)[source]

Bases: object

defines the abaqus reader

_read_elements(lines, line0, iline)[source]

*element, type=mass, elset=topc_inertia-2_mass_

read_abaqus_inp(abaqus_inp_filename)[source]

reads an abaqus model

read_assembly(lines, iline, line0, word)[source]

reads an Assembly object

read_material(lines: List[str], iline: int, word: str) → pyNastran.converters.abaqus.abaqus_cards.Material[source]

reads a Material card

read_part(lines, iline, line0, word)[source]

reads a Part object

read_step(lines, iline, line0, istep)[source]

reads a step object

write(abaqus_filename_out, is_2d=False)[source]
pyNastran.converters.abaqus.abaqus._clean_lines(lines)[source]

removes comment lines and concatenates include files

pyNastran.converters.abaqus.abaqus._read_star_block(lines, iline, line0, log, debug=False)[source]

because this uses file streaming, there are 30,000 places where a try except block is needed, so this should probably be used all over.

pyNastran.converters.abaqus.abaqus._read_star_block2(lines, iline, line0, log, debug=False)[source]

because this uses file streaming, there are 30,000 places where a try except block is needed, so this should probably be used all over.

pyNastran.converters.abaqus.abaqus.get_param_map(iline, word, required_keys=None)[source]

get the optional arguments on a line

Examples

>>> iline = 0
>>> word = 'elset,instance=dummy2,generate'
>>> params = get_param_map(iline, word, required_keys=['instance'])
params = {
    'elset' : None,
    'instance' : 'dummy2,
    'generate' : None,
}
pyNastran.converters.abaqus.abaqus.main()[source]

tests a simple abaqus model

pyNastran.converters.abaqus.abaqus.print_data(lines, iline, word, msg, nlines=20)[source]

prints the last N lines

pyNastran.converters.abaqus.abaqus.read_abaqus(abaqus_inp_filename, log=None, debug=False)[source]

reads an abaqus model

pyNastran.converters.abaqus.abaqus.read_hourglass_stiffness(line0: str, lines: List[str], iline: int, log: cpylog.SimpleLogger) → None[source]

reads *hourglass stiffness

pyNastran.converters.abaqus.abaqus.read_node(lines, iline, log, skip_star=False)[source]

reads *node

pyNastran.converters.abaqus.abaqus.read_nset(lines, iline, word, log, is_instance=True)[source]

reads *nset

pyNastran.converters.abaqus.abaqus.read_set(lines, iline, line0, params_map)[source]

reads a set

pyNastran.converters.abaqus.abaqus.read_solid_section(line0, lines, iline, log)[source]

reads *solid section

pyNastran.converters.abaqus.abaqus.split_by_equals(word, unused_lines, iline)[source]

splits ‘x = 42’ into ‘x’ and ‘42’

abaqus_cards Module
Inheritance diagram of pyNastran.converters.abaqus.abaqus_cards
defines:
  • SolidSection

  • Material

  • Part

class pyNastran.converters.abaqus.abaqus_cards.Assembly(element_types, node_sets, element_sets)[source]

Bases: object

write(abq_file)[source]
class pyNastran.converters.abaqus.abaqus_cards.Material(name: str, sections: Dict[str, float], density: Optional[float] = None, ndepvars: Optional[int] = None, ndelete: Optional[int] = None)[source]

Bases: object

a Material object is a series of nodes & elements (of various types)

write(abq_file) → None[source]

*Material, name=Glassy828DEA *Density 1180., *Elastic

2.14078e+09, 0.42718

*Material, name=MAT1_828DEA_Dam *Density 1180., *Depvar, delete=4

20,

User Material, constants=16 * K CTELIN C10 C01 DAM_FORM FUNC_FORM EVOLF EVMF

3.2e+09, 5.667e-05, 3.75e+08, 0., 2., 1., 50000., 0.05 **EVM0ISO EVM0VOL EVM0VM DAM_METHOD ALPHA A B C

0., 0.5, 0.5, 1., 0., 0., 0.5, 0.6

*Material, name=Steel *Density 7800., *Elastic

2e+11, 0.3

class pyNastran.converters.abaqus.abaqus_cards.Part(name: str, nids: np.ndarray, nodes: np.ndarray, element_types: Dict[str, np.ndarray], node_sets: Dict[str, np.ndarray], element_sets: Dict[str, np.ndarray], solid_sections: List[SolidSection], log: SimpleLogger)[source]

Bases: object

a Part object is a series of nodes & elements (of various types)

creates a Part object

Parameters
namestr

the name

element_typesDict[element_type]node_ids
element_typestr

the element type

bars:

r2d2 : (nelements, 2) int ndarray

shells:

cpe3 : (nelements, 3) int ndarray cpe4 : (nelements, 4) int ndarray cpe4r : (nelements, 4) int ndarray cps3 : (nelements, 3) int ndarray cps4 : (nelements, 4) int ndarray cps4r : (nelements, 4) int ndarray coh2d4 : (nelements, 4) int ndarray cohax4 : (nelements, 4) int ndarray cax3 : (nelements, 3) int ndarray cax4r : (nelements, 4) int ndarray

solids:

c3d10h : (nelements, 10) int ndarray

_etypes_nnodes()[source]

internal helper method

_store_elements(element_types)[source]

helper method for the init

check_materials(materials)[source]

validates the materials

element(eid)[source]

gets a specific element of the part

property element_types

simplified way to access all the elements as a dictionary

property nelements

Gets the total number of elements

write(abq_file, is_2d=False)[source]

writes a Part

class pyNastran.converters.abaqus.abaqus_cards.SolidSection(param_map, data_lines, log: SimpleLogger)[source]

Bases: object

a SolidSection defines depth and a material

pyNastran.converters.abaqus.abaqus_cards.write_element_set_to_file(abq_file, set_name, values_array)[source]

writes an element set

pyNastran.converters.abaqus.abaqus_cards.write_name(name)[source]

Abaqus has odd rules for writing words without spaces vs. with spaces

pyNastran.converters.abaqus.abaqus_cards.write_node_set_to_file(abq_file, set_name, values_array)[source]

writes a node set

pyNastran.converters.abaqus.abaqus_cards.write_set_to_file(abq_file, values_array)[source]

writes 16 integer values per line to a set card

rpy_writer Module
pyNastran.converters.abaqus.rpy_writer.cmd_line()[source]
pyNastran.converters.abaqus.rpy_writer.write_rpy_file(fname_model, jobname, fname_user_subroutine=None, include=None)[source]
ugrid Package
aflr2 Module
Inheritance diagram of pyNastran.converters.aflr.aflr2.aflr2
defines:
  • read_bedge(bedge_filename, beta_reverse=179.7, log=None, debug=False)

  • AFLR2(log=None, debug=False) - read_bedge(self, bedge_filename, beta_reverse=179.7) - write_nastran(self, bdf_filename) - write_fixed_points(self, fixed_points_filename) - merge_bedge(self, bedge, bedge_filename)

  • export_to_bedge(bedge_filename, nodes, grid_bcs, curves, subcurves, axis=1, log=None)

class pyNastran.converters.aflr.aflr2.aflr2.AFLR2(log=None, debug: Union[str, bool, None] = False)[source]

Bases: object

defines methods for reading interfacing with AFLR2

Initializes the AFLR2 object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

merge_bedge(bedge, bedge_filename)[source]

merges two bedge models into a single new *.bedge file

read_bedge(bedge_filename, beta_reverse=179.7)[source]

reads a *.bedge file

write_fixed_points(fixed_points_filename)[source]

writes a *.csv file that can be read by pyNastranGUI to show the points

write_nastran(bdf_filename)[source]

converts the *.bedge to a nastran *.bdf

pyNastran.converters.aflr.aflr2.aflr2._flip_value(lst)[source]

flips a 0 to 1 and vice-versa

pyNastran.converters.aflr.aflr2.aflr2.export_to_bedge(bedge_filename, nodes, grid_bcs, curves, subcurves, axis=1, log=None)[source]

Creates a bedge file

Parameters
bedge_filenamestr

the *.bedge file

nodes???

???

grid_bcs???

??? source is model.grid_bc, not model.grid_bcs

curves???

???

subcurves???

???

axisint; default=1

the axis to remove (nodes in Nx3)

logLogger(); default=None

a required logging object

pyNastran.converters.aflr.aflr2.aflr2.read_bedge(bedge_filename, beta_reverse=179.7, log=None, debug=False)[source]

reads a *.bedge file

surf_reader Module
Inheritance diagram of pyNastran.converters.aflr.surf.surf_reader
class pyNastran.converters.aflr.surf.surf_reader.SurfReader(log=None, debug=False)[source]

Bases: object

Initializes the SurfReader object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

get_normals()[source]
read_surf(surf_filename)[source]

# AFLR3,14.18.115,28.206.154,WIN/doc/ug_io/3d_input_output_grids.html

Grid BC

Description

-6

internal embedded/transparent surface that will be converted to internal/interior/volume faces with BL volume grid

-5

embedded/transparent surface with BL volume grid

-1

standard surface with BL volume grid; wall

0

standard surface

1

standard surface; farfield

2

standard surface that intersects the BL region; boundary layer

3

embedded/transparent surface or source surface that will be converted to source nodes; source

4

embedded/transparent surface that intersects the BL region

5

embedded/transparent surface

6

internal embedded/transparent surface that will be converted to internal/interior/volume faces

7

fixed surface that intersects and directly connects to the BL region; transparent

read_surf_failnode(surf_filename)[source]
class pyNastran.converters.aflr.surf.surf_reader.TagReader(log=None, debug=False)[source]

Bases: object

read_tag_filename(tag_filename)[source]
pyNastran.converters.aflr.surf.surf_reader.combine_surfs(surf_filenames, surf_out_filename=None)[source]

Combines multiple SURFs into a single file

Parameters
surf_filenamesList[str]

list of surf filenames

surf_out_filenamestr; default=None -> no writing

string of stl output filename

Returns
surfSurfReader

the surf object

ugrid2d_reader Module
Inheritance diagram of pyNastran.converters.aflr.ugrid.ugrid2d_reader
Defines the following classes:
  • UGRID2D_Reader

class pyNastran.converters.aflr.ugrid.ugrid2d_reader.UGRID2D_Reader(log=None, debug=None)[source]

Bases: object

Interface to the AFLR UGrid2D format.

read_ugrid(ugrid_filename)[source]

Reads a ugrid2d file of the form:

#(nnodes, ntrias, nquads), ntets, npyram5, npenta6, nhexas8s
'5 1 1   0 0 0 0

# nodes ‘0. 0. 0.

‘1. 0. 0.

‘1. 1. 0.

‘0. 1. 0.

‘0. 2. 0.

# tris ‘3 4 5

# quads ‘1 2 3 4

Note

comment lines should not be included and exist for reference

ugrid2d_to_nastran Module
pyNastran.converters.aflr.ugrid.ugrid2d_to_nastran.convert_ugrid2d_to_nastran(bdf_filename, nodes, tris, quads, cp=2000, pid=2000, mid=2000, axis_order=None, nid_start=1, eid_start=1, punch=True)[source]
pyNastran.converters.aflr.ugrid.ugrid2d_to_nastran.ugrid2d_to_nastran_filename(ugrid2d_filename, bdf_filename, axis_order=None, nid_start=1, eid_start=1, cp=2000, pid=2000, mid=2000, punch=False)[source]
ugrid3d_to_nastran Module
pyNastran.converters.aflr.ugrid.ugrid3d_to_nastran.ugrid3d_to_nastran(ugrid_filename, bdf_filename, include_shells=True, include_solids=True, convert_pyram_to_penta=False, encoding=None, size=16, is_double=False, log=None)[source]

Converts a UGRID to a BDF.

Parameters
ugrid_filenamestr

the input UGRID filename

bdf_filenamestr

the output BDF filename

include_shellsbool; default=True

should the shells be written

include_solidsbool; default=True

should the solids be written

convert_pyram_to_pentabool; default=False

False : NX Nastran True : MSC Nastran

sizeint; {8, 16}; default=16

the bdf write precision

is_doublebool; default=False

the field precision to write

loglogger; default=None

a logger object

Returns
ugrid_modelUGRID()

the ugrid model

ugrid3d_to_openfoam Module
pyNastran.converters.aflr.ugrid.ugrid3d_to_openfoam._write_boundary(ugrid, boundary_filename, tag_filename)[source]

writes an OpenFOAM boundary file

pyNastran.converters.aflr.ugrid.ugrid3d_to_openfoam._write_faces(ugrid, faces_filename)[source]

writes an OpenFOAM faces file

pyNastran.converters.aflr.ugrid.ugrid3d_to_openfoam._write_points(ugrid, points_filename)[source]

writes an OpenFOAM points file

pyNastran.converters.aflr.ugrid.ugrid3d_to_openfoam.main()[source]

Tests UGrid

pyNastran.converters.aflr.ugrid.ugrid3d_to_openfoam.write_foam(ugrid, foam_filename, tag_filename)[source]

writes an OpenFOAM file

ugrid3d_to_tecplot Module
pyNastran.converters.aflr.ugrid.ugrid3d_to_tecplot.get_ugrid_model(ugrid_filename, log=None, debug=False)[source]

helper method for loading UGRID models

Parameters
ugrid_filenamevaries

str : the input UGRID filename UGRID : the UGRID object

Returns
ugrid_modelUGRID()

the UGRID object

pyNastran.converters.aflr.ugrid.ugrid3d_to_tecplot.main()[source]
pyNastran.converters.aflr.ugrid.ugrid3d_to_tecplot.ugrid3d_to_tecplot_filename(ugrid_filename, tecplot_filename, log=None, debug=False)[source]

Converts a UGRID to a Tecplot ASCII file.

Parameters
ugrid_filenamevaries

str : the input UGRID filename UGRID : the UGRID object

tecplot_filenamestr

the output Tecplot filename

loglogger; default=None

a logger object

debugbool; default=False

developer debug

Returns
tecplot_modelTecplot()

the Tecplot object

pyNastran.converters.aflr.ugrid.ugrid3d_to_tecplot.ugrid_to_tecplot(ugrid_filename, tecplot_filename=None, log=None, debug=False)[source]

Converts a UGRID to a Tecplot ASCII file.

Parameters
ugrid_filenamevaries

str : the input UGRID filename UGRID : the UGRID object

tecplot_filenamestr

the output Tecplot filename

loglogger; default=None

a logger object

debugbool; default=False

developer debug

Returns
tecplot_modelTecplot()

the Tecplot object

pyNastran.converters.aflr.ugrid.ugrid3d_to_tecplot.write_tecplot(ugrid_model, tecplot_filename)[source]
ugrid2d_reader Module
Inheritance diagram of pyNastran.converters.aflr.ugrid.ugrid2d_reader
Defines the following classes:
  • UGRID2D_Reader

class pyNastran.converters.aflr.ugrid.ugrid2d_reader.UGRID2D_Reader(log=None, debug=None)[source]

Bases: object

Interface to the AFLR UGrid2D format.

read_ugrid(ugrid_filename)[source]

Reads a ugrid2d file of the form:

#(nnodes, ntrias, nquads), ntets, npyram5, npenta6, nhexas8s
'5 1 1   0 0 0 0

# nodes ‘0. 0. 0.

‘1. 0. 0.

‘1. 1. 0.

‘0. 1. 0.

‘0. 2. 0.

# tris ‘3 4 5

# quads ‘1 2 3 4

Note

comment lines should not be included and exist for reference

ugrid_reader Module
Inheritance diagram of pyNastran.converters.aflr.ugrid.ugrid_reader
Defines the following classes:
  • UGRID

class pyNastran.converters.aflr.ugrid.ugrid_reader.UGRID(log=None, debug=False, read_shells=True, read_solids=True)[source]

Bases: object

Interface to the AFLR UGrid format.

_check_node_ids()[source]
_write_bdf_solids(bdf_file, eid, pid, convert_pyram_to_penta=True)[source]

writes the Nastran BDF solid elements

check_hanging_nodes(stop_on_diff=True)[source]

verifies that all nodes are used

read_ugrid(ugrid_filename, check=True)[source]

$ $ NASTRAN INPUT DECK GENERATED BY UG_IO $ BEGIN BULK $UG_IO_ Data $Number_of_BL_Vol_Tets 2426 $UG_IO_ Data $Number_of_Bnd_Nodes 34350 $UG_IO_ Data $Number_of_Nodes 399036 $UG_IO_ Data $Number_of_Surf_Quads 20665 $UG_IO_ Data $Number_of_Surf_Trias 27870 $UG_IO_ Data $Number_of_Vol_Hexs 163670 $UG_IO_ Data $Number_of_Vol_Pents_5 27875 $UG_IO_ Data $Number_of_Vol_Pents_6 67892 $UG_IO_ Data $Number_of_Vol_Tets 1036480

skin_solids()[source]

Finds the CTRIA3s and CQUAD4 elements on the surface of the solid

write_bdf(bdf_filename, include_shells=True, include_solids=True, convert_pyram_to_penta=True, write_grids=True, encoding=None, size=16, is_double=False, check=True)[source]

writes a Nastran BDF

Parameters
sizeint; {8, 16}; default=16

the bdf write precision

is_doublebool; default=False

the field precision to write

write_ugrid(ugrid_filename_out, check_shells=True, check_solids=True, check=True)[source]

writes a UGrid model

pyNastran.converters.aflr.ugrid.ugrid_reader.determine_dytpe_nfloat_endian_from_ugrid_filename(ugrid_filename=None)[source]

figures out what the format of the binary data is based on the filename

pyNastran.converters.aflr.ugrid.ugrid_reader.read_ugrid(ugrid_filename=None, encoding=None, log=None, debug=True, read_shells=True, read_solids=True, check=True)[source]

Creates the UGRID object

Parameters
ugrid_filenamestr (default=None -> popup)

the ugrid filename

debugbool/None
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

encodingstr; default=None

is this used?

Returns
modelUGRID()

an UGRID object

cart3d Package
cart3d Module
Inheritance diagram of pyNastran.converters.cart3d.cart3d
Defines:
  • Cart3D(log=None, debug=False)
    • read_cart3d(self, infilename, result_names=None)

    • write_cart3d(self, outfilename, is_binary=False, float_fmt=’%6.7f’)

    • flip_model()

    • make_mirror_model(self, nodes, elements, regions, loads, axis=’y’, tol=0.000001)

    • make_half_model(self, axis=’y’, remap_nodes=True)

    • get_free_edges(self, elements)

    • get_area(self)

    • get_normals(self)

    • get_normals_at_nodes(self, cnormals)

  • comp2tri(in_filenames, out_filename,

    is_binary=False, float_fmt=’%6.7f’)

class pyNastran.converters.cart3d.cart3d.Cart3D(log=None, debug=False)[source]

Bases: pyNastran.converters.cart3d.cart3d.Cart3dIO

Cart3d interface class

flip_model()[source]

flip the model about the y-axis

get_area()[source]

Gets the element area

Returns
area(n, 3) ndarray

the element areas

get_free_edges(elements)[source]

Cart3d must be a closed model with each edge shared by 2 elements The free edges indicate the problematic areas.

Returns
free edges(nedges, 2) int ndarray

the free edge node ids

get_normals()[source]

Gets the centroidal normals

Returns
cnormals(n, 3) ndarray

normalized centroidal normal vectors

get_normals_at_nodes(cnormals)[source]

Gets the nodal normals

Parameters
cnormals(n, 3) ndarray

normalized centroidal normal vectors

Returns
nnormals(n, 3) ndarray

normalized nodal normal vectors

is_outward_normals = True
is_structured = False
make_half_model(axis='y', remap_nodes=True)[source]

Makes a half model from a full model

Notes

Cp is really loads[‘Cp’] and was meant for loads analysis only

make_mirror_model(nodes, elements, regions, loads, axis='y', tol=1e-06)[source]

Makes a full cart3d model about the given axis.

Parameters
nodes(nnodes, 3) ndarray

the nodes

elements(nelements, 3) ndarray

the elmements

regions(nelements) ndarray

the regions

loadsdict[str] = (nnodes) ndarray

not supported

axisstr; {“x”, “y”, “z”, “-x”, “-y”, “-z”}

a string of the axis

tolfloat; default=0.000001

the tolerance for the centerline points

model_type = 'cart3d'
read_cart3d(infilename, result_names=None)[source]

extracts the points, elements, and Cp

write_cart3d(outfilename, is_binary=False, float_fmt='%6.7f')[source]

writes a cart3d file

class pyNastran.converters.cart3d.cart3d.Cart3dIO(log=None, debug=False)[source]

Bases: object

Cart3d IO class

property nelements

get the number of elements

property nnodes

alternate way to access number of points

property nodes

alternate way to access the points

property npoints

get the number of points

property nresults

get the number of results

show(n, types='ifs', endian=None)[source]
show_data(data, types='ifs', endian=None)[source]
show_ndata(n, types='ifs')[source]
pyNastran.converters.cart3d.cart3d.comp2tri(in_filenames, out_filename, is_binary=False, float_fmt='%6.7f', log=None, debug=False)[source]

Combines multiple Cart3d files (binary or ascii) into a single file.

Parameters
in_filenamesList[str]

list of filenames

out_filenamestr

output filename

is_binarybool; default=False

is the output file binary

float_fmtstr; default=’%6.7f’

the format string to use for ascii writing

Notes

assumes loads is None

pyNastran.converters.cart3d.cart3d.convert_to_float(svalues)[source]

Takes a list of strings and converts them to floats.

pyNastran.converters.cart3d.cart3d.read_cart3d(cart3d_filename, log=None, debug=False, result_names=None)[source]

loads a Cart3D file

cart3d_result Module
Inheritance diagram of pyNastran.converters.cart3d.cart3d_result
defines:
  • Cart3dGeometry

class pyNastran.converters.cart3d.cart3d_result.Cart3dGeometry(subcase_id, labels, nodes, elements, regions, area, cnormals, colormap='jet', uname='Cart3dGeometry')[source]

Bases: pyNastran.gui.gui_objects.gui_result.GuiResultCommon

Stores the cart3d results.

get_data_format(i, name)[source]
get_default_data_format(i, name)[source]
get_default_min_max(i, name)[source]
get_default_nlabels_labelsize_ncolors_colormap(i, name)[source]
get_default_title(i, name)[source]
get_header(i, name)[source]
headerstr

the sidebar word

get_location(i, name)[source]
get_methods(i)[source]
get_min_max(i, name)[source]
get_nlabels_labelsize_ncolors_colormap(i, name)[source]
get_result(i, name)[source]
get_scalar(i, name)[source]
get_title(i, name)[source]
get_vector_size(i, name)[source]
set_data_format(i, name, data_format)[source]
set_min_max(i, name, min_value, max_value)[source]
set_nlabels_labelsize_ncolors_colormap(i, name, nlabels, labelsize, ncolors, colormap)[source]
set_title(i, name, title)[source]
cart3d_to_nastran Module
pyNastran.converters.cart3d.cart3d_to_nastran.cart3d_to_nastran_filename(cart3d_filename, bdf_filename, log=None, debug=False)[source]

Converts a Cart3D file to Nastran format.

Parameters
cart3d_filenamestr

path to the input Cart3D file

bdf_filenamestr

path to the output BDF file

loglog / None

log : a logger object None : a log will be defined

debugbool

True/False (used if log is not defined)

Examples

>>> cart3d_filename = 'threePlugs.tri'
>>> bdf_filename = 'threePlugs.bdf'
>>> cart3d_to_nastran_filename(cart3d_filename, bdf_filename)
pyNastran.converters.cart3d.cart3d_to_nastran.cart3d_to_nastran_model(cart3d_filename, log=None, debug=False)[source]

Converts a Cart3D file to Nastran format and returns a BDF() object.

Parameters
cart3d_filenamestr

path to the input Cart3D file

loglog / None

log : a logger object None : a log will be defined

debugbool

True/False (used if log is not defined)

Returns
bdf_modelBDF

BDF() model object

cart3d_to_stl Module
defines:
  • stl = cart3d_to_stl(cart3d, stl_filename=None, is_binary=False, log=None, debug=False)

  • stl = cart3d_to_stl_filename(cart3d_filename, stl_filename=None, is_binary=False, log=None, debug=False)

pyNastran.converters.cart3d.cart3d_to_stl.cart3d_to_stl(cart3d, stl_filename=None, is_binary=False, log=None, debug=False)[source]

Converts a Cart3D object to STL format.

Parameters
cart3dCart3D()

a Cart3D object

stl_filenamestr; default=None

path to the output STL file (or None to skip)

loglog

a logger object (or None)

debugbool; default=False

True/False (used if log is not defined)

Returns
stlSTL()

an STL object

Todo

this seems to be broken… ..

pyNastran.converters.cart3d.cart3d_to_stl.cart3d_to_stl_filename(cart3d_filename, stl_filename=None, is_binary=False, log=None, debug=False)[source]

Converts a Cart3D file to STL format.

Parameters
cart3d_filenamestr

path to the input Cart3D file

stl_filenamestr; default=None

path to the output STL file (or None to skip

is_binarybool; default=False

writes the stl in binary

loglog

a logger object (or None)

debugbool; default=False

True/False (used if log is not defined)

Returns
stlSTL()

an STL object

cart3d_to_tecplot Module
pyNastran.converters.cart3d.cart3d_to_tecplot.cart3d_to_tecplot(cart3d_filename, tecplot_filename, log=None, debug=False)[source]

Converts Cart3d to Tecplot

input_c3d_reader Module
Inheritance diagram of pyNastran.converters.cart3d.input_c3d_reader
class pyNastran.converters.cart3d.input_c3d_reader.InputC3dReader(log=None, debug=False)[source]

Bases: object

read_input_c3d(input_c3d_filename, stack=True)[source]

reads the input.c3d file

pyNastran.converters.cart3d.input_c3d_reader.read_input_c3d(input_c3d_filename, log=None, debug=False, stack=True)[source]

reads the input.c3d file

>>> input_c3d_filename = 'bJet/input.c3d'
>>> nodes, elements = read_input_c3d(input_c3d_filename)
input_cntl_reader Module
Inheritance diagram of pyNastran.converters.cart3d.input_cntl_reader
class pyNastran.converters.cart3d.input_cntl_reader.InputCntlReader(log=None, debug=False)[source]

Bases: object

get_boundary_conditions()[source]
get_flow_conditions()[source]
get_post_processing()[source]
read_input_cntl(input_cntl_filename)[source]
pyNastran.converters.cart3d.input_cntl_reader.main()[source]
pyNastran.converters.cart3d.input_cntl_reader.read_input_cntl(input_cntl_filename, log=None, debug=False)[source]
fast Package
fgrid_reader Module
Inheritance diagram of pyNastran.converters.fast.fgrid_reader
class pyNastran.converters.fast.fgrid_reader.FGridReader(log=None, debug=False)[source]

Bases: object

FGRID interface class

Initializes the FGridReader object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

read_fgrid(fgrid_filename, unused_dimension_flag=3)[source]

extracts the nodes, tris, bcs, tets

pyNastran.converters.fast.fgrid_reader.read_fgrid(fgrid_filename, unused_dimension_flag, log=None, debug=False)[source]

loads a *.fgrid file

LaWGS Package
wgs_reader Module
Inheritance diagram of pyNastran.converters.lawgs.wgs_reader
defines:
  • Panel()

  • read_lawgs(wgs_filename, log=None, debug=False)

  • LaWGS(self, log=None, debug=False)

class pyNastran.converters.lawgs.wgs_reader.LaWGS(log=None, debug=False)[source]

Bases: object

defines a reader for the LaWGS legacy file format

Initializes the LaWGS object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

get_points_elements()[source]
get_points_elements_regions()[source]
model_type = 'LaWGS'
read_lawgs(wgs_filename)[source]

reads an lawgs file

write_as_plot3d(p3dname)[source]

writes a plot3d file

class pyNastran.converters.lawgs.wgs_reader.Panel(key, header, lines, log)[source]

Bases: object

Parameters
rotatefloat

rotates the patch

translatefloat

translates the patch

scalefloat

scales the patch

build_rotation_matrix(r)[source]

Form the rotation matrix used for geometrical transformations Taken from NASA TM 85767 defining LaWGS.

get_element(pointI, j, i)[source]
get_elements(pointI)[source]
get_points()[source]
update_points()[source]
write_as_plot3d(p3d_file)[source]

writes a plot3d section

pyNastran.converters.lawgs.wgs_reader.read_lawgs(wgs_filename, log=None, debug=False)[source]

reads an lawgs file

nastran Package
geometry_helper Module
nastran_to_cart3d Module
defines:
  • cart3d = nastran_to_cart3d(bdf, log=None, debug=False)

  • nastran_to_cart3d_filename(bdf_filename, cart3d_filename,

    log=None, debug=False)

pyNastran.converters.nastran.nastran_to_cart3d.nastran_to_cart3d(bdf, log=None, debug=False)[source]

Converts a Nastran BDF() object to a Cart3D() object.

Parameters
bdfBDF()

a BDF object

loglog; default=None -> dummyLogger

a logger object

debugbool; default=False

True/False (used if log is not defined)

Returns
cart3dCart3D()

a Cart3D object

pyNastran.converters.nastran.nastran_to_cart3d.nastran_to_cart3d_filename(bdf_filename, cart3d_filename, log=None, debug=False)[source]

Creates a Nastran BDF from a Cart3D file.

Parameters
bdf_filenamestr

the path to the bdf file

cart3d_filenamestr

the path to the cart3d output file

loglog; default=None -> dummyLogger

a logger object

debugbool; default=False

True/False (used if log is not defined)

nastran_to_stl Module
defines:
  • stl = nastran_to_stl_filename(bdf_filename, stl_filename, is_binary=False,

    log=None)

  • stl = nastran_to_stl(bdf_filename, stl_filename, is_binary=False,

    log=None, stop_on_failure=False)

pyNastran.converters.nastran.nastran_to_stl.nastran_to_stl(bdf_filename, stl_filename, is_binary=False, log=None, stop_on_failure=False)[source]

Converts a Nastran model to an STL

Parameters
bdf_filenamevaries

str : the path to a BDF input file BDF() : a BDF() model object

stl_filenamestr

the output STL path

is_binarybool; default=False

should the output file be binary

logLogger()

a Python logging object

stop_on_failurebool; default=False

should the code stop if an error is encountered

pyNastran.converters.nastran.nastran_to_stl.nastran_to_stl_filename(bdf_filename, stl_filename, is_binary=False, log=None)[source]

Converts a Nastran model to an STL

nastran_to_tecplot Module
defines:
  • tecplot = nastran_to_tecplot(model)

  • tecplot = nastran_to_tecplot_filename(bdf_filename, tecplot_filename, z

    log=None, debug=False)

pyNastran.converters.nastran.nastran_to_tecplot.nastran_to_tecplot(model)[source]

assumes sequential nodes

pyNastran.converters.nastran.nastran_to_tecplot.nastran_to_tecplot_filename(bdf_filename, tecplot_filename, log=None, debug=False)[source]

converts a BDF file to Tecplot format; supports solid elements

nastran_to_ugrid Module
defines:
  • ugrid = nastran_to_ugrid(bdf_filename, ugrid_filename_out=None, properties=None,

    check_shells=True, check_solids=True, log=None)

pyNastran.converters.nastran.nastran_to_ugrid.main()[source]

Converts a Nastran model to UGRID model and renumbers the properties. Also creates a fun3d.mapbc file.

pyNastran.converters.nastran.nastran_to_ugrid.nastran_to_ugrid(bdf_filename, ugrid_filename_out=None, properties=None, check_shells=True, check_solids=True, log=None)[source]

set xref=False

Parameters
bdf_filenamevaries

str : a bdf filename BDF() : a BDF object

ugrid_filename_outstr (default=None -> ???)

the path to the ugrid_filename

propertiesDict[pid_old]=pid_new???

???

check_shellsbool (default=True)

verify that there is at least one shell element

check_solidsbool (default=True)

verify that there is at least one solid element

logLogger()

a Python logging object

results_helper Module
openfoam Package
block_mesh Module
Inheritance diagram of pyNastran.converters.openfoam.block_mesh
defines:
  • model = read_block_mesh(block_mesh_dict_filename, log=None, debug=False)

class pyNastran.converters.openfoam.block_mesh.BlockMesh(log=None, debug=False)[source]

Bases: object

defines BlockMesh

creates BlockMesh

_write_block_mesh(block_mesh_file, make_symmetry)[source]

writes a BlockMeshDict with a file object

adjust_nodes_to_symmetry()[source]
equivalence_nodes(Rtol=0.1)[source]

equivalences the nodes of a BlockMeshDict

make_hex_bar(unused_bias, ncells)[source]

bias = Llast/Lfirst

make_hex_bars(unused_hex_id)[source]
read_openfoam(block_mesh_name='blockMeshDict')[source]

reads the BlockMesh file

write_bdf(bdf_filename, nodes, hexas)[source]

writes the BlockMesh as a Nastran BDF

write_block_mesh(block_mesh_name_out='blockMeshDict.out', make_symmetry=False)[source]

filename interface to _write_block_mesh

pyNastran.converters.openfoam.block_mesh.area_centroid(n1, n2, n3, n4)[source]

calculates the area and centroid of a quad

pyNastran.converters.openfoam.block_mesh.get_not_indexes(a, indices)[source]

only works for 1D

pyNastran.converters.openfoam.block_mesh.main()[source]
pyNastran.converters.openfoam.block_mesh.mirror_block_mesh(block_mesh_name, block_mesh_name_out, log=None, debug=True)[source]

mirrors a blockMeshDict

pyNastran.converters.openfoam.block_mesh.read_block_mesh(block_mesh_dict_filename, log=None, debug=False)[source]

functional interface to BlockMesh

pyNastran.converters.openfoam.block_mesh.volume8(n1, n2, n3, n4, n5, n6, n7, n8)[source]

calculates the volume of a hex

openfoam_parser Module
Inheritance diagram of pyNastran.converters.openfoam.openfoam_parser
class pyNastran.converters.openfoam.openfoam_parser.FoamFile(filename, log=None)[source]

Bases: object

read_foam_file()[source]
pyNastran.converters.openfoam.openfoam_parser.convert_to_dict(self, lines, debug=True)[source]

should use regex…

FoamFile {

version 0.0508; format ascii; class dictionary; object blockMeshDict;

}

-> data = {
‘FoamFile’{

‘version’ : ‘0.0508’, ‘format’ : ‘ascii’, ‘class’ : ‘dictionary’, ‘object’ : ‘blockMeshDict’,

}

}

pyNastran.converters.openfoam.openfoam_parser.remove_c_comments(lines)[source]
pyNastran.converters.openfoam.openfoam_parser.write_dict(openfoam_dict, nbase=0, baseword='name')[source]
surface_mesh Module
Inheritance diagram of pyNastran.converters.openfoam.surface_mesh
class pyNastran.converters.openfoam.surface_mesh.Faces[source]

Bases: object

read_faces()[source]
class pyNastran.converters.openfoam.surface_mesh.Points[source]

Bases: object

read_points()[source]
pyNastran.converters.openfoam.surface_mesh.main()[source]
panair Package
agps Module
Inheritance diagram of pyNastran.converters.panair.agps
defines:
  • AGPS(log=None, debug=False)

class pyNastran.converters.panair.agps.AGPS(log=None, debug=False)[source]

Bases: object

Interface to the AGPS file

Initializes the AGPS object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

read_agps(infilename)[source]

Loads an AGPS file

panair_grid Module
Inheritance diagram of pyNastran.converters.panair.panair_grid
defines:
  • PanairGrid(log=None, debug=False)

class pyNastran.converters.panair.panair_grid.PanairGrid(log=None, debug=True)[source]

Bases: object

defines the PanairGrid class

Initializes the PanairGrid object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

add_patch(network_name, kt, cp_norm, xyz)[source]
add_wake_patch(network_name, options, xyz)[source]
find_patch_by_name(network_name)[source]
get_patch(patch_id)[source]
get_points_elements_regions(get_wakes=False)[source]
group_sections(sections, section_names)[source]
model_type = 'panair'
property npanels
property npatches
print_abutments()[source]
print_file()[source]
print_grid_summary()[source]
print_options()[source]
print_out_header()[source]
read_panair(infilename)[source]

reads a panair input file

set_alphas(alphas, alpha_compressibility)[source]
set_betas(betas, beta_compressibility)[source]
set_mach(mach)[source]
split_points(lines, nfull_lines, npartial_lines)[source]

reads the points

update_cases()[source]

reduces confusion by only printing cases that will run

write_alphas()[source]
write_betas()[source]
write_cases()[source]
write_data_check()[source]
write_end()[source]
write_liberalized_abutments()[source]
write_mach()[source]
write_panair(out_filename)[source]

writes the panair file

write_plot3d(p3dname, is_binary=False, is_iblank=False)[source]
write_printout()[source]
write_reference_quantities()[source]
write_title()[source]
pyNastran.converters.panair.panair_grid.remove_comments(lines, log)[source]

Comment lines in Panair begin with an equal (=) sign. The file is easier to parse if we remove them.

pyNastran.converters.panair.panair_grid.split_into_sections(lines)[source]
panair_grid_patch Module
Inheritance diagram of pyNastran.converters.panair.panair_grid_patch
class pyNastran.converters.panair.panair_grid_patch.PanairPatch(inetwork, network_name, kt, cp_norm, xyz, log)[source]

Bases: object

Used for physical surfaces

fix_point(point_in)[source]
get_edge(edge_number)[source]

gets all the points associated with a given edge

        edge1
      0  1  2   -> i (row)
edge4 3  4  5
      6  7  8  edge2
      9  10 11
    |   edge3
    j
get_edges()[source]
get_elements(unused_ipoint)[source]
get_header()[source]
get_ipoint(ipoint)[source]
get_point(row, col)[source]
get_points()[source]
is_wake()[source]
property npanels
property npoints
process()[source]
quick_summary(cum_pts, cum_pn)[source]
write_as_plot3d()[source]
write_plot3d(f, dim)[source]

..todo: is the normal defined correctly? ..todo: will this load into tecplot

write_point(point1)[source]
write_points(point1, point2)[source]
class pyNastran.converters.panair.panair_grid_patch.PanairWakePatch(inetwork, network_name, options, xyz, log)[source]

Bases: pyNastran.converters.panair.panair_grid_patch.PanairPatch

Used for explicit wakes

is_wake()[source]
pyNastran.converters.panair.panair_grid_patch.elements_from_quad(nx, ny)[source]

creates quad elements for the gui

pyNastran.converters.panair.panair_grid_patch.print_float(value)[source]

int represented as a short float

shabp Package
shabp Module
Inheritance diagram of pyNastran.converters.shabp.shabp
dfeines:
  • read_shabp(shabp_filename, log=None, debug=False)

  • SHABP(log=None, debug=False)

class pyNastran.converters.shabp.shabp.SHABP(log=None, debug=False)[source]

Bases: pyNastran.converters.shabp.shabp_results.ShabpOut

defines the SHABP class

Initializes the SHABP object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

build_patches(patches)[source]
get_area_by_component(components=None)[source]

gets the area of a set of components

get_area_by_patch(ipatches=None)[source]

gets the area of a set of patches

get_area_xlength_by_component(components=None)[source]

gets the area and length of a set of components

get_impact_shadow(ipatch)[source]

We may not have inviscid pressure

get_points_elements_regions()[source]
parse_trailer(read_special_routines=False)[source]

parses the case information (e.g., number of angles of attack, control surface info)

read_shabp(shabp_filename, read_special_routines=False)[source]

reads an SHABP.INP / SHABP.mk5 file

pyNastran.converters.shabp.shabp.parse_inviscid_pressure(lines, line, i)[source]

reads inviscid pressure (method=3)

pyNastran.converters.shabp.shabp.parse_special_routines(lines, line, i, read_special_routines=False)[source]

Parses the special routines (method=5)

10000000000000000000 01100 1 3 0 0 0 0 01100 2 4 0 0 0 0 11100 3 1 2 5 6 7

pyNastran.converters.shabp.shabp.parse_viscous(lines, line, i)[source]

Parses the viscous table (method=4)

140 viscous_run (level 2)

11 1

000

5 5000 0.0000 1.0000 0.0000 1.0000 3.0000 3.0000 2 0 4 1 1 1 1 1 0 0 0 1 1 0 1

1.500000E2 3.000000E2 1.600000E1 3.000000E1 9.000000E1 5.000000E2 8.000000E-1 1.200000E1 0.000000E0 0.000000E0

21 1 …

pyNastran.converters.shabp.shabp.read_shabp(shabp_filename, read_special_routines=False, log=None, debug=False)[source]

reads an S/HABP file

shabp_io Module
shabp_results Module
Inheritance diagram of pyNastran.converters.shabp.shabp_results
class pyNastran.converters.shabp.shabp_results.ShabpOut(model, log=None, debug=False)[source]

Bases: object

read_shabp_out(out_filename)[source]
read_viscous2(f, i)[source]
readline(f, i)[source]
readline_n(f, i, n)[source]
stl Package
stl Module
Inheritance diagram of pyNastran.converters.stl.stl
class pyNastran.converters.stl.stl.STL(log: Optional[cpylog.SimpleLogger] = None, debug: bool = False)[source]

Bases: object

Initializes the STL object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

create_mirror_model(xyz, tol: float) → None[source]

Creates a mirror model.

Parameters
xyzstr {x, y, z}

the direction of symmetry

tol: float

the tolerance for symmetry plane nodes

.. note:: All elements on the symmetry plane will be removed
equivalence_nodes(tol: float = 1e-05) → None[source]

equivalences the nodes of the model and updates the elements

flip_axes(axes, scale)[source]

Swaps the axes

Parameters
axesstr

‘xy’, ‘yz’, ‘xz’

scalefloat

why is this here, but is not applied to all axes?

flip_normals(i=None) → None[source]

Flips the normals of the specified elements.

Parameters
i(n, ) ndarray ints; default=None -> all

the indicies to flip

get_area(elements, stop_on_failure: bool = True)[source]
get_normals(elements, stop_on_failure: bool = True)[source]
Parameters
elements(n, 3) ndarray ints

the elements to get the normals for

nodes(n, ) ndarray; default=None -> all

a subset of the nodes

stop_on_failurebool (default=True)

True: crash if there are coincident points False: delete elements

get_normals_at_nodes(normals=None, nid_to_eid=None)[source]

Calculates the normal vector of the nodes based on the average element normal.

Parameters
normals(n, 3) ndarray floats

The elemental normals

nid_to_eidDict[int] = [int, int, … ]

key = node_id value = list of element_ids

Returns
normals_at_nodes(nnodes, 3) ndarray ints

the normals

read_ascii_stl(stl_filename: str) → None[source]

Reads an STL that’s in ASCII format

read_binary_stl(stl_filename: str) → None[source]

Read an STL binary file

Parameters
stl_filenamestr

the filename to read

read_stl(stl_filename: str) → None[source]

Reads an STL file

Parameters
stl_filenamestr

the filename to read

remove_elements_with_bad_normals()[source]

removes dot and line elements

scale_nodes(xscale, yscale=None, zscale=None)[source]

Scales the model

Parameters
xscalefloat

the scaling factor for the x axis; also the default scaling factor

yscale/zscalefloat; default=xscale

the scaling factors for the y/z axes

shift_nodes(xshift, yshift, zshift)[source]

Shifts the model

write_binary_stl(stl_filename: str, normalize_normal_vectors: bool = False, stop_on_failure=True) → None[source]

Write an STL binary file

Parameters
stl_filenamestr

the filename to read

normalize_normal_vectorsbool; default=False

should the vectors be normalized

write_stl(stl_out_filename: str, is_binary: bool = False, float_fmt: str = '%6.12f', normalize_normal_vectors: bool = False, stop_on_failure: bool = True) → None[source]

Writes an STL file

Parameters
stl_out_filenamestr

the filename to write

is_binarybool; default=False

should a binary file be written

float_fmtstr; default=’%6.12f’

the format to use if an ASCII file is used

normalize_normal_vectorsbool; default=False

should the vectors be normalized

write_stl_ascii(out_filename: str, solid_name: str, float_fmt: str = '%.6f', normalize_normal_vectors: bool = False, stop_on_failure: bool = True) → None[source]

Writes an STL in ASCII format

solid solid_name
facet normal -6.601157e-001 6.730213e-001 3.336009e-001
outer loop

vertex 8.232952e-002 2.722531e-001 1.190414e+001 vertex 8.279775e-002 2.717848e-001 1.190598e+001 vertex 8.557653e-002 2.745033e-001 1.190598e+001

endloop

endfacet

end solid

pyNastran.converters.stl.stl.read_stl(stl_filename: str, remove_elements_with_bad_normals: bool = False, log: Optional[cpylog.SimpleLogger] = None, debug: bool = False)[source]

Reads an STL file

Parameters
stl_filenamestr

the filename to read

remove_elements_with_bad_normalsbool; default=False

removes elements with NAN normal

Returns
modelSTL()

the stl model

stl_reshape Module
pyNastran.converters.stl.stl_reshape.main()[source]
pyNastran.converters.stl.stl_reshape.stl_reshape(data)[source]
stl_to_cart3d Module
pyNastran.converters.stl.stl_to_cart3d.stl_to_cart3d(stl_filename, cart3d_filename=None, log=None, debug=False, is_binary=False, float_fmt='%6.7f')[source]

Converts a Cart3D object to STL format.

Parameters
stl_filenamestr / STL()

str : path to the input STL file STL() : an STL object

cart3d_filenamestr; default=None

str : path to the output Cart3D file (or None to skip)

loglog

a logger object (or None)

debugbool; default=False

True/False (used if log is not defined)

is_binarybool; default=False

should the cart3d file be binary

float_fmtstr; default=’6.7f’

the cart3d node precision

Returns
stlSTL()

an STL object

stl_to_nastran Module
pyNastran.converters.stl.stl_to_nastran.stl_to_nastran(stl_filename, bdf_filename, nnodes_offset=0, nelements_offset=0, pid=100, mid=200, size=8, is_double=False, log=None)[source]
pyNastran.converters.stl.stl_to_nastran.stl_to_nastran_filename(stl_filename, bdf_filename, nnodes_offset=0, nelements_offset=0, pid=100, mid=200, size=8, is_double=False, log=None)[source]
utils Module
pyNastran.converters.stl.utils.merge_stl_files(stl_filenames, stl_out_filename=None, remove_bad_elements=False, is_binary=True, float_fmt='%6.12f', log=None)[source]

Combines multiple STLs into a single file

Parameters
stl_filenamesList[str, str, …]

list of stl filenames or a string filename (useful for removing bad elements)

remove_bad_elementsbool; default=False

should elements with invalid normals be removed?

stl_out_filenamestr; default=None -> no writing

string of stl output filename

is_binarybool; default=True

should the output file be binary

float_fmtstr; default=’%6.12f’

the ascii float format

Returns
stlSTL()

the stl object

su2 Package
su2_reader Module
Inheritance diagram of pyNastran.converters.su2.su2_reader
class pyNastran.converters.su2.su2_reader.SU2Reader(log=None, debug=False)[source]

Bases: object

SU2 reader/writer

initializes the SU2Reader object

_read_2d(lines, i, ndim, nelem)[source]

reads a 2d SU2 zone

_read_2d_bcs(lines, i, bcs)[source]

reads the 1d boundary conditions for a 2d SU2 zone

_read_3d(lines, i, unused_ndim, nelem)[source]

reads a 3d SU2 zone

_read_3d_bcs(lines, i, bcs)[source]

reads the 2d boundary conditions for a 3d SU2 zone

etype_nnodes_map = {3: 2, 5: 3, 9: 4, 10: 4, 12: 8, 13: 6, 14: 5}
read_su2(su2_filename)[source]

reads a 2d/3d SU2 single zone model

write_su2(su2_filename, zones=None)[source]

writes a 2d/3d multizone SU2 file

pyNastran.converters.su2.su2_reader.read_header(lines, i, log)[source]

reads the header and stores it as a dictionary

pyNastran.converters.su2.su2_reader.read_su2(su2_filename, log=None, debug=False)[source]

reads a 2d/3d SU2 multi-zone model

tecplot Package
tecplot Module
Inheritance diagram of pyNastran.converters.tecplot.tecplot
models from:

http://people.sc.fsu.edu/~jburkardt/data/tec/tec.html

class pyNastran.converters.tecplot.tecplot.Tecplot(log=None, debug: bool = False)[source]

Bases: object

Parses a hexa binary/ASCII Tecplot 360 file. Writes an ASCII Tecplot 10 file.

Supports:
  • title

  • single zone only?

  • unstructured: - nodal results - single element type; ZONETYPE = [FETRIANGLE, FEQUADRILATERAL, FETETRAHEDRON, FEBRICK] - DATAPACKING = [POINT, ELEMENT] writing - 2D/3D - full support for writing

  • structured: - nodal results - F=POINT - 2d/3d (POINT, I/J/K) - full support for writing - no reshaping of xyz to make slicing easier!

Doesn’t support:
  • text

  • geometry

  • transient writing

  • centroidal results

  • non-sequential node ids

  • data lists (100*0.0)

extract_y_slice(y0, tol=0.01, slice_filename=None)[source]

doesn’t work…

property headers_dict
property hexa_elements
property nzones

gets the number of zones

property quad_elements
read_table(tecplot_file, unused_iblock, headers_dict, line)[source]

reads a space-separated tabular data block

read_tecplot(tecplot_filename)[source]

Reads an ASCII/binary Tecplot file.

The binary file reader must have ONLY CHEXAs and be Tecplot 360 with rho, u, v, w, and p. The ASCII file reader has only been tested with Tecplot 10, but will probably work on Tecplot360. It should work with any set of variables.

read_tecplot_ascii(tecplot_filename, nnodes=None, nelements=None)[source]

Reads a Tecplot ASCII file.

Supports:
  • CTRIA3

  • CQUAD4

  • CTETRA

  • CHEXA

Note

assumes single typed results

Warning

BLOCK option doesn’t work if line length isn’t the same…

read_tecplot_binary(tecplot_filename, nnodes=None, nelements=None)[source]

The binary file reader must have ONLY CHEXAs and be Tecplot 360 with: rho, u, v, w, and p.

show(n, types='ifs', endian=None)[source]
show_data(data, types='ifs', endian=None)[source]

Shows a data block as various types

Parameters
databytes

the binary string bytes

typesstr; default=’ifs’

i - int f - float s - string d - double (float64; 8 bytes) q - long long (int64; 8 bytes)

l - long (int; 4 bytes) I - unsigned int (int; 4 bytes) L - unsigned long (int; 4 bytes) Q - unsigned long long (int; 8 bytes)

endianstr; default=None -> auto determined somewhere else in the code

the big/little endian {>, <}

.. warning:: ‘s’ is apparently not Python 3 friendly
show_ndata(n, types='ifs')[source]
slice_x(xslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

slice_xyz(xslice, yslice, zslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

slice_y(yslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

slice_z(zslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

property tet_elements
property tri_elements
write_tecplot(tecplot_filename, res_types=None, adjust_nids=True)[source]

Only handles single type writing

Parameters
tecplot_filenamestr

the path to the output file

res_typesstr; List[str, str, …]; default=None -> all

the results that will be written (must be consistent with self.variables)

adjust_nidsbool; default=True

element_ids are 0-based in binary and must be switched to 1-based in ASCII

property xy
property xyz
pyNastran.converters.tecplot.tecplot.get_next_line(lines, iline)[source]

Read the next line from the file. Handles comments.

pyNastran.converters.tecplot.tecplot.get_next_nsline(lines, iline, sline, nvars)[source]
pyNastran.converters.tecplot.tecplot.get_next_sline(lines, iline)[source]

Read the next split line from the file. Handles comments.

pyNastran.converters.tecplot.tecplot.main()[source]
pyNastran.converters.tecplot.tecplot.main2()[source]

tests slicing

pyNastran.converters.tecplot.tecplot.read_block(lines, iline, xyz, results, zone_type, line, sline, nnodes, nvars, log)[source]

BLOCK format is similar to PLOT3D in that you read all the X values before the Ys, Zs, and results. The alternative format is POINT, which reads them on a per node basis.

pyNastran.converters.tecplot.tecplot.read_point(lines, iline, xyz, results, zone_type, line, sline, nnodes, nvars, log)[source]

a POINT grid is a structured grid

pyNastran.converters.tecplot.tecplot.read_tecplot(tecplot_filename: str, use_cols=None, dtype=None, log=None, debug=False)[source]

loads a tecplot file

pyNastran.converters.tecplot.tecplot.read_unstructured_elements(lines, iline, sline, elements, nelements)[source]
pyNastran.converters.tecplot.tecplot.read_zone_block(lines, iline, xyz, results, nresults, zone_type, sline, nnodes, log)[source]

a zone can be structured or unstructred

pyNastran.converters.tecplot.tecplot.split_headers(header_in)[source]
pyNastran.converters.tecplot.tecplot.split_line(line)[source]

splits a comma or space separated line

tecplot_to_cart3d Module
Defines:
  • tecplot_to_cart3d_filename(tecplot_filename, cart3d_filename, debug=True)

  • tecplot_to_cart3d(tecplot_filename, cart3d_filename=None, debug=True)

pyNastran.converters.tecplot.tecplot_to_cart3d.get_zone_tris_xyz(zone)[source]

gets the tris and associated xyz points

pyNastran.converters.tecplot.tecplot_to_cart3d.main()[source]

runs the test problem

pyNastran.converters.tecplot.tecplot_to_cart3d.tecplot_to_cart3d(tecplot_filename, cart3d_filename=None, remove_degenerate_tris=True, log=None, debug=True)[source]

Converts a Tecplot file to Cart3d.

Parameters
remove_degenerate_trisbool; default=False

removes degenerate triangles (triangles with an area of 0.0)

pyNastran.converters.tecplot.tecplot_to_cart3d.tecplot_to_cart3d_filename(tecplot_filename, cart3d_filename, remove_degenerate_tris=True, log=None, debug=True)[source]

Converts a Tecplot file to Cart3d.

tecplot_to_nastran Module
Defines:
  • tecplot_to_nastran(tecplot_filename, bdf_filename, debug=True)

  • tecplot_to_nastran(tecplot_filename, bdf_filename, debug=True)

pyNastran.converters.tecplot.tecplot_to_nastran.nastran_table_to_tecplot(bdf_model: pyNastran.bdf.bdf.BDF, case, variables: List[str]) → pyNastran.converters.tecplot.tecplot.Tecplot[source]

assumes only triangles

pyNastran.converters.tecplot.tecplot_to_nastran.nastran_tables_to_tecplot_filenames(tecplot_filename_base: str, bdf_model: pyNastran.bdf.bdf.BDF, case, variables: Optional[List[str]] = None, ivars: Optional[List[int]] = None) → None[source]
pyNastran.converters.tecplot.tecplot_to_nastran.tecplot_to_nastran(tecplot_filename: Union[str, Tecplot], bdf_filename: str, log: Optional[SimpleLogger] = None, debug: bool = True) → None[source]

Converts a Tecplot file to Nastran.

pyNastran.converters.tecplot.tecplot_to_nastran.tecplot_to_nastran_filename(tecplot_filename: Union[str, Tecplot], bdf_filename: str, log: Optional[SimpleLogger] = None, debug: bool = True) → BDF[source]

Converts a Tecplot file to Nastran.

utils Module
pyNastran.converters.tecplot.utils.merge_tecplot_files(tecplot_filenames, tecplot_filename_out=None, log=None)[source]

merges one or more tecplot files

utils Module
pyNastran.converters.tecplot.utils.merge_tecplot_files(tecplot_filenames, tecplot_filename_out=None, log=None)[source]

merges one or more tecplot files

tetgen Package
tetgen Module
Inheritance diagram of pyNastran.converters.tetgen.tetgen
defines:
  • read_tetgen(base, dimension_flag=2, log=None, debug=False)

  • Tetgen(log=None, debug=False): - write_nastran(self, bdf_filename) - read_tetgen(self, node_filename, smesh_filename, ele_filename, dimension_flag) - read_smesh(self, smesh_filename) - read_nodes(self, node_filename) - read_ele(self, ele_filename, form_flag=’1’)

class pyNastran.converters.tetgen.tetgen.Tetgen(log=None, debug=False)[source]

Bases: object

http://www.wias-berlin.de/preprint/1762/wias_preprints_1762.pdf

Initializes the Tetgen object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

read_smesh(smesh_filename)[source]

reads the *.smesh file

read_tetgen(node_filename, smesh_filename, ele_filename, dimension_flag)[source]

reads a tetgen file

write_nastran(bdf_filename)[source]

writes a nastran bdf

pyNastran.converters.tetgen.tetgen.clean_lines(lines)[source]

removes blank lines and commented lines

pyNastran.converters.tetgen.tetgen.main()[source]
pyNastran.converters.tetgen.tetgen.read_ele(ele_filename, form_flag='1')[source]

reads the *.ele file

pyNastran.converters.tetgen.tetgen.read_nodes(node_filename)[source]

reads the *.node file

pyNastran.converters.tetgen.tetgen.read_tetgen(base, dimension_flag=2, log=None, debug=False)[source]

simplified interface to Tetgen files

usm3d Package
bc_to_nastran Module
pyNastran.converters.usm3d.bc_to_nastran.cogsg_bc_to_nastran(cogsg_filename, bc_filename, nastran_filename, include_shells=True, include_solids=False)[source]

converts a *.cogsg and a *.bc file to a *.bdf file

iface_format Module
Inheritance diagram of pyNastran.converters.usm3d.iface_format
class pyNastran.converters.usm3d.iface_format.IFace(log=None, debug=None)[source]

Bases: object

read_iface(iface_filename)[source]

BC File… nFaces nBouc, nRegions, ???

nFaces - number of faces on the surface nBouc - ??? nRegions - number of independent surfaces that are set in the mapbc file ???? -

Cogsg File… header = {

‘dummy’: 6266912, ‘nBoundPts’: 28434, ‘nPoints’: 79734, ‘nElements’: 391680, ‘nViscPts’: 26304, ‘nViscElem’: 130560, ‘tc’: 0.0, ‘inew’: -1,

}

read_poin1(poin1_filename)[source]
pyNastran.converters.usm3d.iface_format.factors(nraw)[source]

function for getting the primes factors of a number.

This is supposed to help with figuring out the file format. I’m sure there’s a better method, but it doesn’t matter too much.

time_accurate_results Module
pyNastran.converters.usm3d.time_accurate_results.get_flo_files(dirname, model_name, nstart=0, nlimit=None, include_dirname_in_path=True)[source]

get the flo files in ascending order

pyNastran.converters.usm3d.time_accurate_results.get_flo_files_from_n(dirname, model_name, n_list, include_dirname_in_path=True)[source]

get the flo files in ascending order

pyNastran.converters.usm3d.time_accurate_results.get_n_list(dirname, model_name)[source]
gets files of the form:
  • modelname + ‘_xxx.flo’

pyNastran.converters.usm3d.time_accurate_results.main()[source]
pyNastran.converters.usm3d.time_accurate_results.run_time_acc(dirname, model_name, node_ids, nstart=0, nlimit=None, num_cpus=8)[source]

node ids start at index=0

pyNastran.converters.usm3d.time_accurate_results.write_loads(csv_filename, loads, node_id)[source]
usm3d_reader Module
Inheritance diagram of pyNastran.converters.usm3d.usm3d_reader
Defines:
  • Usm3d(log=None, debug=False)
    • read_cogsg(cogsg_file, stop_after_header=False)

    • read_usm3d(self, basename, dimension_flag, read_loads=True)

    • write_usm3d(basename)

    • read_mapbc(mapbc_filename)

    • read_bc(self, bc_filename, stop_after_header=False, get_lbouf=False)

    • read_flo(self, flo_filename, n=None, node_ids=None)

class pyNastran.converters.usm3d.usm3d_reader.Usm3d(log=None, debug=None)[source]

Bases: object

Usm3d interface class

Initializes the Usm3d object

Parameters
debugbool/None; default=True
used to set the logger if no logger is passed in

True: logs debug/info/error messages False: logs info/error messages None: logs error messages

loglogging module object / None

if log is set, debug is ignored and uses the settings the logging object has

bcmap_to_bc_name = {0: 'Supersonic Inflow', 1: 'Reflection plane', 2: 'Supersonic Outflow', 3: 'Subsonic Outer Boundaries', 4: 'Viscous Surfaces', 5: 'Inviscid aerodynamic surface', 44: 'Blunt base', 55: 'Thick Trailing Edges', 101: 'Engine-intake', 102: 'Engine-exhaust (Jet Core)', 103: 'Engine-exhaust (Fan)', 201: 'Engine-intake', 202: 'Engine-exhaust (Jet Core)', 203: 'Engine-exhaust (Fan)', 1001: 'Special inflow', 1002: 'Special Outflow (Fixed Pressure)'}
read_bc(bc_filename, stop_after_header=False, get_lbouf=False)[source]
read_cogsg(cogsg_filename, stop_after_header=False)[source]

Reads the *.cogsg file

Returns
nodes(N, 3) float ndarray

the nodes

tet_elements???

???

read_flo(flo_filename, n=None, node_ids=None)[source]
ipltqn is a format code where:
  • ipltqn = 0 (no printout)

  • ipltqn = 1 (unformatted)

  • ipltqn = 2 (formatted) - default

Parameters
flo_filenamestr

the name of the file to read

nint; default=None

the number of points to read (initializes the array) n is typically the number of points, but is not required to be this lets you read nodes 1…n, but not greater than n+1. node_ids must be set to None.

node_idsList[int]; default=None

the specific points to read (n must be set to None).

nvars = 5
  • (nodeID, rho, rhoU, rhoV, rhoW) = sline (e) = line

nvars = 6
  • (nodeID, rho, rhoU, rhoV, rhoW, e) = line

Also, Nastran-esque float formatting is sometimes used,
so 5.0-100 exists, which is 5.0E-100. We just assume it’s 0.
Returns
node_id(nnodes, ) int ndarray

the node ids for the selected loads

loadsdict[result_name]data
result_namestr

the name of the result

data(nnodes, ) float ndarray

the data corresponding to the result_name

read_mapbc(mapbc_filename)[source]

0 - Supersonic Inflow 1 - Reflection plane 2 - Supersonic Outflow 3 - Subsonic Outer Boundaries 4 - Viscous Surfaces 5 - Inviscid aerodynamic surface 44 - Blunt base 55 - Thick Trailing Edges n*100+3 - Engine-exhaust (Fan) n*100+2 - Engine-exhaust (Jet Core) n*100+1 - Engine-intake 1001 - Special inflow 1002 - Special Outflow (Fixed Pressure)

0 - Freestream - Supersonic Inflow (Bounding Box) 2 - Extrapolation - Supersonic Outflow (Bounding Box)

1 - Reflection Plane - Tangent Flow - (Symmetry Plane) 3 - Characteristic Inflow - Subsonic Inflow/Outflow/Sideflow (Bounding Box)

4 - Inviscid Surface (Physical) 5 - Viscous Surface (Physical) #==============================

#Thu Dec 19 11:46:03 2013 #bc.map Patch # BC Family #surf surfIDs Family #——————————————————– 1 44 44 0 0 Base -> Blunt base 2 4 4 0 0 Bay -> Viscous Surfaces 3 0 0 0 0 Inflow -> Supersonic Inflow 4 2 2 0 0 Outflow -> Supersonic Outflow 5 3 3 0 0 Sideflow -> Characteristic Inflow/Outflow 7 1 1 0 0 Symmetry -> Reflection plane

read_usm3d(basename, unused_dimension_flag, read_loads=True)[source]
Parameters
basenamestr

the root path to the *.cogsg, *.bc, *.mapbc, *.face, *.front files

unused_dimension_flagint; unused

??? 2?/3

read_loadsbool; default=True

???

Returns
nodes(nnodes, 3) float ndarray

the xyz coordinates

tris_tets???

???

tris(ntri, 3) int ndarray

0-based node indices

bcs(ntris, ) int ndarray

1-based patch/”property” IDs

mapbcdict[patch_id]map_line

patch_id : int map_line : List[bc, family, surf, surf_ids]

bcint

boundary condition number

familyint

family number

surfint

surface number

surf_idsstr

???

loadsdict[]

???

flo_filenamestr

the latest result filename None : no *.flo file could be found static : *.flo transient : *_xxx.flo

write_usm3d(basename)[source]

writes a *.cogsg, *.front, *.face file

pyNastran.converters.usm3d.usm3d_reader.main()[source]

test problem

pyNastran.converters.usm3d.usm3d_reader.parse_float(svalue)[source]

floats a value

pyNastran.converters.usm3d.usm3d_reader.read_flo(flo_filename, n=None, node_ids=None)[source]

reads a *.flo file

pyNastran.converters.usm3d.usm3d_reader.read_usm3d(basename, log=None, debug=None)[source]

reads a usm3d file

pyNastran.converters.usm3d.usm3d_reader.write_cogsg_volume(model, cogsg_fileame)[source]

writes a *.cogsg file

pyNastran.converters.usm3d.usm3d_reader.write_usm3d_volume(model, basename)[source]

writes a *.cogsg, *.front, *.face file

References to pyNastran

  1. Reasor, D. A., Bhamidipati, K. K., and Chin A. W. “X-56A Aeroelastic Flight Test Predictions,”. Edwards Air Force Base, CA. 54th AIAA Aerospace Sciences Meeeting. San Diego, CA. AIAA 2016-1053. 2016.

# this is commented out because there is a “..” with a blank line after .. _X56: http://arc.aiaa.org/doi/abs/10.2514/6.2016-1053 _X56 1. Reasor, D. A., Bhamidipati, K. K., and Chin A. W. “X-56A Aeroelastic Flight Test Predictions,”.

Edwards Air Force Base, CA. 54th AIAA Aerospace Sciences Meeeting. San Diego, CA. AIAA 2016-1053. 2016.

Indices and tables