Welcome to pyNastran’s documentation for v1.2!

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 373 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:

pip install pyNastran

Python
The software is tested against:
  • Python 2.7.15 (Windows/Linux)
  • Python 3.6 (Linux)
  • Python 3.7 (Windows/Linux)
Packages

The package requirements are slightly different depending on your version of Python, but the ones below will work on all supported versions. The set of packages include:

  • Required:
    • numpy >= 1.14
    • scipy >= 1.0
    • cpylog >= 1.0.2
    • docopt == 0.6.2 (required for command line tools)
    • typing >= 3.6.4 (python 2.7)
    • pathlib2 >= 2.3.0 (python 2.7)
  • Optional:
    • colorama >= 0.3.9 (colored logging)
    • pandas ???
    • matplotlib >= 2.2.4 (plotting)
    • h5py >= 2.8.0 (HDF5 support)
  • GUI:
    • vtk 7.1.1 or 8.1.1
    • qtpy >= 1.4.0
    • Qt (pick one)
      • PyQt4 >= 4.x
      • PyQt5 >= 5.9.2
      • PySide >= 1.2.1
      • PySide2 >= 5.11.2
    • QScintilla >= ??? (optional for fancy scripting)
    • pygments >= 2.2.0 (optional for fancy scripting)
    • imageio >= 2.4.1 (optional for animation support)
Install Procedure - From Base Python
Base functionality:
  • Windows * Download Windows x86-64 MSI installer
  • Linux/Mac Python * Make sure to get 64-bit Python.
  • On the command line:
    • pip install numpy
    • pip install scipy
    • pip install docopt
    • pip install colorama
    • conda install typing (Python 2.7)
    • conda install pathlib2 (Python 2.7)
    • pip install pandas (optional)
    • pip install h5py (optional for HDF5 support)
    • pip install matplotlib (optional for plotting)
    • pip install cpylog
    • pip install pyNastran
For gui support (optional; required for GUI):
  • From Windows binaries: * Download VTK:

    • VTK-7.1.1-cp27-cp27m-win_amd64.whl (Python 2.7)
    • VTK-8.1.2-cp36-cp36m-win_amd64.whl (Python 3.6)
    • VTK-8.1.2-cp37-cp37m-win_amd64.whl (Python 3.7)
  • On the command line:
    • pip install imageio (optional for animation support)
    • pip install VTK*.whl
    • pip install pyqt
    • pip install qtpy
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-master)
  • 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-master 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.2 (master/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.2 --progress -v "https://github.com/SteveDoyle2/pyNastran.git" "C:\\work\\pyNastran_1.2"

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 2.7, 3.6-3.7
  • BSD-3 license
  • unicode support
  • importable from within Matlab
  • limited package requirements for BDF/OP2/F06
  • additional features available with more packages

    • BDF/OP2:

      • h5py for HDF5 input/output support
      • PyQt4/PyQt5/PySide/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

      • PyQt4/PyQt5/PySide/PySide2
      • VTK 7/8
    • 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:
    • 473 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
    • 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
aecomps AECOMP
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
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
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
dmigs DMIG
dmijis DMIJI
dmijs DMIJ
dmiks DMIK
dmis DMI
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
flfacts FLFACT
flutters FLUTTER
frequencies FREQ, FREQ1, FREQ2, FREQ3, FREQ4, FREQ5
grdset GRDSET
gridb GRIDB
gusts GUST
hyperelastic_materials MATHE, MATHP
load_combinations 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
monitor_points 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 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
qsets QSET, QSET1
radcavs RADCAV, RADLST
radmtx RADMTX
radset RADSET
random_tables TABRND1, TABRNDG
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
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
  • For matrices, the OP2 is preffered. It’s simply faster.
  • Types:
    • ASCII/binary
    • SMALL/BIG MAT format
    • Real/Complex
    • Sparse/Dense
    • Single/Double Precision
  • ASCII writer
OP2 Reader / 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)
    • F06 writing
    • Most fatal errors caught (BDF 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
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/master/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/master/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/master/docs/quick_start/demo/op2_demo_numpy2.ipynb

It’s recommended that you first go through: - https://github.com/SteveDoyle2/pyNastran/tree/master/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/master/docs/quick_start/demo/op2_demo_numpy1.ipynb

It’s recommended that you first go through: - https://github.com/SteveDoyle2/pyNastran/tree/master/docs/quick_start/demo/op2_intro.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/master/docs/quick_start/demo/op2_demo.ipynb - https://github.com/SteveDoyle2/pyNastran/tree/master/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.

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/master/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/master/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\pynastran\master3\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/master/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/master/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 intial 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.

Additonal 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.

Python 2.7 with vtk==5.10.1 or vtk==6.3.0 with PyQt4 will give you the best looking GUI with v1.0; vtk==7 will work though.

The master requires vtk==7 or vtk==8 and works in either Python 2.7/3.5+ and PyQt4/5.

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 selcted 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.2.

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=True, log=None, mode='msc')[source]

Bases: pyNastran.bdf.bdf.BDF_

NASTRAN BDF Reader/Writer/Editor class.

Initializes the BDF object

Parameters:
debug : bool/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

log : logging module object / None

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

mode : str; default=’msc’

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

AEFact(self, aefact, msg='')

gets an AEFACT

AELIST(self, aid, msg='')

gets an AELIST

gets an AELINK

AEList(self, aelist, msg='')

gets an AELIST

AEParam(self, aid, msg='')

gets an AEPARM

AEStat(self, aid, msg='')

gets an AESTAT

AESurf(self, aesurf_id, msg='')

gets an AESURF

Acsid(self, msg='')

gets the aerodynamic coordinate system

Aero(self, msg='')

gets the AERO

Aeros(self, msg='')

gets the AEROS

CAero(self, eid, msg='')

gets an CAEROx

CMethod(self, sid, msg='')

gets a METHOD (EIGC)

Coord(self, cid, msg='')

gets an COORDx

DAREA(self, darea_id, msg='')

gets a DAREA

DConstr(self, oid, msg='')

gets a DCONSTR

DDVal(self, oid, msg='')

gets a DDVAL

DELAY(self, delay_id, msg='')

gets a DELAY

DEQATN(self, equation_id, msg='')

gets a DEQATN

DLoad(self, sid, consider_dload_combinations=True, msg='')

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

DMIG(self, dname, msg='')

gets a DMIG

DPHASE(self, dphase_id, msg='')

gets a DPHASE

DResp(self, dresp_id, msg='')

gets a DRESPx

DVcrel(self, dv_id, msg='')

gets a DVCREL1/DVCREL2

DVmrel(self, dv_id, msg='')

gets a DVMREL1/DVMREL2

DVprel(self, dv_id, msg='')

gets a DVPREL1/DVPREL2

Desvar(self, desvar_id, msg='')

gets a DESVAR

Element(self, eid, msg='')

Gets an element

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

Elements(self, eids, msg='')

Gets an series of elements

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

EmptyNode(self, nid, msg='')

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

Parameters:
nid : int / None

the node id 0, None : indicate blank

msg : str; default=’‘

a debugging message

EmptyNodes(self, nids, msg='')

Returns a series of node objects given a list of IDs

FLFACT(self, sid, msg='')

gets an FLFACT

Flutter(self, fid, msg='')

gets a FLUTTER

Gust(self, sid, msg='')

gets a GUST

HyperelasticMaterial(self, mid, msg='')

gets a hyperelastic material

Load(self, sid, consider_load_combinations=True, msg='')

Gets an LOAD or FORCE/PLOAD4/etc.

Parameters:
sid : int

the LOAD id

consider_load_combinations : bool; default=True

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

msg : str

additional message to print when failing

MPC(self, mpc_id, consider_mpcadd=True, msg='')

Gets an MPCADD or MPC

Parameters:
mpc_id : int

the MPC id

consider_mpcadd : bool; default=True

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

msg : str

additional message to print when failing

Mass(self, eid, msg='')

gets a mass element (CMASS1, CONM2)

Material(self, mid, msg='')

gets a structural or thermal material

Materials(self, mids, msg='')

gets one or more Materials

Method(self, sid, msg='')

gets a METHOD (EIGR, EIGRL)

NLParm(self, nid, msg='')

gets an NLPARM

NSM(self, nsm_id, consider_nsmadd=True, msg='')

Gets an LOAD or FORCE/PLOAD4/etc.

Parameters:
nsm_id : int

the LOAD id

consider_nsmadd : bool; default=True

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

msg : str

additional message to print when failing

Node(self, nid, msg='')

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:
nid : int

the node id

msg : str; default=’‘

a debugging message

Nodes(self, nids, msg='')

Returns a series of node objects given a list of IDs

PAero(self, pid, msg='')

gets a PAEROx

Phbdy(self, pid, msg='')

gets a PHBDY

Point(self, nid, msg='')

Returns a POINT card

Points(self, nids, msg='')

Returns a series of POINT objects given a list of IDs

Properties(self, pids, msg='')

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

Property(self, pid, msg='')

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

PropertyMass(self, pid, msg='')

gets a mass property (PMASS)

RandomTable(self, tid, msg='')

gets a TABRND1 / TABRNDG

RigidElement(self, eid, msg='')

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

SET1(self, set_id, msg='')

gets a SET1

SPC(self, spc_id, consider_spcadd=True, msg='')

Gets an SPCADD or SPC

Parameters:
spc_id : int

the SPC id

consider_spcadd : bool; default=True

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

msg : str

additional message to print when failing

Set(self, sid, msg='')

gets a SET, SET1, SET2, or SET3 card

Spline(self, eid, msg='')

gets a SPLINEx

StructuralMaterial(self, mid, msg='')

gets a structural material

Table(self, tid, msg='')

gets a TABLES1, TABLEST, ???

TableD(self, tid, msg='')

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

TableM(self, tid, msg='')

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

ThermalMaterial(self, mid, msg='')

gets a thermal material

add_accel(self, sid, N, direction, locs, vals, cid=0, comment='')

Creates an ACCEL card

Parameters:
sid : int

load id

N : (3, ) float ndarray

the acceleration vector in the cid frame

direction : str

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

locs : List[float]

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

vals : List[float]

The load scale factor associated with location LOCi

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

add_accel1(self, sid, scale, N, nodes, cid=0, comment='')

Creates an ACCEL1 card

Parameters:
sid : int

load id

scale : float

scale factor for load

N : (3, ) float ndarray

the acceleration vector in the cid frame

direction : str

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

nodes : List[int]

the nodes to apply acceleration to

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

add_acsrce(self, sid, excite_id, rho, b, delay=0, dphase=0, power=0, comment='')

Creates an ACSRCE card

Parameters:
sid : int

load set id number (referenced by DLOAD)

excite_id : int

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

rho : float

Density of the fluid

b : float

Bulk modulus of the fluid

delay : int; default=0

Time delay, τ.

dphase : int / float; default=0

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

power : int; 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.

int : TABLEDi entry that defines P(f) for all degrees of

freedom in EXCITEID entry.

comment : str; default=’‘

a comment for the card

add_aecomp(self, name, list_type, lists, comment='')

Creates an AECOMP card

Parameters:
name : str

the name of the component

list_type : str

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.

lists : List[int, int, …]; int

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

comment : str; default=’‘

a comment for the card

add_aecompl(self, name, labels, comment='')

Creates an AECOMPL card

Parameters:
name : str

the name of the component

labels : List[str, str, …]; str

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

comment : str; default=’‘

a comment for the card

add_aefact(self, sid, fractions, comment='')

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:
sid : int

unique id

fractions : List[float, …, float]

list of percentages

comment : str; default=’‘

a comment for the card

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

Parameters:
aelink_id : int

unique id

label : str

name of the dependent AESURF card

independent_labels : List[str, …, str]

name for the independent variables (AESTATs)

linking_coefficents : List[float]

linking coefficients

comment : str; default=’‘

a comment for the card

add_aelist(self, sid, elements, comment='')

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

Parameters:
sid : int

unique id

elements : List[int, …, int]

list of box ids

comment : str; default=’‘

a comment for the card

add_aeparm(self, aeparm_id, label, units, comment='')

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

Parameters:
aeparm_id : int

the unique id

label : str

the variable name

units : str

unused by Nastran

comment : str; default=’‘

a comment for the card

add_aero(self, velocity, cref, rho_ref, acsid=0, sym_xz=0, sym_xy=0, comment='')

Creates an AERO card

Parameters:
velocity : float

the airspeed

cref : float

the aerodynamic chord

rho_ref : float

FLFACT density scaling factor

acsid : int; default=0

aerodyanmic coordinate system

sym_xz : int; default=0

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

sym_xy : int; default=0

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

comment : str; default=’‘

a comment for the card

add_aeros(self, cref, bref, sref, acsid=0, rcsid=0, sym_xz=0, sym_xy=0, comment='')

Creates an AEROS card

Parameters:
cref : float

the aerodynamic chord

bref : float

the wing span

sref : float

the wing area

acsid : int; default=0

aerodyanmic coordinate system

rcsid : int; default=0

coordinate system for rigid body motions

sym_xz : int; default=0

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

sym_xy : int; default=0

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

comment : str; default=’‘

a comment for the card

add_aestat(self, aestat_id, label, comment='')

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

Parameters:
aestat_id : int

unique id

label : str

name for the id

comment : str; default=’‘

a comment for the card

add_aesurf(self, 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='')

Creates an AESURF card, which defines a control surface

Parameters:
aesid : int

controller number

label : str

controller name

cid1 / cid2 : int / None

coordinate system id for primary/secondary control surface

alid1 / alid2 : int / None

AELIST id for primary/secondary control surface

eff : float; default=1.0

Control surface effectiveness

ldw : str; default=’LDW’

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

crefc : float; default=1.0

reference chord for the control surface

crefs : float; default=1.0

reference area for the control surface

pllim / pulim : float; default=-pi/2 / pi/2

Lower/Upper deflection limits for the control surface in radians

hmllim / hmulim : float; default=None

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

tqllim / tqulim : int; 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

comment : str; default=’‘

a comment for the card

add_aesurfs(self, aesid, label, list1, list2, comment='')

Creates an AESURFS card

Parameters:
aesid : int

the unique id

label : str

the AESURF name

list1 / list2 : int / None

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

comment : str; default=’‘

a comment for the card

add_aset(self, ids, components, comment='')

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

Parameters:
ids : List[int]

the GRID/SPOINT ids

components : List[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

comment : str; default=’‘

a comment for the card

Notes

the length of components and ids must be the same

add_aset1(self, ids, components, comment='')
add_axic(self, nharmonics, comment='')

Creates a AXIC card

add_baror(self, pid, is_g0, g0, x, offt='GGG', comment='')
add_bconp(self, contact_id, slave, master, sfac, fric_id, ptype, cid, comment='')

Creates a BCONP card

add_bcrpara(self, crid, surf='TOP', offset=None, Type='FLEX', grid_point=0, comment='')

Creates a BCRPARA card

Parameters:
crid : int

CRID Contact region ID.

offset : float; default=None

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

surf : str; default=’TOP’

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

Type : str; 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_point : int; 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.

comment : str; default=’‘

a comment for the card

add_bctadd(self, csid, contact_sets, comment='')

Creates a BCTADD card

add_bctpara(self, csid, params, comment='')

Creates a BCTPARA card

add_bctset(self, csid, sids, tids, frictions, min_distances, max_distances, comment='', sol=101)

Creates a BCTSET card

add_blseg(self, line_id, nodes, comment='')

Creates a BLSEG card

add_bset(self, ids, components, comment='')

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:
ids : List[int]

the GRID/SPOINT ids

components : List[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

comment : str; default=’‘

a comment for the card

Notes

the length of components and ids must be the same

add_bset1(self, ids, components, comment='')
add_bsurf(self, sid, eids, comment='')

Creates a BSURF card

add_bsurfs(self, id, eids, g1s, g2s, g3s, comment='')

Creates a BSURFS card

add_caero1(self, eid, pid, igroup, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, nchord=0, lchord=0, comment='')

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

Parameters:
eid : int

element id

pid : int, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igroup : int

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)

x12 : float

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

x43 : float

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

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspan : int; default=0

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

nchord : int; default=0

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

lspan : int, AEFACT; default=0

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

lchord : int, AEFACT; default=0

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

comment : str; default=’‘

a comment for the card

add_caero2(self, eid, pid, igroup, p1, x12, cp=0, nsb=0, nint=0, lsb=0, lint=0, comment='')

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

Parameters:
eid : int

element id

pid : int, PAERO2

int : PAERO2 ID PAERO2 : PAERO2 object (xref)

igroup : int

Group number

p1 : (1, 3) ndarray float

xyz location of point 1 (forward position)

x12 : float

length of the CAERO2

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nsb : int; default=0

Number of slender body elements

lsb : int; default=0

AEFACT id for defining the location of the slender body elements

nint : int; default=0

Number of interference elements

lint : int; default=0

AEFACT id for defining the location of interference elements

comment : str; default=’‘

a comment for the card

add_caero3(self, eid, pid, list_w, p1, x12, p4, x43, cp=0, list_c1=None, list_c2=None, comment='')

Creates a CAERO3 card

add_caero4(self, eid, pid, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, comment='')

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

Parameters:
eid : int

element id

pid : int, PAERO4

int : PAERO4 ID PAERO4 : PAERO4 object (xref)

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)

x12 : float

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

x43 : float

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

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspan : int; default=0

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

lspan : int, AEFACT; default=0

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

comment : str; default=’‘

a comment for the card

add_caero5(self, eid, pid, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, ntheory=0, nthick=0, comment='')

Creates a CAERO5 card

add_card(self, card_lines, card_name, comment='', ifile=None, is_list=True, has_none=True)

Adds a card object to the BDF object.

Parameters:
card_lines: list[str]

the list of the card fields

card_name : str

the card_name -> ‘GRID’

comment : str

an optional the comment for the card

is_list : bool, 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_none : bool; 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_object : BDFCard()

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(self, 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_name : str

the card_name -> ‘GRID’

comment : str

an optional the comment for the card

has_none : bool; 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_object : BDFCard()

the card object representation of card

add_card_ifile(self, ifile, card_lines, card_name, comment='', is_list=True, has_none=True)

Same as add_card except it has an ifile parameter

add_card_lines(self, 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_name : str

the card_name -> ‘GRID’

comment : str; default=’‘

an optional the comment for the card

has_none : bool; default=True

can there be trailing Nones in the card data (e.g. [‘GRID, 1, 2, 3.0, 4.0, 5.0, ‘])

add_cbar(self, eid, pid, nids, x, g0, offt='GGG', pa=0, pb=0, wa=None, wb=None, comment='')

Adds a CBAR card

Parameters:
pid : int

property id

mid : int

material id

nids : List[int, int]

node ids; connected grid points at ends A and B

x : List[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0 : int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offt : str; default=’GGG’

Offset vector interpretation flag

pa / pb : int; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wb : List[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

comment : str; default=’‘

a comment for the card

add_cbarao(self, eid, scale, x, comment='')

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:
eid : int

element id

scale : str

defines what x means LE : x is in absolute coordinates along the bar FR : x is in fractional

x : List[float]

the additional output locations len(x) <= 6

comment : str; default=’‘

a comment for the card

Notes

MSC only

add_cbeam(self, eid, pid, nids, x, g0, offt='GGG', bit=None, pa=0, pb=0, wa=None, wb=None, sa=0, sb=0, comment='')

Adds a CBEAM card

Parameters:
pid : int

property id

mid : int

material id

nids : List[int, int]

node ids; connected grid points at ends A and B

x : List[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0 : int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offt : str; default=’GGG’

Offset vector interpretation flag None : bit is active

bit : float; 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 / pb : int; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wb : List[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

sa / sb : int; 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

comment : str; default=’‘

a comment for the card

Notes

offt/bit are MSC specific fields

add_cbeam3(self, eid, pid, nids, x, g0, wa, wb, wc, tw, s, comment='')

Creates a CBEAM3 card

add_cbend(self, eid, pid, nids, g0, x, geom, comment='')

Creates a CBEND card

add_cbush(self, eid, pid, nids, x, g0, cid=None, s=0.5, ocid=-1, si=None, comment='')

Creates a CBUSH card

Parameters:
eid : int

Element id

pid : int

Property id (PBUSH)

nids : List[int, int]

node ids; connected grid points at ends A and B The nodes may be coincident, but then cid is required.

x : List[float, float, float]; None
List : the directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use g0

g0 : int/None
int : the directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use x

cid : int; 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)

ocid : int; 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)

si : List[float, float, float]; default=None

Components of spring-damper offset in the OCID coordinate system if OCID > 0. None : [None, None, None]

comment : str; default=’‘

a comment for the card

add_cbush1d(self, eid, pid, nids, cid=None, comment='')

Creates a CBUSH1D card

add_cbush2d(self, eid, pid, nids, cid=0, plane='XY', sptid=None, comment='')

Creates a CBUSH2D card

add_cconeax(self, eid, pid, rings, comment='')

Creates a CCONEAX card

add_cdamp1(self, eid, pid, nids, c1=0, c2=0, comment='')

Creates a CDAMP1 card

Parameters:
eid : int

element id

pid : int

property id (PDAMP)

nids : List[int, int]

node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

add_cdamp2(self, eid, b, nids, c1=0, c2=0, comment='')

Creates a CDAMP2 card

Parameters:
eid : int

element id

b : float

damping

nids : List[int, int]

SPOINT ids node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

add_cdamp3(self, eid, pid, nids, comment='')

Creates a CDAMP3 card

Parameters:
eid : int

element id

pid : int

property id (PDAMP)

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_cdamp4(self, eid, b, nids, comment='')

Creates a CDAMP4 card

Parameters:
eid : int

element id

b : float

damping

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_cdamp5(self, eid, pid, nids, comment='')

Creates a CDAMP5 card

Parameters:
eid : int

element id

pid : int

property id (PDAMP5)

nids : List[int, int]

GRID/SPOINT ids

comment : str; default=’‘

a comment for the card

add_celas1(self, eid, pid, nids, c1=0, c2=0, comment='')

Creates a CELAS1 card

Parameters:
eid : int

element id

pid : int

property id (PELAS)

nids : List[int, int]

node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

add_celas2(self, eid, k, nids, c1=0, c2=0, ge=0.0, s=0.0, comment='')

Creates a CELAS2 card

Parameters:
eid : int

element id

k : float

spring stiffness

nids : List[int, int]

SPOINT ids node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

ge : int; default=0.0

damping coefficient

s : float; default=0.0

stress coefficient

comment : str; default=’‘

a comment for the card

add_celas3(self, eid, pid, nids, comment='')

Creates a CELAS3 card

Parameters:
eid : int

element id

pid : int

property id (PELAS)

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_celas4(self, eid, k, nids, comment='')

Creates a CELAS4 card

Parameters:
eid : int

element id

k : float

spring stiffness

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_cfast(self, eid, pid, Type, ida, idb, gs=None, ga=None, gb=None, xs=None, ys=None, zs=None, comment='')

Creates a CFAST card

add_cfluid2(self, eid, ringfls, rho, b, harmonic)
add_cfluid3(self, eid, ringfls, rho, b, harmonic)
add_cfluid4(self, eid, ringfls, rho, b, harmonic)
add_cgap(self, eid, pid, nids, x, g0, cid=None, comment='')

Creates a CGAP card

Parameters:
eid : int

Element ID

pid : int

Property ID (PGAP)

nids : List[int, int]

node ids; connected grid points at ends A and B

x : List[float, float, float]

Components of the orientation vector, from GA, in the displacement coordinate system at GA

g0 : int

GO Alternate method to supply the orientation vector using grid point GO. Direction of is from GA to GO

cid : int; default=None

Element coordinate system identification number. CID must be specified if GA and GB are coincident (distance from GA to GB < 10^-4)

comment : str; default=’‘

a comment for the card

add_cgen(self, Type, field_eid, pid, field_id, th_geom_opt, eidl, eidh, t_abcd=None, direction='L', comment='')

Creates a CGEN card

add_chbdye(self, eid, eid2, side, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, comment='')

Creates a CHBDYE card

Parameters:
eid : int

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

comment : str; default=’‘

a comment for the card

add_chbdyg(self, eid, surface_type, nodes, iview_front=0, iview_back=0, rad_mid_front=0, rad_mid_back=0, comment='')

Creates a CHBDYG card

add_chbdyp(self, 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='')

Creates a CHBDYP card

Parameters:
eid : int

Surface element ID

pid : int

PHBDY property entry identification numbers. (Integer > 0)

surface_type : str

Surface type Must be {POINT, LINE, ELCYL, FTUBE, TUBE}

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.

g1 / g2 : int

Grid point identification numbers of grids bounding the surface

g0 : int; default=0

Orientation grid point

rad_mid_front : int

RADM identification number for front face of surface element

rad_mid_back : int

RADM identification number for back face of surface element.

gmid : int

Grid point identification number of a midside node if it is used with the line type surface element.

ce : int; default=0

Coordinate system for defining orientation vector

e1 / e2 / e3 : float; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1.

comment : str; default=’‘

a comment for the card

add_chexa(self, eid, pid, nids, comment='')

Creates a CHEXA8/CHEXA20

Parameters:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=8 or 20

comment : str; default=’‘

a comment for the card

add_cihex1(self, eid, pid, nids, comment='')

see CHEXA

add_cihex2(self, eid, pid, nids, comment='')

see CHEXA

add_cmass1(self, eid, pid, nids, c1=0, c2=0, comment='')

Creates a CMASS1 card

Parameters:
eid : int

element id

pid : int

property id (PMASS)

nids : List[int, int]

node ids

c1 / c2 : int; default=None

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

add_cmass2(self, eid, mass, nids, c1, c2, comment='')

Creates a CMASS2 card

Parameters:
eid : int

element id

mass : float

mass

nids : List[int, int]

node ids

c1 / c2 : int; default=None

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

add_cmass3(self, eid, pid, nids, comment='')

Creates a CMASS3 card

Parameters:
eid : int

element id

pid : int

property id (PMASS)

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_cmass4(self, eid, mass, nids, comment='')

Creates a CMASS4 card

Parameters:
eid : int

element id

mass : float

SPOINT mass

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_cmfree(self, eid, s, s2, y, n)
add_conm1(self, eid, nid, mass_matrix, cid=0, comment='')

Creates a CONM1 card

Parameters:
eid : int

element id

nid : int

the node to put the mass matrix

mass_matrix : (6, 6) float ndarray

the 6x6 mass matrix, M

cid : int; default=0

the coordinate system for the mass matrix

comment : str; 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(self, eid, nid, mass, cid=0, X=None, I=None, comment='')

Creates a CONM2 card

Parameters:
eid : int

element id

nid : int

node id

mass : float

the mass of the CONM2

cid : int; 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

comment : str; default=’‘

a comment for the card

add_conrod(self, eid, mid, nids, A=0.0, j=0.0, c=0.0, nsm=0.0, comment='')

Creates a CONROD card

Parameters:
eid : int

element id

mid : int

material id

nids : List[int, int]

node ids

A : float; default=0.

area

j : float; default=0.

polar moment of inertia

c : float; default=0.

stress factor

nsm : float; default=0.

non-structural mass per unit length

comment : str; default=’‘

a comment for the card

add_conv(self, eid, pconid, ta, film_node=0, cntrlnd=0, comment='')

Creates a CONV card

Parameters:
eid : int

element id

pconid : int

Convection property ID

mid : int

Material ID

ta : List[int]

Ambient points used for convection 0’s are allowed for TA2 and higher

film_node : int; default=0

Point for film convection fluid property temperature

cntrlnd : int; default=0

Control point for free convection boundary condition

comment : str; default=’‘

a comment for the card

add_convm(self, eid, pconvm, ta1, film_node=0, cntmdot=0, ta2=None, mdot=1.0, comment='')

Creates a CONVM card

Parameters:
eid : int

element id (CHBDYP)

pconid : int

property ID (PCONVM)

mid : int

Material ID

ta1 : int

ambient point for convection

ta2 : int; default=None

None : ta1 ambient point for convection

film_node : int; default=0
cntmdot : int; default=0

control point used for controlling mass flow 0/blank is only allowed when mdot > 0

mdot : float; 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

comment : str; default=’‘

a comment for the card

add_cord1c(self, cid, g1, g2, g3, comment='')

Creates the CORD1C card, which defines a cylindrical coordinate system using 3 GRID points.

Parameters:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

add_cord1r(self, cid, g1, g2, g3, comment='')

Creates the CORD1R card, which defines a rectangular coordinate system using 3 GRID points.

Parameters:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

add_cord1s(self, cid, g1, g2, g3, comment='')

Creates the CORD1S card, which defines a spherical coordinate system using 3 GRID points.

Parameters:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

add_cord2c(self, cid, origin, zaxis, xzplane, rid=0, comment='')

Creates the CORD2C card, which defines a cylindrical coordinate system using 3 vectors.

Parameters:
cid : int

coordinate system id

rid : int; default=0

the referenced coordinate system that defines the system the vectors

origin : List[float, float, float]

the origin of the coordinate system

zaxis : List[float, float, float]

the z-axis of the coordinate system

xzplane : List[float, float, float]

a point on the xz plane

comment : str; default=’‘

a comment for the card

add_cord2r(self, cid, origin, zaxis, xzplane, rid=0, comment='')

Creates the CORD2R card, which defines a rectangular coordinate system using 3 vectors.

Parameters:
cid : int

coordinate system id

rid : int; default=0

the referenced coordinate system that defines the system the vectors

origin : List[float, float, float]

the origin of the coordinate system

zaxis : List[float, float, float]

the z-axis of the coordinate system

xzplane : List[float, float, float]

a point on the xz plane

comment : str; default=’‘

a comment for the card

add_cord2s(self, cid, origin, zaxis, xzplane, rid=0, comment='')

Creates the CORD2C card, which defines a spherical coordinate system using 3 vectors.

Parameters:
cid : int

coordinate system id

origin : List[float, float, float]

the origin of the coordinate system

zaxis : List[float, float, float]

the z-axis of the coordinate system

xzplane : List[float, float, float]

a point on the xz plane

rid : int; default=0

the referenced coordinate system that defines the system the vectors

comment : str; default=’‘

a comment for the card

add_cpenta(self, eid, pid, nids, comment='')

Creates a CPENTA6/CPENTA15

Parameters:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=6 or 15

comment : str; default=’‘

a comment for the card

add_cplstn3(self, eid, pid, nids, theta=0.0, comment='')

Creates a CPLSTN4 card

add_cplstn4(self, eid, pid, nids, theta=0.0, comment='')

Creates a CPLSTN4 card

add_cplstn6(self, eid, pid, nids, theta=0.0, comment='')

Creates a CPLSTN6 card

add_cplstn8(self, eid, pid, nids, theta=0.0, comment='')

Creates a CPLSTN8 card

add_cplsts3(self, eid, pid, nids, theta=0.0, comment='')

Creates a CPLSTS3 card

add_cpyram(self, eid, pid, nids, comment='')

Creates a CPYRAM5/CPYRAM13

Parameters:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=5 or 13

comment : str; default=’‘

a comment for the card

add_cquad(self, eid, pid, nids, theta_mcid=0.0, comment='')

Creates a CQUAD card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int, int/None, int/None,

int/None, int/None, int/None]

node ids

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

comment : str; default=’‘

a comment for the card

add_cquad4(self, eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='')

Creates a CQUAD4 card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4 : float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

add_cquad8(self, eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='')

Creates a CQUAD8 card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int, int/None, int/None, int/None, int/None]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4 : float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

add_cquadr(self, eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, T4=None, comment='')

Creates a CQUADR card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4 : float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

add_cquadx(self, eid, pid, nids, theta_mcid=0.0, comment='')

Creates a CQUADX card

add_cquadx4(self, eid, pid, nids, theta=0.0, comment='')

Creates a CQUADX4 card

add_cquadx8(self, eid, pid, nids, theta=0.0, comment='')

Creates a CQUADX8 card

add_crac2d(self, eid, pid, nids, comment='')

Creates a PRAC2D card

add_crac3d(self, eid, pid, nids, comment='')

Creates a CRAC3D card

add_creep(self, mid, T0, exp, form, tidkp, tidcp, tidcs, thresh, Type, a, b, c, d, e, f, g, comment='')

Creates a CREEP card

add_crod(self, eid, pid, nids, comment='')

Creates a CROD card

Parameters:
eid : int

element id

pid : int

property id (PROD)

nids : List[int, int]

node ids

comment : str; default=’‘

a comment for the card

add_cset(self, ids, components, comment='')

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:
ids : List[int]

the GRID/SPOINT ids

components : List[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

comment : str; default=’‘

a comment for the card

Notes

the length of components and ids must be the same

add_cset1(self, ids, components, comment='')

See also

add_cset

add_cshear(self, eid, pid, nids, comment='')

Creates a CSHEAR card

Parameters:
eid : int

element id

pid : int

property id (PSHEAR)

nids : List[int, int, int, int]

node ids

comment : str; default=’‘

a comment for the card

add_csschd(self, sid, aesid, lschd, lalpha=None, lmach=None, comment='')

Creates an CSSCHD card, which defines a specified control surface deflection as a function of Mach and alpha (used in SOL 144/146).

Parameters:
sid : int

the unique id

aesid : int

the control surface (AESURF) id

lalpha : int; default=None

the angle of attack profile (AEFACT) id

lmach : int; default=None

the mach profile (AEFACT) id

lschd : int; default=None

the control surface deflection profile (AEFACT) id

comment : str; default=’‘

a comment for the card

add_csuper(self, seid, psid, nodes, comment='')
add_csupext(self, seid, nodes, comment='')
add_ctetra(self, eid, pid, nids, comment='')

Creates a CTETRA4/CTETRA10

Parameters:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=4 or 10

comment : str; default=’‘

a comment for the card

add_ctrax3(self, eid, pid, nids, theta=0.0, comment='')

Creates a CTRAX3 card

add_ctrax6(self, eid, pid, nids, theta=0.0, comment='')

Creates a CTRAX6 card

add_ctria3(self, eid, pid, nids, zoffset=0.0, theta_mcid=0.0, tflag=0, T1=None, T2=None, T3=None, comment='')

Creates a CTRIA3 card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 : float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

add_ctria6(self, eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, comment='')

Creates a CTRIA6 card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int/None, int/None, int/None]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 : float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

add_ctriar(self, eid, pid, nids, theta_mcid=0.0, zoffset=0.0, tflag=0, T1=None, T2=None, T3=None, comment='')

Creates a CTRIAR card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 : float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

add_ctriax(self, eid, pid, nids, theta_mcid=0.0, comment='')

Creates a CTRIAX card

add_ctriax6(self, eid, mid, nids, theta=0.0, comment='')

Creates a CTRIAX6 card

add_ctube(self, eid, pid, nids, comment='')

Creates a CTUBE card

Parameters:
eid : int

element id

pid : int

property id

nids : List[int, int]

node ids

comment : str; default=’‘

a comment for the card

add_cvisc(self, eid, pid, nids, comment='')

Creates a CVISC card

Parameters:
eid : int

element id

pid : int

property id (PVISC)

nids : List[int, int]

GRID ids

comment : str; default=’‘

a comment for the card

add_darea(self, sid, nid, component, scale, comment='')

Creates a DAREA card

Parameters:
sid : int

darea id

nid : int

GRID, EPOINT, SPOINT id

component : str

Component number. (0-6; 0-EPOINT/SPOINT; 1-6 GRID)

scale : float

Scale (area) factor

add_dconadd(self, oid, dconstrs, comment='')

Creates a DCONADD card

add_dconstr(self, oid, dresp_id, lid=-1e+20, uid=1e+20, lowfq=0.0, highfq=1e+20, comment='')

Creates a DCONSTR card

Parameters:
oid : int

unique optimization id

dresp_id : int

DRESP1/2 id

lid / uid=-1.e20 / 1.e20

lower/upper bound

lowfq / highfq : float; default=0. / 1.e20

lower/upper end of the frequency range

comment : str; default=’‘

a comment for the card

add_ddval(self, oid, ddvals, comment='')

Creates a DDVAL card

add_deform(self, sid, eid, deformation, comment='')

Creates an DEFORM card, which defines applied deformation on a 1D elemment. Links to the DEFORM card in the case control deck.

Parameters:
sid : int

load id

eid : int

CTUBE/CROD/CONROD/CBAR/CBEAM element id

deformation : float

the applied deformation

comment : str; default=’‘

a comment for the card

add_delay(self, sid, nodes, components, delays, comment='')

Creates a DELAY card

Parameters:
sid : int

DELAY id that is referenced by a TLOADx, RLOADx or ACSRCE card

nodes : List[int]

list of nodes that see the delay len(nodes) = 1 or 2

components : List[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

delays : List[float]

Time delay (tau) for designated point Pi and component Ci len(nodes) = len(delays)

comment : str; default=’‘

a comment for the card

add_deqatn(self, equation_id, eqs, comment='')

Creates a DEQATN card

Parameters:
equation_id : int

the id of the equation

eqs : List[str]

the equations, which may overbound the field split them by a semicolon (;)

comment : str; 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(self, desvar_id, label, xinit, xlb=-1e+20, xub=1e+20, delx=None, ddval=None, comment='')

Creates a DESVAR card

Parameters:
desvar_id : int

design variable id

label : str

name of the design variable

xinit : float

the starting point value for the variable

xlb : float; default=-1.e20

the lower bound

xub : float; default=1.e20

the lower bound

delx : float; 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

ddval : int; default=None
int : DDVAL id

allows you to set discrete values

None : continuous

comment : str; default=’‘

a comment for the card

add_diverg(self, sid, nroots, machs, comment='')

Creates an DIVERG card, which is used in divergence analysis (SOL 144).

Parameters:
sid : int

The name

nroots : int

the number of roots

machs : List[float, …, float]

list of Mach numbers

comment : str; default=’‘

a comment for the card

Creates a DLINK card, which creates a variable that is a lienar ccombination of other design variables

Parameters:
oid : int

optimization id

dependent_desvar : int

the DESVAR to link

independent_desvars : List[int]

the DESVARs to combine

coeffs : List[int]

the linear combination coefficients

c0 : float; default=0.0

an offset

cmult : float; default=1.0

an scale factor

comment : str; default=’‘

a comment for the card

add_dload(self, sid, scale, scale_factors, load_ids, comment='')

Creates a DLOAD card

Parameters:
sid : int

Load set identification number. See Remarks 1. and 4. (Integer > 0)

scale : float

Scale factor. See Remarks 2. and 8. (Real)

Si : List[float]

Scale factors. See Remarks 2., 7. and 8. (Real)

load_ids : List[int]

Load set identification numbers of RLOAD1, RLOAD2, TLOAD1, TLOAD2, and ACSRCE entries. See Remarks 3. and 7. (Integer > 0)

comment : str; default=’‘

a comment for the card

add_dmi(self, name, form, tin, tout, nrows, ncols, GCj, GCi, Real, Complex=None, comment='')

Creates a DMI card

add_dmig(self, name, ifo, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='')

Creates a DMIG card

Parameters:
name : str

the name of the matrix

ifo : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]

the [jnode, jDOFs]

GCi : List[(node, dof)]

the inode, iDOFs

Real : List[float]

The real values

Complex : List[float]; default=None

The complex values (if the matrix is complex)

comment : str; default=’‘

a comment for the card

add_dmig_uaccel(self, tin, ncol, load_sequences, comment='')

Creates a DMIG,UACCEL card

add_dmij(self, name, form, tin, tout, nrows, ncols, GCj, GCi, Real, Complex=None, comment='')

Creates a DMIJ card

add_dmiji(self, name, ifo, tin, tout, nrows, ncols, GCj, GCi, Real, Complex=None, comment='')
DMIJI | NAME | 0 | IFO | TIN | TOUT POLAR | | NCOL |
add_dmik(self, name, ifo, tin, tout, polar, ncols, GCj, GCi, Real, Complex=None, comment='')

Creates a DMIK card

Parameters:
name : str

the name of the matrix

ifo : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]

the jnode, jDOFs

GCi : List[(node, dof)]

the inode, iDOFs

Real : List[float]

The real values

Complex : List[float]; default=None

The complex values (if the matrix is complex)

comment : str; default=’‘

a comment for the card

add_doptprm(self, params, comment='')

Creates a DOPTPRM card

add_dphase(self, sid, nodes, components, phase_leads, comment='')

Creates a DPHASE card

Parameters:
sid : int

DPHASE id that is referenced by a RLOADx or ACSRCE card

nodes : List[int]

list of nodes that see the delay len(nodes) = 1 or 2

components : List[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

phase_leads : List[float]

Phase lead θ in degrees. len(nodes) = len(delays)

comment : str; default=’‘

a comment for the card

add_dresp1(self, dresp_id, label, response_type, property_type, region, atta, attb, atti, validate=True, comment='')

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_id : int

response id

lable : str

Name of the response

response_type : str

Response type

property_type : str

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.

region : str

Region identifier for constraint screening

atta : int / float / str / blank

Response attribute

attb : int / float / str / blank

Response attribute

atti : List[int / float / str]

the response values to pull from List[int]:

list of grid ids list of property ids

List[str]

‘ALL’

comment : str; default=’‘

a comment for the card

validate : bool; 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(self, dresp_id, label, dequation, region, params, method='MIN', c1=1.0, c2=0.005, c3=10.0, validate=True, comment='')

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_id : int

response id

label : str

Name of the response

dequation : int

DEQATN id

region : str

Region identifier for constraint screening

params : dict[(index, card_type)] = values

the storage table for the response function index : int

a counter

card_type : str

the type of card to pull from DESVAR, DVPREL1, DRESP2, etc.

values : List[int]

the values for this response

method : str; default=MIN

flag used for FUNC=BETA/MATCH FUNC = BETA

valid options are {MIN, MAX}

FUNC = MATCH

valid options are {LS, BETA}

c1 / c2 / c3 : float; default=1. / 0.005 / 10.0

constants for FUNC=BETA or FUNC=MATCH

comment : str; default=’‘

a comment for the card

validate : bool; default=False

should the card be validated when it’s created

params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}
add_dresp3(self, dresp_id, label, group, Type, region, params, validate=True, comment='')

Creates a DRESP3 card

add_dscreen(self, rtype, trs=-0.5, nstr=20, comment='')

Creates a DSCREEN object

Parameters:
rtype : str

Response type for which the screening criteria apply

trs : float

Truncation threshold

nstr : int

Maximum number of constraints to be retained per region per load case

comment : str; default=’‘

a comment for the card

add_dtable(self, default_values, comment='')

Creates a DTABLE card

Parameters:
default_values : dict
key : str

the parameter name

value : float

the value

comment : str; default=’‘

a comment for the card

add_dti(self, name, fields, comment='')

Creates a DTI card

add_dvcrel1(self, oid, Type, eid, cp_name, dvids, coeffs, cp_min=None, cp_max=1e+20, c0=0.0, validate=True, comment='')

Creates a DVCREL1 card

Parameters:
oid : int

optimization id

prop_type : str

property card name (e.g., PSHELL)

EID : int

element id

cp_name : str/int

optimization parameter as an element connectivity name (e.g., X1)

dvids : List[int]

DESVAR ids

coeffs : List[float]

scale factors for DESVAR ids

cp_min : float; default=None

minimum value

cp_max : float; default=1e20

maximum value

c0 : float; default=0.

offset factor for the variable

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

add_dvcrel2(self, oid, Type, eid, cp_name, deqation, dvids, labels, cp_min=None, cp_max=1e+20, validate=True, comment='')

Creates a DVCREL2 card

add_dvgrid(self, dvid, nid, dxyz, cid=0, coeff=1.0, comment='')

Creates a DVGRID card

Parameters:
dvid : int

DESVAR id

nid : int

GRID/POINT id

dxyz : (3, ) float ndarray

the amount to move the grid point

cid : int; default=0

Coordinate system for dxyz

coeff : float; default=1.0

the dxyz scale factor

comment : str; default=’‘

a comment for the card

add_dvmrel1(self, oid, mat_type, mid, mp_name, dvids, coeffs, mp_min=None, mp_max=1e+20, c0=0.0, validate=True, comment='')

Creates a DVMREL1 card

Parameters:
oid : int

optimization id

prop_type : str

material card name (e.g., MAT1)

mid : int

material id

mp_name : str

optimization parameter as a pname (material name; E)

dvids : List[int]

DESVAR ids

coeffs : List[float]

scale factors for DESVAR ids

mp_min : float; default=None

minimum material property value

mp_max : float; default=1e20

maximum material property value

c0 : float; default=0.

offset factor for the variable

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

add_dvmrel2(self, oid, mat_type, mid, mp_name, deqation, dvids, labels, mp_min=None, mp_max=1e+20, validate=True, comment='')

Creates a DVMREL2 card

Parameters:
oid : int

optimization id

mat_type : str

material card name (e.g., MAT1)

mid : int

material id

mp_name : str

optimization parameter as a pname (material name; E)

deqation : int

DEQATN id

dvids : List[int]; default=None

DESVAR ids

labels : List[str]; default=None

DTABLE names

mp_min : float; default=None

minimum material property value

mp_max : float; default=1e20

maximum material property value

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

Notes

either dvids or labels is required

add_dvprel1(self, oid, prop_type, pid, pname_fid, dvids, coeffs, p_min=None, p_max=1e+20, c0=0.0, validate=True, comment='')

Creates a DVPREL1 card

Parameters:
oid : int

optimization id

prop_type : str

property card name (e.g., PSHELL)

pid : int

property id

pname_fid : str/int

optimization parameter as a pname (property name; T) or field number (fid)

dvids : List[int]

DESVAR ids

coeffs : List[float]

scale factors for DESVAR ids

p_min : float; default=None

minimum property value

p_max : float; default=1e20

maximum property value

c0 : float; default=0.

offset factor for the variable

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

add_dvprel2(self, oid, prop_type, pid, pname_fid, deqation, dvids=None, labels=None, p_min=None, p_max=1e+20, validate=True, comment='')

Creates a DVPREL2 card

Parameters:
oid : int

optimization id

prop_type : str

property card name (e.g., PSHELL)

pid : int

property id

pname_fid : str/int

optimization parameter as a pname (property name; T) or field number (fid)

deqation : int

DEQATN id

dvids : List[int]; default=None

DESVAR ids

labels : List[str]; default=None

DTABLE names

p_min : float; default=None

minimum property value

p_max : float; default=1e20

maximum property value

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

Notes

either dvids or labels is required

add_eigb(self, sid, method, L1, L2, nep, ndp, ndn, norm, G, C, comment='')

Creates an EIGB card

add_eigc(self, 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='')

Creates an EIGC card

add_eigp(self, sid, alpha1, omega1, m1, alpha2, omega2, m2, comment='')

Creates an EIGP card

add_eigr(self, sid, method='LAN', f1=None, f2=None, ne=None, nd=None, norm='MASS', G=None, C=None, comment='')

Adds a EIGR card

Parameters:
sid : int

method id

method : str; default=’LAN’

eigenvalue method recommended: {LAN, AHOU} obsolete : {INV, SINV, GIV, MGIV, HOU, MHOU, AGIV}

f1 / f2 : float; default=None

lower/upper bound eigenvalue

f2 : float; default=None

upper bound eigenvalue

ne : int; default=None

estimate of number of roots (used for INV)

nd : int; default=None

desired number of roots

msglvl : int; default=0

debug level; 0-4

maxset : int; default=None

Number of vectors in block or set

shfscl : float; default=None

estimate of first flexible mode natural frequency

norm : str; default=None

{MAX, MASS, AF, POINT} default=MASS (NX)

G : int; default=None

node id for normalization; only for POINT

C : int; default=None

component for normalization (1-6); only for POINT

comment : str; default=’‘

a comment for the card

add_eigrl(self, sid, v1=None, v2=None, nd=None, msglvl=0, maxset=None, shfscl=None, norm=None, options=None, values=None, comment='')

Adds an EIGRL card

Parameters:
sid : int

method id

v1 : float; default=None

lower bound eigenvalue

v2 : float; default=None

upper bound eigenvalue

nd : int

number of roots

msglvl : int; default=0

debug level; 0-4

maxset : int; default=None

Number of vectors in block or set

shfscl : float; default=None

estimate of first flexible mode natural frequency

norm : str; default=None

{MAX, MASS}

options : ???; default=None -> []

???

values : ???; default=None -> []

???

comment : str; default=’‘

a comment for the card

add_epoint(self, ids, comment='')

Creates the EPOINTs card that contains many EPOINTs

Parameters:
ids : List[int]

EPOINT ids

comment : str; default=’‘

a comment for the card

add_flfact(self, sid, factors, comment='')

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:
sid : int

the id of a density, reduced_frequency, mach, or velocity table the FLUTTER card defines the meaning

factors : varies
values : List[float, …, float]

list of factors

List[f1, THRU, fnf, nf, fmid]
f1 : float

first value

THRU : str

the word THRU

fnf : float

second value

nf : int

number of values

fmid : float; default=(f1 + fnf) / 2.

the mid point to bias the array

TODO: does f1 need be be greater than f2/fnf???

comment : str; default=’‘

a comment for the card

add_flutter(self, sid, method, density, mach, reduced_freq_velocity, imethod='L', nvalue=None, omax=None, epsilon=0.001, comment='')

Creates a FLUTTER card, which is required for a flutter (SOL 145) analysis.

Parameters:
sid : int

flutter id

method : str
valid methods = [K, KE,

PKS, PKNLS, PKNL, PKE]

density : int

defines a series of air densities in units of mass/volume PARAM,WTMASS does not affect this AERO affects this references an FLFACT id

mach : int

defines a series of the mach numbers references an FLFACT id

reduced_freq_velocity : int
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

imethod : str; default=’L’

Choice of interpolation method for aerodynamic matrix interpolation. imethods :

  1. L - linear
  2. S - surface
  3. TCUB - termwise cubic
nvalue : int

Number of eigenvalues beginning with the first eigenvalue for output and plots

omax : float

For the PKS and PKNLS methods, OMAX specifies the maximum frequency, in Hz., to be used in he flutter sweep. MSC only.

epsilon : float; default=1.0e-3

Convergence parameter for k. Used in the PK and PKNL methods only

comment : str; default=’‘

a comment for the card

add_force(self, sid, node, mag, xyz, cid=0, comment='')

Creates a FORCE card

Parameters:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

xyz : (3, ) float ndarray

the load direction in the cid frame

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

add_force1(self, sid, node, mag, g1, g2, comment='')

Creates a FORCE1 card

Parameters:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

n1 / n2 : int / int

defines the load direction n = n2 - n1

comment : str; default=’‘

a comment for the card

add_force2(self, sid, node, mag, g1, g2, g3, g4, comment='')

Creates a FORCE2 card

Parameters:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

g1 / g2 / g3 / g4 : int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

comment : str; default=’‘

a comment for the card

add_freq(self, sid, freqs, comment='')

Creates a FREQ card

Parameters:
sid : int

set id referenced by case control FREQUENCY

freqs : List[float]

the frequencies for a FREQx object

comment : str; default=’‘

a comment for the card

add_freq1(self, sid, f1, df, ndf=1, comment='')

Creates a FREQ1 card

Parameters:
sid : int

set id referenced by case control FREQUENCY

f1 : float

first frequency

df : float

frequency increment

ndf : int; default=1

number of frequency increments

comment : str; default=’‘

a comment for the card

add_freq2(self, sid, f1, f2, nf=1, comment='')

Creates a FREQ2 card

Parameters:
sid : int

set id referenced by case control FREQUENCY

f1 : float

first frequency

f2 : float

last frequency

nf : int; default=1

number of logorithmic intervals

comment : str; default=’‘

a comment for the card

add_freq3(self, sid, f1, f2=None, Type='LINEAR', nef=10, cluster=1.0, comment='')

Creates a FREQ3 card

add_freq4(self, sid, f1=0.0, f2=1e+20, fspread=0.1, nfm=3, comment='')

Creates a FREQ4 card

Parameters:
sid : int

set id referenced by case control FREQUENCY

f1 : float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2 : float; default=1E20

Upper bound of frequency range in cycles per unit time.

nfm : int; default=3

Number of evenly spaced frequencies per ‘spread’ mode.

comment : str; default=’‘

a comment for the card

add_freq5(self, sid, fractions, f1=0.0, f2=1e+20, comment='')

Creates a FREQ5 card

Parameters:
sid : int

set id referenced by case control FREQUENCY

f1 : float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2 : float; default=1e20

Upper bound of frequency range in cycles per unit time.

fractions : List[float]

Fractions of the natural frequencies in the range F1 to F2.

comment : str; 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(self, eid, ul, ud, z, s=None)

creates a GENEL card using the flexiblity approach

add_genel_stiffness(self, eid, ul, ud, k, s=None)

creates a GENEL card using the stiffness approach

add_gmload(self, sid, normal, entity, entity_id, method, load_magnitudes, cid=0, comment='')

Creates a GMLOAD object

add_gmspc(self, conid, component, entity, entity_id, comment='')

Creates a GMSPC card

add_grav(self, sid, scale, N, cid=0, mb=0, comment='')

Creates an GRAV card

Parameters:
sid : int

load id

scale : float

scale factor for load

N : (3, ) float ndarray

the acceleration vector in the cid frame

cid : int; default=0

the coordinate system for the load

mb : int; default=0

???

comment : str; default=’‘

a comment for the card

add_grdset(self, cp, cd, ps, seid, comment='')

Creates the GRDSET card

Parameters:
cp : int; default=0

the xyz coordinate frame

cd : int; default=0

the analysis coordinate frame

ps : str; default=’‘

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seid : int; default=0

superelement id TODO: how is this used by Nastran???

comment : str; default=’‘

a comment for the card

add_grid(self, nid, xyz, cp=0, cd=0, ps='', seid=0, comment='')

Creates the GRID card

Parameters:
nid : int

node id

cp : int; default=0

the xyz coordinate frame

xyz : (3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cd : int; default=0

the analysis coordinate frame

ps : str; default=’‘

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seid : int; default=0

superelement id TODO: how is this used by Nastran???

comment : str; default=’‘

a comment for the card

add_gust(self, sid, dload, wg, x0, V=None, comment='')

Creates a GUST card, which defines a stationary vertical gust for use in aeroelastic response analysis.

Parameters:
sid : int

gust load id

dload : int

TLOADx or RLOADx entry that defines the time/frequency dependence

wg : float

Scale factor (gust velocity/forward velocity) for gust velocity

x0 : float

Streamwise location in the aerodynamic coordinate system of the gust reference point.

V : float; default=None
float : velocity of the vehicle (must be the same as the

velocity on the AERO card)

None : ???

comment : str; default=’‘

a comment for the card

add_load(self, sid, scale, scale_factors, load_ids, comment='')

Creates a LOAD card

Parameters:
sid : int

load id

scale : float

overall scale factor

scale_factors : List[float]

individual scale factors (corresponds to load_ids)

load_ids : List[int]

individual load_ids (corresponds to scale_factors)

comment : str; default=’‘

a comment for the card

add_loadcyn(self, sid, scale, segment_id, scales, load_ids, segment_type=None, comment='')

Creates a LOADCYN card

add_lseq(self, sid, excite_id, lid, tid=None, comment='')

Creates a LSEQ card

Parameters:
sid : int

loadset id; LOADSET points to this

excite_id : int

set id assigned to this static load vector

lid : int

load set id of a set of static load entries; LOAD in the Case Control

tid : int; default=None

temperature set id of a set of thermal load entries; TEMP(LOAD) in the Case Control

comment : str; default=’‘

a comment for the card

add_mat1(self, 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='')

Creates a MAT1 card

Parameters:
mid : int

material id

E : float / None

Young’s modulus

G : float / None

Shear modulus

nu : float / None

Poisson’s ratio

rho : float; default=0.

density

a : float; default=0.

coefficient of thermal expansion

tref : float; default=0.

reference temperature

ge : float; default=0.

damping coefficient

St / Sc / Ss : float; default=0.

tensile / compression / shear allowable

mcsid : int; default=0

material coordinate system id used by PARAM,CURV

comment : str; default=’‘

a comment for the card

If E, G, or nu is None (only 1), it will be calculated
add_mat10(self, mid, bulk, rho, c, ge=0.0, gamma=None, table_bulk=None, table_rho=None, table_ge=None, table_gamma=None, comment='')

Creates a MAT10 card

Parameters:
mid : int

material id

bulk : float; default=None

Bulk modulus

rho : float; default=None

Density

c : float; default=None

Speed of sound

ge : float; default=0.

Damping

gamma : float; default=None

NX : ratio of imaginary bulk modulus to real bulk modulus; default=0.0 MSC : normalized admittance coefficient for porous material

table_bulk : int; default=None

TABLEDx entry defining bulk modulus vs. frequency None for MSC Nastran

table_rho : int; default=None

TABLEDx entry defining rho vs. frequency None for MSC Nastran

table_ge : int; default=None

TABLEDx entry defining ge vs. frequency None for MSC Nastran

table_gamma : int; default=None

TABLEDx entry defining gamma vs. frequency None for MSC Nastran

comment : str; default=’‘

a comment for the card

add_mat11(self, 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='')

Creates a MAT11 card

add_mat2(self, 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='')

Creates an MAT2 card

add_mat3(self, 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='')

Creates a MAT3 card

add_mat3d(self, mid, e1, e2, e3, nu12, nu13, nu23, g12, g13, g23, rho=0.0, comment='')

This is a VABS specific card that is almost identical to the MAT11.

add_mat4(self, 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='')

Creates a MAT4 card

add_mat5(self, 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='')

Creates a MAT5 card

add_mat8(self, 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='')

Creates a MAT8 card

add_mat9(self, 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='')

Creates a MAT9 card

add_matg(self, mid, idmem, behav, tabld, tablu, yprs, epl, gpl, gap=0.0, tab_yprs=None, tab_epl=None, tab_gpl=None, tab_gap=None, comment='')

Creates a MATG card

add_mathe(self, mid, model, bulk, rho, texp, mus, alphas, betas, mooney, sussbat, aboyce, comment='')

Creates a MATHE card

add_mathp(self, 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='')

Creates a MATHP card

add_mats1(self, mid, tid, Type, h, hr, yf, limit1, limit2, comment='')

Creates a MATS1 card

add_matt1(self, 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='')

Creates a MATT1 card

add_matt2(self, 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='')

Creates a MATT2 card

add_matt3(self, 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='')

Creates a MATT3 card

add_matt4(self, mid, k_table=None, cp_table=None, h_table=None, mu_table=None, hgen_table=None, comment='')

Creates a MATT4 card

add_matt5(self, 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='')

Creates a MATT5 card

add_matt8(self, 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='')

Creates a MATT8 card

add_matt9(self, 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='')
add_mkaero1(self, machs, reduced_freqs, comment='')

Creates an MKAERO1 card, which defines a set of mach and reduced frequencies.

Parameters:
machs : List[float]

series of Mach numbers

reduced_freqs : List[float]

series of reduced frequencies

comment : str; default=’‘

a comment for the card

add_mkaero2(self, machs, reduced_freqs, comment='')

Creates an MKAERO2 card, which defines a set of mach and reduced frequency pairs.

Parameters:
machs : List[float]

series of Mach numbers

reduced_freqs : List[float]

series of reduced frequencies

comment : str; default=’‘

a comment for the card

add_moment(self, sid, node, mag, xyz, cid=0, comment='')

Creates a MOMENT card

Parameters:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

cid : int; default=0

the coordinate system for the load

xyz : (3, ) float ndarray; default

the load direction in the cid frame

comment : str; default=’‘

a comment for the card

add_moment1(self, sid, node, mag, g1, g2, comment='')

Creates a MOMENT1 card

Parameters:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

n1 / n2 : int / int

defines the load direction n = n2 - n1

comment : str; default=’‘

a comment for the card

add_moment2(self, sid, node, mag, g1, g2, g3, g4, comment='')

Creates a MOMENT2 card

Parameters:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

g1 / g2 / g3 / g4 : int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

comment : str; default=’‘

a comment for the card

add_monpnt1(self, name, label, axes, aecomp_name, xyz, cp=0, cd=None, comment='')

Creates a MONPNT1 card

Parameters:
name : str

Character string of up to 8 characters identifying the monitor point

label : str

A string comprising no more than 56 characters that identifies and labels the monitor point.

axes : str

components {1,2,3,4,5,6}

aecomp_name : str

name of the AECOMP/AECOMPL entry

xyz : List[float, float, float]; default=None

The coordinates in the CP coordinate system about which the loads are to be monitored. None : [0., 0., 0.]

cp : int, CORDx; default=0

int : coordinate system

cd : int; default=None -> cp

the coordinate system for load outputs

comment : str; default=’‘

a comment for the card

Notes

CD - MSC specific field

add_monpnt2(self, name, label, table, Type, nddl_item, eid, comment='')

Creates a MONPNT2 card

add_monpnt3(self, name, label, axes, grid_set, elem_set, xyz, cp=0, cd=None, xflag=None, comment='')

Creates a MONPNT3 card

add_mpc(self, conid, nodes, components, coefficients, comment='')

Creates an MPC card

Parameters:
conid : int

Case Control MPC id

nodes : List[int]

GRID/SPOINT ids

components : List[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

coefficients : List[float]

the scaling coefficients

add_mpcadd(self, conid, sets, comment='')

Creates an MPCADD card

add_nlparm(self, 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='')

Creates an NLPARM card

add_nlpci(self, nlpci_id, Type='CRIS', minalr=0.25, maxalr=4.0, scale=0.0, desiter=12, mxinc=20, comment='')

Creates an NLPCI card

add_nsm(self, sid, nsm_type, pid_eid, value, comment='')

Creates an NSM card

Parameters:
sid : int

Case control NSM id

nsm_type : str

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_eid : List[int]; int

property id or element id depending on nsm_type

value : List[float]; float

the non-structural pass per unit length/area same length as pid_eid

comment : str; default=’‘

a comment for the card

add_nsm1(self, sid, nsm_type, value, ids, comment='')

Creates an NSM1 card

Parameters:
sid : int

Case control NSM id

nsm_type : str

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

}

value : float

the non-structural pass per unit length/area

ids : List[int]

property ids or element ids depending on nsm_type

comment : str; default=’‘

a comment for the card

add_nsmadd(self, sid, sets, comment='')

Creates an NSMADD card, which sum NSM sets

Parameters:
sid : int

the NSM Case Control value

sets : List[int]

the NSM, NSM1, NSML, NSML1 values

comment : str; default=’‘

a comment for the card

add_nsml(self, sid, nsm_type, pid_eid, value, comment='')

Creates an NSML card, which defines lumped non-structural mass

Parameters:
sid : int

Case control NSM id

nsm_type : str

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_eid : List[int]; int

property id or element id depending on nsm_type

value : List[float]; float

the non-structural pass per unit length/area same length as pid_eid

comment : str; default=’‘

a comment for the card

add_nsml1(self, sid, nsm_type, value, ids, comment='')

Creates an NSML1 card, which defines lumped non-structural mass

Parameters:
sid : int

Case control NSM id

nsm_type : str

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

}

value : float

the non-structural pass per unit length/area

ids : List[int]

property ids or element ids depending on nsm_type

comment : str; default=’‘

a comment for the card

add_nxstrat(self, sid, params, comment='')

Creates an NXSTRAT card

add_omit1(self, ids, components, comment='')

Creates an OMIT1 card, which defines the degree of freedoms that will be excluded (o-set) from the analysis set (a-set).

Parameters:
ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms to be omitted (e.g., ‘1’, ‘123’)

comment : str; default=’‘

a comment for the card

add_paero1(self, pid, caero_body_ids=None, comment='')

Creates a PAERO1 card, which defines associated bodies for the panels in the Doublet-Lattice method.

Parameters:
pid : int

PAERO1 id

caero_body_ids : List[int]; default=None

CAERO2 ids that are within the same IGID group

comment : str; default=’‘

a comment for the card

add_paero2(self, pid, orient, width, AR, thi, thn, lrsb=None, lrib=None, lth=None, comment='')

Creates a PAERO2 card, which defines additional cross-sectional properties for the CAERO2 geometry.

Parameters:
pid : int

PAERO1 id

orient : str

Orientation flag. Type of motion allowed for bodies. Refers to the aerodynamic coordinate system of ACSID. See AERO entry. valid_orientations = {Z, Y, ZY}

width : float

Reference half-width of body and the width of the constant width interference tube

AR : float

Aspect ratio of the interference tube (height/width)

thi / thn : List[int]

The first (thi) and last (thn) interference element of a body to use the theta1/theta2 array

lrsb : int; default=None
int : AEFACT id containing a list of slender body half-widths

at the end points of the slender body elements

None : use width

lrib : int; default=None
int : AEFACT id containing a list of interference body

half-widths at the end points of the interference elements

None : use width

lth : List[int, int]; default=None

AEFACT ids for defining theta arrays for interference calculations for theta1/theta2; length=2

comment : str; default=’‘

a comment for the card

add_paero3(self, pid, nbox, ncontrol_surfaces, x, y, comment='')

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:
pid : int

PAERO1 id

nbox : int

Number of Mach boxes in the flow direction; 0 < nbox < 50

ncontrol_surfaces : int

Number of control surfaces. (0, 1, or 2)

x / y : List[float, None]

float : locations of points 5 through 12, which are in the aerodynamic coordinate system, to define the cranks and control surface geometry.

comment : str; default=’‘

a comment for the card

add_paero4(self, pid, docs, caocs, gapocs, cla=0, lcla=0, circ=0, lcirc=0, comment='')

Creates a PAERO4 card

add_paero5(self, pid, caoci, nalpha=0, lalpha=0, nxis=0, lxis=0, ntaus=0, ltaus=0, comment='')

Creates a PAERO5 card

add_param(self, key, values, comment='')

Creates a PARAM card

Parameters:
key : str

the name of the PARAM

values : int/float/str/List

varies depending on the type of PARAM

comment : str; default=’‘

a comment for the card

add_pbar(self, 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='')

Creates a PBAR card

Parameters:
pid : int

property id

mid : int

material id

area : float

area

i1, i2, i12, j : float

moments of inertia

nsm : float; default=0.

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2 : float

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2 : float; default=1.e8

Shear stiffness factor K in K*A*G for plane 1/2.

comment : str; default=’‘

a comment for the card

add_pbarl(self, pid, mid, Type, dim, group='MSCBML0', nsm=0.0, comment='')

Creates a PBARL card, which defines A, I1, I2, I12, and J using dimensions rather than explicit values.

Parameters:
pid : int

property id

mid : int

material id

Type : str

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

}

dim : List[float]

dimensions for cross-section corresponding to Type; the length varies

group : str default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

nsm : float; default=0.

non-structural mass

comment : str; 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(self, 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='')

Creates a PBCOMP card

Parameters:
pid : int

Property ID

mid : int

Material ID

mids : List[int]

Material ID for the i-th integration point

y / z : List[float]

The (y,z) coordinates of the lumped areas in the element coordinate system

c : List[float]; default=0.0

Fraction of the total area for the i-th lumped area default not supported…

area : float

Area of beam cross section

i1 / i2 : float; default=0.0

Area moment of inertia about plane 1/2 about the neutral axis

i12 : float; default=0.0

area product of inertia

j : float; default=0.0

Torsional moment of interia

nsm : float; default=0.0

Nonstructural mass per unit length

k1 / k2 : float; default=1.0

Shear stiffness factor K in K*A*G for plane 1/2

m1 / m2 : float; default=0.0

The (y,z) coordinates of center of gravity of nonstructural mass

n1 / n2 : float; default=0.0

The (y,z) coordinates of neutral axis

symopt : int; default=0

Symmetry option to input lumped areas for the beam cross section 0 < Integer < 5

comment : str; default=’‘

a comment for the card

add_pbeam(self, 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='')

Todo

fix 0th entry of self.so, self.xxb

Creates a PBEAM card

Parameters:
pid : int

property id

mid : int

material id

xxb : List[float]

The percentage locations along the beam [0., …, 1.]

so : List[str]

YES, YESA, NO

area : List[float]

area

i1, i2, i12, j : List[float]

moments of inertia

nsm : List[float]; default=None -> [0.]*nxxb

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2 : List[float]; default=None -> [0.]*nxxb

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2 : float; default=1.

Shear stiffness factor K in K*A*G for plane 1/2.

s1 / s2 : float; default=0.

Shear relief coefficient due to taper for plane 1/2.

nsia / nsia : float; default=0. / nsia

non structural mass moment of inertia per unit length about nsm center of gravity at Point A/B.

cwa / cwb : float; default=0. / cwa

warping coefficient for end A/B.

m1a / m2a : float; default=0. / 0.

y/z coordinate of center of gravity of nonstructural mass for end A.

m1b / m2b : float; default=m1a / m2a

y/z coordinate of center of gravity of nonstructural mass for end B.

n1a / n2a : float; default=0. / 0.

y/z coordinate of neutral axis for end A.

n1b / n2b : float; default=n1a / n2a

y/z coordinate of neutral axis for end B.

comment : str; default=’‘

a comment for the card

add_pbeam3(self, 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='')

Creates a PBEAM3 card

add_pbeaml(self, pid, mid, beam_type, xxb, dims, so=None, nsm=None, group='MSCBML0', comment='')

Creates a PBEAML card

Parameters:
pid : int

property id

mid : int

material id

beam_type : str

the section profile

xxb : List[float]

The percentage locations along the beam [0., …, 1.]

dims : List[dim]
dim : List[float]

The dimensions for each section

so : List[str]; default=None

YES, YESA, NO None : [0.] * len(xxb)

nsm : List[float]; default=None

nonstructural mass per unit length None : [0.] * len(xxb)

group : str; default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

comment : str; default=’‘

a comment for the card

add_pbend(self, 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='')

Creates a PBEND card

add_pbmsect(self, pid, mid, form, options, comment='')

Creates a PBMSECT card

add_pbrsect(self, pid, mid, form, options, comment='')

Creates a PBRSECT card

add_pbush(self, pid, k, b, ge, rcv=None, mass=None, comment='')

Creates a PBUSH card, which defines a property for a CBUSH

Parameters:
pid : int

property id

k : List[float]

Nominal stiffness values in directions 1 through 6. len(k) = 6

b : List[float]

Nominal damping coefficients in direction 1 through 6 in units of force per unit velocity len(b) = 6

ge : List[float]

Nominal structural damping constant in directions 1 through 6. len(ge) = 6

rcv : List[float]; default=None -> (None, None, None, None)

[sa, st, ea, et] = rcv length(rcv) = 4

mass : float; default=None

lumped mass of the CBUSH This is an MSC only parameter.

comment : str; default=’‘

a comment for the card

add_pbush1d(self, pid, k=0.0, c=0.0, m=0.0, sa=0.0, se=0.0, optional_vars=None, comment='')

Creates a PBUSH1D card

add_pbusht(self, pid, k_tables, b_tables, ge_tables, kn_tables, comment='')

Creates a PBUSHT card

add_pcomp(self, 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='')

Creates a PCOMP card

Parameters:
pid : int

property id

mids : List[int, …, int]

material ids for each ply

thicknesses : List[float, …, float]

thicknesses for each ply

thetas : List[float, …, float]; default=None

ply angle None : [0.] * nplies

souts : List[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsm : float; default=0.

nonstructural mass per unit area

sb : float; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ft : str; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

tref : float; default=0.

reference temperature

ge : float; default=0.

structural damping

lam : str; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0 : float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

comment : str; default=’‘

a comment for the card

add_pcompg(self, 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='')

Creates a PCOMPG card

Parameters:
pid : int

property id

global_ply_ids : List[int]

the ply id

mids : List[int, …, int]

material ids for each ply

thicknesses : List[float, …, float]

thicknesses for each ply

thetas : List[float, …, float]; default=None

ply angle None : [0.] * nplies

souts : List[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsm : float; default=0.

nonstructural mass per unit area

sb : float; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ft : str; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

tref : float; default=0.

reference temperature

ge : float; default=0.

structural damping

lam : str; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0 : float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

comment : str; default=’‘

a comment for the card

add_pcomps(self, 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='')

Creates a PCOMPS card

add_pconeax(self, pid, mid1, t1=None, mid2=0, i=None, mid3=None, t2=None, nsm=None, z1=None, z2=None, phi=None, comment='')

Creates a PCONEAX card

add_pconv(self, 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='')

Creates a PCONV card

Parameters:
pconid : int

Convection property ID

mid : int; default=None

Material ID

form : int; default=0

Type of formula used for free convection Must be {0, 1, 10, 11, 20, or 21}

expf : float; default=0.0

Free convection exponent as implemented within the context of the particular form that is chosen

ftype : int; default=0

Formula type for various configurations of free convection

tid : int; default=None

Identification number of a TABLEHT entry that specifies the two variable tabular function of the free convection heat transfer coefficient

chlen : float; default=None

Characteristic length

gidin : int; default=None

Grid ID of the referenced inlet point

ce : int; default=0

Coordinate system for defining orientation vector.

e1 / e2 / e3 : List[float]; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1

comment : str; default=’‘

a comment for the card

add_pconvm(self, pconid, mid, coef, form=0, flag=0, expr=0.0, exppi=0.0, exppo=0.0, comment='')

Creates a PCONVM card

Parameters:
pconid : int

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

comment : str; default=’‘

a comment for the card

add_pdamp(self, pid, b, comment='')

Creates a PDAMP card

add_pdamp5(self, pid, mid, b, comment='')

Creates a PDAMP5 card

add_pdampt(self, pid, tbid, comment='')

Creates a PDAMPT card

add_pelas(self, pid, k, ge=0.0, s=0.0, comment='')

Creates a PELAS card

Parameters:
pid : int

property id

k : float

spring stiffness

ge : int; default=0.0

damping coefficient

s : float; default=0.0

stress coefficient

comment : str; default=’‘

a comment for the card

add_pelast(self, pid, tkid=0, tgeid=0, tknid=0, comment='')

Creates a PELAST card

Parameters:
pid : int

property id

tkid : float

TABLEDx that defines k vs. frequency

tgeid : int; default=0

TABLEDx that defines ge vs. frequency

s : float; default=0.

TABLEDx that defines force vs. displacement

comment : str; default=’‘

a comment for the card

add_pfast(self, 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='')

Creates a PAST card

Parameters:
pid : int

property id

d : int

diameter of the fastener

kt1, kt2, kt3 : float

stiffness values in directions 1-3

mcid : int; default=01

specifies the element stiffness coordinate system

mflag : int; default=0

0-absolute; 1-relative

kr1, kr2, kr3 : float; default=0.0

rotational stiffness values in directions 1-3

mass : float; default=0.0

lumped mass of the fastener

ge : float; default=0.0

structural damping

comment : str; default=’‘

a comment for the card

add_pgap(self, 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='')

Defines the properties of the gap element (CGAP entry).

Parameters:
pid : int

property id for a CGAP

u0 : float; default=0.

Initial gap opening

f0 : float; default=0.

Preload

ka : float; default=1.e8

Axial stiffness for the closed gap

kb : float; default=None -> 1e-14 * ka

Axial stiffness for the open gap

mu1 : float; 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

kt : float; default=None -> mu1*ka

Transverse stiffness when the gap is closed

mu2 : float; 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

tmax : float; default=0.

Maximum allowable penetration used in the adjustment of penalty values. The positive value activates the penalty value adjustment

mar : float; default=100.

Maximum allowable adjustment ratio for adaptive penalty values KA and KT

trmin : float; default=0.001

Fraction of TMAX defining the lower bound for the allowable penetration

comment : str; default=’‘

a comment for the card

add_phbdy(self, pid, af=None, d1=None, d2=None, comment='')

Creates a PHBDY card

Parameters:
eid : int

element id

pid : int

property id

af : int

Area factor of the surface used only for CHBDYP element Must be {POINT, LINE, TUBE, ELCYL} TUBE : constant thickness of hollow tube

d1, d2 : float; default=None

Diameters associated with the surface Used with CHBDYP [ELCYL, TUBE, FTUBE] surface elements

comment : str; default=’‘

a comment for the card

add_pihex(self, pid, mid, cordm=0, integ=None, stress=None, isop=None, fctn='SMECH', comment='')

See also

PSOLID

add_pload(self, sid, pressure, nodes, comment='')

Creates a PLOAD card, which defines a uniform pressure load on a shell/solid face or arbitrarily defined quad/tri face

Parameters:
sid : int

load id

pressure : float

the pressure to apply

nodes : List[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

comment : str; default=’‘

a comment for the card

add_pload1(self, sid, eid, load_type, scale, x1, p1, x2=None, p2=None, comment='')

Creates a PLOAD1 card, which may be applied to a CBAR/CBEAM

Parameters:
sid : int

load id

eid : int

element to apply the load to

load_type : str

type of load that’s applied valid_types = {FX, FY, FZ, FXE, FYE, FZE,

MX, MY, MZ, MXE, MYE, MZE}

scale : str

Determines scale factor for X1, X2. {LE, FR, LEPR, FRPR}

x1 / x2 : float / float

the starting/end position for the load application the default for x2 is x1

p1 / p2 : float / float

the magnitude of the load at x1 and x2 the default for p2 is p1

comment : str; default=’‘

a comment for the card

Point Load : x1 == x2
Distributed Load : x1 != x2
add_pload2(self, sid, pressure, eids, comment='')

Creates a PLOAD2 card, which defines an applied load normal to the quad/tri face

Parameters:
sid : int

load id

pressure : float

the pressure to apply to the elements

eids : List[int]

the elements to apply pressure to n < 6 or a continouus monotonic list of elements (e.g., [1, 2, …, 1000])

comment : str; default=’‘

a comment for the card

add_pload4(self, sid, eids, pressures, g1=None, g34=None, cid=0, nvector=None, surf_or_line='SURF', line_load_dir='NORM', comment='')

Creates a PLOAD4 card

Parameters:
sid : int

the load id

eids : List[int, …]

shells : the range of element ids; must be sequential solids : must be length 1

pressures : List[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

g1 : int/None

only used for solid elements

g34 : int / None

only used for solid elements

cid : int; default=0

the coordinate system for ???

nvector : (3, ) float ndarray

blank : load acts normal to the face the local pressure vector

surf_or_line : str; default=’SURF’

SURF : surface load LINE : line load (only defined for QUADR, TRIAR) not supported

line_load_dir : str; default=’NORM’

direction of the line load (see surf_or_line); {X, Y, Z, TANG, NORM} not supported

comment : str; default=’‘

a comment for the card

TODO: fix the way “pressures” works
add_ploadx1(self, sid, eid, pa, nids, pb=None, theta=0.0, comment='')

Creates a PLOADX1 card, which defines surface traction for axisymmetric elements.

Parameters:
sid : int

load id

eid : int

element id (CQUADX, CTRIAX, or CTRIAX6)

nids : List[int, int]

Corner grid points. GA and GB are any two adjacent corner grid points of the element

pa / pb : float / None

Surface traction at grid point GA or GB pb : default is None -> pa

theta : float; default=0.0

Angle between surface traction and inward normal to the line segment.

comment : str; default=’‘

a comment for the card

add_plotel(self, eid, nodes, comment='')

Adds a PLOTEL card

Parameters:
eid : int

Element ID

nodes : List[int, int]

Unique GRID point IDs

comment : str; default=’‘

a comment for the card

add_plplane(self, pid, mid, cid=0, stress_strain_output_location='GRID', comment='')

Creates a PLPLANE card

add_plsolid(self, pid, mid, stress_strain='GRID', ge=0.0, comment='')

Creates a PLSOLID card

Parameters:
pid : int

property id

mid : int

material id

stress_strain : str

Location of stress and strain output valid types = {GRID, GAUSS}

ge : float; default=0.

damping coefficient

comment : str; default=’‘

a comment for the card

add_pmass(self, pid, mass, comment='')

Creates an PMASS card, which defines a mass applied to a single DOF

Parameters:
pid : int

Property id used by a CMASS1/CMASS3 card

mass : float

the mass to apply

comment : str; default=’‘

a comment for the card

add_point(self, nid, xyz, cp=0, comment='')

Creates the POINT card

Parameters:
nid : int

node id

xyz : (3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cp : int; default=0

coordinate system for the xyz location

comment : str; default=’‘

a comment for the card

add_pointax(self, nid, ringax, phi, comment='')

Creates a POINTAX card

add_pplane(self, pid, mid, t=0.0, nsm=0.0, formulation_option=0, comment='')

Creates a PPLANE card

add_prac2d(self, pid, mid, thick, iplane, nsm=0.0, gamma=0.5, phi=180.0, comment='')

Creates a PRAC2D card

add_prac3d(self, pid, mid, gamma=0.5, phi=180.0, comment='')

Creates a PRAC3D card

add_presax(self, sid, pressure, rid1, rid2, phi1=0.0, phi2=360.0, comment='')

Creates a PRESAX card

add_prod(self, pid, mid, A, j=0.0, c=0.0, nsm=0.0, comment='')

Creates a PROD card

Parameters:
pid : int

property id

mid : int

material id

A : float

area

J : float; default=0.

polar moment of inertia

c : float; default=0.

stress factor

nsm : float; default=0.

nonstructural mass per unit length

comment : str; default=’‘

a comment for the card

add_pshear(self, pid, mid, t, nsm=0.0, f1=0.0, f2=0.0, comment='')

Creates a PSHEAR card

Parameters:
pid : int

property id

mid : int

material id

t : float

shear panel thickness

nsm : float; default=0.

nonstructural mass per unit length

f1 : float; default=0.0

Effectiveness factor for extensional stiffness along edges 1-2 and 3-4

f2 : float; default=0.0

Effectiveness factor for extensional stiffness along edges 2-3 and 1-4

comment : str; default=’‘

a comment for the card

add_pshell(self, 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='')

Creates a PSHELL card

Parameters:
pid : int

property id

mid1 : int; default=None

defines membrane material defines element density (unless blank)

mid2 : int; default=None

defines bending material defines element density if mid1=None

mid3 : int; default=None

defines transverse shear material

mid4 : int; default=None

defines membrane-bending coupling material

twelveIt3 : float; 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.

nsm : float; default=0.0

non-structural mass per unit area

z1 / z2 : float; 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

comment : str; default=’‘

a comment for the card

add_psolid(self, pid, mid, cordm=0, integ=None, stress=None, isop=None, fctn='SMECH', comment='')

Creates a PSOLID card

Parameters:
pid : int

property id

mid : int

material id

cordm : int; default=0

material coordinate system

integ : int; default=None

None-varies depending on element type 0, ‘BUBBLE’ 1, ‘GAUSS’ 2, ‘TWO’ 3, ‘THREE’ REDUCED FULL

stress : int/str; default=None

None/GRID, 1-GAUSS

isop : int/str; default=None

0-REDUCED 1-FULL

fctn : str; default=’SMECH’

PFLUID/SMECH

comment : str; default=’‘

a comment for the card

add_ptube(self, pid, mid, OD1, t=None, nsm=0.0, OD2=None, comment='')

Adds a PTUBE card

Parameters:
pid : int

property id

mid : int

material id

OD1 : float

outer diameter at End A

t : float; default=None -> OD1/2.

thickness

nsm : float; default=0.

non-structural mass per unit length

OD2 : float; default=None -> OD1

outer diameter at End B

comment : str; default=’‘

a comment for the card

add_pvisc(self, pid, ce, cr, comment='')

Creates a PVISC card

Parameters:
pid : int

property id for a CVISC

ce : float

Viscous damping values for extension in units of force per unit velocity

cr : float

Viscous damping values for rotation in units of moment per unit velocity.

comment : str; default=’‘

a comment for the card

add_qbdy1(self, sid, qflux, eids, comment='')

Creates a QBDY1 card

add_qbdy2(self, sid, eid, qfluxs, comment='')

Creates a QBDY1 card

add_qbdy3(self, sid, Q0, cntrlnd, eids, comment='')

Creates a QBDY3 card

Parameters:
sid : int

Load set identification number. (Integer > 0)

q0 : float; default=None

Magnitude of thermal flux vector into face

control_id : int; default=0

Control point

eids : List[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

comment : str; default=’‘

a comment for the card

add_qhbdy(self, sid, flag, q0, grids, af=None, comment='')

Creates a QHBDY card

Parameters:
sid : int

load id

flag : str

valid_flags = {POINT, LINE, REV, AREA3, AREA4, AREA6, AREA8}

q0 : float

Magnitude of thermal flux into face. Q0 is positive for heat into the surface

af : float; default=None

Area factor depends on type

grids : List[int]

Grid point identification of connected grid points

comment : str; default=’‘

a comment for the card

add_qset(self, ids, components, comment='')

Creates a QSET/QSET1 card, which defines generalized degrees of freedom (q-set) to be used for dynamic reduction or component mode synthesis.

Parameters:
ids : List[int]

the GRID/SPOINT ids

components : List[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

comment : str; default=’‘

a comment for the card

add_qset1(self, ids, components, comment='')

See also

add_qset

add_qvect(self, sid, q0, eids, t_source=None, ce=0, vector_tableds=None, control_id=0, comment='')

Creates a QVECT card

Parameters:
sid : int

Load set identification number. (Integer > 0)

q0 : float; default=None

Magnitude of thermal flux vector into face

t_source : float; default=None

Temperature of the radiant source

ce : int; default=0

Coordinate system identification number for thermal vector flux

vector_tableds : List[int/float, int/float, int/float]
vector : float; default=0.0

directional cosines in coordinate system CE) of the thermal vector flux

tabled : int

TABLEDi entry identification numbers defining the components as a function of time

control_id : int; default=0

Control point

eids : List[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

comment : str; default=’‘

a comment for the card

add_qvol(self, sid, qvol, control_point, elements, comment='')

Creates a QVOL card

add_radbc(self, nodamb, famb, cntrlnd, eids, comment='')

Creates a RADBC card

add_radm(self, radmid, absorb, emissivity, comment='')

Creates a RADM card

add_randps(self, sid, j, k, x=0.0, y=0.0, tid=0, comment='')

Creates a RANDPS card

Parameters:
sid : int

random analysis set id defined by RANDOM in the case control deck

j : int

Subcase id of the excited load set

k : int

Subcase id of the applied load set k > j

x / y : float; default=0.0

Components of the complex number

tid : int; default=0

TABRNDi id that defines G(F)

comment : str; default=’‘

a comment for the card

add_randt1(self, sid, n, t0, tmax, comment='')

Creates a RANDT1 card

Parameters:
sid : int

random analysis set id defined by RANDOM in the case control deck

n : int

???

t0 : int

???

tmax : float

???

comment : str; default=’‘

a comment for the card

add_rbar(self, eid, nids, cna, cnb, cma, cmb, alpha=0.0, comment='')

Creates a RBAR element

Parameters:
eid : int

element id

nids : List[int, int]

node ids; connected grid points at ends A and B

cna / cnb : str

independent DOFs in ‘123456’

cma / cmb : str

dependent DOFs in ‘123456’

alpha : float; default=0.0

coefficient of thermal expansion

comment : str; default=’‘

a comment for the card

add_rbar1(self, eid, nids, cb, alpha=0.0, comment='')

Creates an RBAR1 element

add_rbe1(self, eid, Gni, Cni, Gmi, Cmi, alpha=0.0, comment='')

Creates an RBE1 element

Parameters:
eid : int

element id

Gni : List[int]

independent node ids

Cni : List[str]

the independent components (e.g., ‘123456’)

Gmi : List[int]

dependent node ids

Cmi : List[str]

the dependent components (e.g., ‘123456’)

alpha : float; default=0.

thermal expansion coefficient

comment : str; default=’‘

a comment for the card

add_rbe2(self, eid, gn, cm, Gmi, alpha=0.0, comment='')

Creates an RBE2 element

Parameters:
eid : int

element id

gn : int

Identification number of grid point to which all six independent degrees-of-freedom for the element are assigned.

cm : str

Component numbers of the dependent degrees-of-freedom in the global coordinate system at grid points GMi.

Gmi : List[int]

dependent nodes

alpha : float; default=0.0

???

add_rbe3(self, eid, refgrid, refc, weights, comps, Gijs, Gmi=None, Cmi=None, alpha=0.0, comment='')

Creates an RBE3 element

Parameters:
eid : int

element id

refgrid : int

dependent node

refc - str

dependent components for refgrid???

GiJs : List[int, …, int]

independent nodes

comps : List[str, …, str]

independent components

weights : List[float, …, float]

independent weights for the importance of the DOF

Gmi : List[int, …, int]; default=None -> []

dependent nodes / UM Set

Cmi : List[str, …, str]; default=None -> []

dependent components / UM Set

alpha : float; default=0.0

thermal expansion coefficient

comment : str; default=’‘

a comment for the card

add_rforce(self, sid, nid, scale, r123, cid=0, method=1, racc=0.0, mb=0, idrf=0, comment='')

Creates an RFORCE card

add_rforce1(self, sid, nid, scale, group_id, cid=0, r123=None, racc=0.0, mb=0, method=2, comment='')

Creates an RFORCE1 card

Parameters:
sid : int

load set id

nid : int

grid point through which the rotation vector acts

scale : float

scale factor of the angular velocity in revolutions/time

r123 : List[float, float, float] / (3, ) float ndarray

rectangular components of the rotation vector R that passes through point G

racc : int; default=0.0

???

mb : int; 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_id : int

Group identification number. The GROUP entry referenced in the GROUPID field selects the grid points to which the load is applied.

cid : int; default=0

Coordinate system defining the components of the rotation vector.

method : int; default=2

Method used to compute centrifugal forces due to angular velocity.

comment : str; default=’‘

a comment for the card

add_rgyro(self, sid, asynci, refrot, unit, speed_low, speed_high, speed, comment='')

Creates an RGYRO card

add_ringax(self, nid, R, z, ps=None, comment='')

Creates a RINGAX card

add_rload1(self, sid, excite_id, delay=0, dphase=0, tc=0, td=0, Type='LOAD', comment='')

Creates an RLOAD1 card, which defienes a frequency-dependent load based on TABLEDs.

Parameters:
sid : int

load id

excite_id : int

node id where the load is applied

delay : int/float; default=None

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

dphase : int/float; default=None

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

tc : int/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

td : int/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

comment : str; default=’‘

a comment for the card

add_rload2(self, sid, excite_id, delay=0, dphase=0, tb=0, tp=0, Type='LOAD', comment='')

Creates a nRLOAD2 card, which defienes a frequency-dependent load based on TABLEDs.

Parameters:
sid : int

load id

excite_id : int

node id where the load is applied

delay : int/float; default=None

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

dphase : int/float; default=None

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

tb : int/float; default=0

TABLEDi id that defines B(f) for all degrees of freedom in EXCITEID entry

tc : int/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

td : int/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

tp : int/float; default=0

TABLEDi id that defines phi(f) for all degrees of freedom in EXCITEID entry

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

comment : str; default=’‘

a comment for the card

add_rotord(self, 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='')

Creates a ROTORD card

add_rotorg(self, sid, nids, comment='')

Creates a ROTORG card

add_rrod(self, eid, nids, cma='', cmb='', alpha=0.0, comment='')

Creates a RROD element

Parameters:
eid : int

element id

nids : List[int, int]

node ids; connected grid points at ends A and B

cma / cmb : str; default=’‘

dependent DOFs

alpha : float; default=0.0

coefficient of thermal expansion

comment : str; default=’‘

a comment for the card

add_rspint(self, rid, grida, gridb, gr, unit, table_id, comment='')

Creates an RSPINT card

add_rspline(self, eid, independent_nid, dependent_nids, dependent_components, diameter_ratio=0.1, comment='')

Creates an RSPLINE card, which uses multipoint constraints for the interpolation of displacements at grid points

Parameters:
eid : int

element id

independent_nid : int

the independent node id

dependent_nids : List[int]

the dependent node ids

dependent_components : List[str]

Components to be constrained

diameter_ratio : float; default=0.1

Ratio of the diameter of the elastic tube to the sum of the lengths of all segments

comment : str; default=’‘

a comment for the card

add_rsscon(self, eid, rigid_type, shell_eid=None, solid_eid=None, a_solid_grids=None, b_solid_grids=None, shell_grids=None, comment='')

Creates an RSSCON card, which defines multipoint constraints to model clamped connections of shell-to-solid elements.

Parameters:
eid : int

element id

rigid_type : str

GRID/ELEM

shell/solid_eid : int; default=None

the shell/solid element id (if rigid_type=ELEM)

shell/solid_grids : List[int, int]; default=None

the shell/solid node ids (if rigid_type=GRID)

comment : str; default=’‘

a comment for the card

add_sebndry(self, seid_a, seid_b, ids, comment='')
add_sebset(self, seid, ids, components, comment='')

Creates an SEBSET/SEBSET1 card

add_sebset1(self, seid, ids, components, comment='')

See also

add_secset

add_sebulk(self, seid, superelement_type, rseid, method='AUTO', tol=1e-05, loc='YES', unitno=None, comment='')
add_seconct(self, seid_a, seid_b, tol, loc, nodes_a, nodes_b, comment='')
add_secset(self, seid, ids, components, comment='')

Creates an SECSET/SECSET1 card

add_secset1(self, seid, ids, components, comment='')

See also

add_secset

add_seelt(self, seid, ids, comment='')
add_seexcld(self, seid_a, seid_b, nodes, comment='')
add_selabel(self, seid, label, comment='')
add_seload(self, lid_s0, seid, lid_se, comment='')
add_seloc(self, seid, nodes_seid, nodes0, comment='')

Creates an SELOC card, which transforms the superelement SEID from PA to PB. Basically, define two CORD1Rs.

Parameters:
seid : int

the superelement to transform

nodes_seid : List[int, int, int]

the nodes in the superelement than define the resulting coordinate system

nodes0 : List[int, int, int]

the nodes in the superelement than define the starting coordinate system

comment : str; default=’‘

a comment for the card

add_sempln(self, seid, p1, p2, p3, comment='')
add_senqset(self, set_id, n, comment='')
add_seqgp(self, nids, seqids, comment='')

Creates the SEQGP card

Parameters:
nids : int

the node ids

seqid : int/float

the superelement id

comment : str; default=’‘

a comment for the card

add_seqset(self, seid, ids, components, comment='')

Creates an SEQSET card

add_seqset1(self, seid, ids, components, comment='')

See also

add_secset

add_seset(self, seid, ids, comment='')

Creates an SEUSET card

add_sesup(self, nodes, Cs, comment='')

Creates an SESUP card

add_set1(self, sid, ids, is_skin=False, comment='')

Creates a SET1 card, which defines a list of structural grid points or element identification numbers.

Parameters:
sid : int

set id

ids : List[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_skin : bool; default=False

if is_skin is used; ids must be empty

comment : str; default=’‘

a comment for the card

add_set3(self, sid, desc, ids, comment='')

Creates a SET3 card

add_setree(self, seid, seids, comment='')
add_sload(self, sid, nids, mags, comment='')

Creates an SLOAD (GRID/SPOINT load)

Parameters:
sid : int

load id

nids : int; List[int]

the GRID/SPOINT ids

mags : float; List[float]

the load magnitude

comment : str; default=’‘

a comment for the card

add_snorm(self, nid, normal, cid=0, comment='')
add_spc(self, conid, nodes, components, enforced, comment='')

Creates an SPC card, which defines the degree of freedoms to be constrained

Parameters:
conid : int

constraint id

nodes : List[int]

GRID/SPOINT ids

components : List[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforced : List[float]

the constrained value for the given node (typically 0.0)

comment : str; 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(self, conid, components, nodes, comment='')

Creates an SPC1 card, which defines the degree of freedoms to be constrained to a value of 0.0

Parameters:
conid : int

constraint id

components : str

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

nodes : List[int]

GRID/SPOINT ids

comment : str; default=’‘

a comment for the card

add_spcadd(self, conid, sets, comment='')

Creates a SPCADD card

add_spcax(self, conid, ringax, hid, component, enforced, comment='')

Creates an SPCAX card

add_spcd(self, sid, nodes, components, enforced, comment='')

Creates an SPCD card, which defines the degree of freedoms to be set during enforced motion

Parameters:
conid : int

constraint id

nodes : List[int]

GRID/SPOINT ids

components : List[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforced : List[float]

the constrained value for the given node (typically 0.0)

comment : str; 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(self, eid, caero, box1, box2, setg, dz=0.0, method='IPS', usage='BOTH', nelements=10, melements=10, comment='')

Creates a SPLINE1, which defines a surface spline.

Parameters:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box1 / box2 : int

First/last box id that is used by the spline

setg : int

SETx id that defines the list of GRID points that are used by the surface spline

dz : float; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

method : str; 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

usage : str; 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 : int; default=10

The number of FE elements along the local spline x-axis if using the FPS option

melements : int; default=10

The number of FE elements along the local spline y-axis if using the FPS option

comment : str; default=’‘

a comment for the card

add_spline2(self, eid, caero, id1, id2, setg, dz=0.0, dtor=1.0, cid=0, dthx=0.0, dthy=0.0, usage='BOTH', comment='')

Creates a SPLINE2 card, which defines a beam spline.

Parameters:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

id1 / id2 : int

First/last box/body id that is used by the spline

setg : int

SETx id that defines the list of GRID points that are used by the beam spline

dz : float; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

dtor : float; default=1.0

Torsional flexibility ratio (EI/GJ). Use 1.0 for bodies (CAERO2).

cid : int; default=0

Rectangular coordinate system for which the y-axis defines the axis of the spline. Not used for bodies, CAERO2

dthx : float; 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).

DTHY : Used for rotation about the spline’s y-axis (torsion).

It is used for slope of bodies.

usage : str; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

comment : str; default=’‘

a comment for the card

add_spline3(self, eid, caero, box_id, components, nodes, displacement_components, coeffs, usage='BOTH', comment='')

Creates a SPLINE3 card, which is useful for control surface constraints.

Parameters:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box_id : int

Identification number of the aerodynamic box number.

components : int

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

nodes : List[int]

Grid point identification number of the independent grid point.

displacement_components

Component numbers in the displacement coordinate system. 1-6 (GRIDs) 0 (SPOINTs)

coeffs

Coefficient of the constraint relationship.

usage : str; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

comment : str; default=’‘

a comment for the card

add_spline4(self, eid, caero, aelist, setg, dz, method, usage, nelements, melements, comment='')

Creates a SPLINE4 card, which defines a curved Infinite Plate, Thin Plate, or Finite Plate Spline.

Parameters:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box1 / box2 : int

First/last box id that is used by the spline

setg : int

SETx id that defines the list of GRID points that are used by the surface spline

dz : float; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

method : str; 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

usage : str; 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 : int; default=10

The number of FE elements along the local spline x-axis if using the FPS option

melements : int; default=10

The number of FE elements along the local spline y-axis if using the FPS option

comment : str; default=’‘

a comment for the card

add_spline5(self, eid, caero, aelist, setg, thx, thy, dz=0.0, dtor=1.0, cid=0, usage='BOTH', method='BEAM', ftype='WF2', rcore=None, comment='')

Creates a SPLINE5 card

add_spoint(self, ids, comment='')

Creates the SPOINTs card that contains many SPOINTs

Parameters:
ids : List[int]

SPOINT ids

comment : str; default=’‘

a comment for the card

add_suport(self, nodes, Cs, comment='')

Creates a SUPORT card, which defines free-body reaction points. This is always active.

Parameters:
nodes : List[int]

the nodes to release

Cs : List[str]

compoents to support at each node

comment : str; default=’‘

a comment for the card

add_suport1(self, conid, nodes, Cs, comment='')

Creates a SUPORT card, which defines free-body reaction points.

Parameters:
conid : int

Case Control SUPORT id

nodes : List[int]

the nodes to release

Cs : List[str]

compoents to support at each node

comment : str; default=’‘

a comment for the card

add_tabdmp1(self, tid, x, y, Type='G', comment='')

Creates a TABDMP1 card

add_tabled1(self, tid, x, y, xaxis='LINEAR', yaxis='LINEAR', extrap=0, comment='')

Creates a TABLED1, which is a dynamic load card that is applied by the DAREA card

Parameters:
tid : int

table id

x : List[float]

nvalues

y : List[float]

nvalues

xaxis : str

LINEAR, LOG

yaxis : str

LINEAR, LOG

extrap : int; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

comment : str; default=’‘

a comment for the card

add_tabled2(self, tid, x1, x, y, comment='')

Creates a TABLED2 card

add_tabled3(self, tid, x1, x2, x, y, comment='')

Creates a TABLED3 card

add_tabled4(self, tid, x1, x2, x3, x4, a, comment='')

Creates a TABLED4 card

add_tableh1(self, tid, x, y, comment='')
add_tablem1(self, tid, x, y, xaxis='LINEAR', yaxis='LINEAR', comment='')

Creates a TABLEM1 card

add_tablem2(self, tid, x1, x, y, extrap=0, comment='')

Creates a TABLEM2 card

add_tablem3(self, tid, x1, x2, x, y, extrap=0, comment='')

Creates a TABLEM3 card

add_tablem4(self, tid, x1, x2, x3, x4, a, comment='')

Creates a TABLEM4 card

add_tables1(self, tid, x, y, Type=1, comment='')

Adds a TABLES1 card, which defines a stress dependent material

Parameters:
tid : int

Table ID

Type : int; 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, y : List[float]

table values

comment : str; default=’‘

a comment for the card

add_tablest(self, tid, x, y, comment='')

Creates an TABLEST card

add_tabrnd1(self, tid, x, y, xaxis='LINEAR', yaxis='LINEAR', comment='')

Creates an TABRND1 card

add_tabrndg(self, tid, Type, LU, WG, comment='')

Creates a TABRNDG card

Parameters:
tid : int

table id

Type : int

PSD type 1 : von Karman 2 : Dryden

LU : float

Scale of turbulence divided by velocity (units of time)

WG : float

Root-mean-square gust velocity

comment : str; default=’‘

a comment for the card

add_temp(self, sid, temperatures, comment='')

Creates a TEMP card

Parameters:
sid : int

Load set identification number

temperatures : dict[nid]
nid : int

node id

temperature : float

the nodal temperature

comment : str; default=’‘

a comment for the card

add_tempax(self, sid, ring, phi, temperature, comment='')

Creates a TEMPAX card

add_tempd(self, sid, temperature, comment='')

Creates a TEMPD card

Parameters:
sid : int

Load set identification number. (Integer > 0)

temperature : float

default temperature

comment : str; default=’‘

a comment for the card

add_tf(self, sid, nid0, c, b0, b1, b2, nids, components, a, comment='')

Creates a TF card

add_tic(self, sid, nodes, components, u0=0.0, v0=0.0, comment='')

Creates a TIC card

Parameters:
sid : int

Case Control IC id

nodes : int / List[int]

the nodes to which apply the initial conditions

components : int / List[int]

the DOFs to which apply the initial conditions

u0 : float / List[float]

Initial displacement.

v0 : float / List[float]

Initial velocity.

comment : str; default=’‘

a comment for the card

add_tload1(self, sid, excite_id, tid, delay=0, Type='LOAD', us0=0.0, vs0=0.0, comment='')

Creates a TLOAD1 card, which defienes a load based on a table

Parameters:
sid : int

load id

excite_id : int

node id where the load is applied

tid : int

TABLEDi id that defines F(t) for all degrees of freedom in EXCITEID entry float : MSC not supported

delay : int/float; default=0

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

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

us0 : float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0 : float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

comment : str; default=’‘

a comment for the card

add_tload2(self, 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='')

Creates a TLOAD2 card, which defines a exponential time load

Parameters:
sid : int

load id

excite_id : int

node id where the load is applied

delay : int/float; default=None

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

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

T1 : float; default=0.

time constant (t1 > 0.0) times below this are ignored

T2 : float; default=None

time constant (t2 > t1) times above this are ignored

frequency : float; default=0.

Frequency in cycles per unit time.

phase : float; default=0.

Phase angle in degrees.

c : float; default=0.

Exponential coefficient.

b : float; default=0.

Growth coefficient.

us0 : float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0 : float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

comment : str; default=’‘

a comment for the card

add_trim(self, sid, mach, q, labels, uxs, aeqr=1.0, trim_type=1, comment='')

Creates a TRIM/TRIM2 card for a static aero (144) analysis.

Parameters:
sid : int

the trim id; referenced by the Case Control TRIM field

mach : float

the mach number

q : float

dynamic pressure

labels : List[str]

names of the fixed variables

uxs : List[float]

values corresponding to labels

aeqr : float

0.0 : rigid trim analysis 1.0 : elastic trim analysis (default)

trim_type : int

1 : creates a TRIM 2 : creates a TRIM2

comment : str; default=’‘

a comment for the card

add_tstep(self, sid, N, DT, NO, comment='')

Creates a TSTEP card

add_tstep1(self, sid, tend, ninc, nout, comment='')

Creates a TSTEP1 card

add_tstepnl(self, 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='')

Creates a TSTEPNL card

add_uset(self, name, ids, components, comment='')

Creates a USET card, which defines a degrees-of-freedom set.

Parameters:
name : str

SNAME Set name. (One to four characters or the word ‘ZERO’ followed by the set name.)

ids : List[int]

the GRID/SPOINT ids

components : List[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

comment : str; default=’‘

a comment for the card

add_uset1(self, name, ids, components, comment='')

See also

add_uset

add_view(self, iview, icavity, shade='BOTH', nbeta=1, ngamma=1, dislin=0.0, comment='')

Creates a VIEW card

add_view3d(self, icavity, gitb=4, gips=4, cier=4, error_tol=0.1, zero_tol=1e-10, warp_tol=0.01, rad_check=3, comment='')

Creates a VIEW3D card

caero_ids

gets the CAEROx ids

clear_attributes(self)

removes the attributes from the model

coord_ids

gets the number of coordinate system ids

create_card_object(self, 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_name : str

the card_name -> ‘GRID’

is_list : bool; default=True

True : this is a list of fields False : this is a list of lines

has_none : bool; default=True

can there be trailing Nones in the card data (e.g. [‘GRID, 1, 2, 3.0, 4.0, 5.0, ‘])

Returns:
card_object : BDFCard()

the card object representation of card

card : list[str]

the card with empty fields removed

create_subcases(self, subcase_ids=None)

creates a series of subcases

cross_reference(self, 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, word='')

Links up all the cards to the cards they reference

Parameters:
xref : bool; default=True

cross references the model

xref_nodes : bool; default=True

set cross referencing of nodes/coords

xref_element : bool; default=True

set cross referencing of elements

xref_properties : bool; default=True

set cross referencing of properties

xref_masses : bool; default=True

set cross referencing of CMASS/PMASS

xref_materials : bool; default=True

set cross referencing of materials

xref_loads : bool; default=True

set cross referencing of loads

xref_constraints : bool; default=True

set cross referencing of constraints

xref_aero : bool; default=True

set cross referencing of CAERO/SPLINEs

xref_sets : bool; default=True

set cross referencing of SETx

word : str; 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(self, cards)

Method for removing broken cards from the reader

Parameters:
cards : List[str]; Set[str]

a list/set of cards that should not be read

.. python ::

bdf_model.disable_cards([‘DMIG’, ‘PCOMP’])

dmigs
dmijis
dmijs
dmiks
dmis
element_ids

gets the element ids

export_hdf5_file(self, hdf5_file, exporter=None)

Converts the BDF objects into hdf5 object

Parameters:
hdf5_file : H5File()

an h5py object

exporter : HDF5Exporter; default=None

unused

export_hdf5_filename(self, hdf5_filename)

Converts the BDF objects into hdf5 object

Parameters:
hdf5_filename : str

the path to the hdf5 file

TODO: doesn’t support:
  • BucklingEigenvalues
geom_check(self, geom_check, xref)

what about xref?

get_MPCx_node_ids(self, mpc_id, consider_mpcadd=True, stop_on_failure=True)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids(...)

get_MPCx_node_ids_c1(self, mpc_id, consider_mpcadd=True, stop_on_failure=True)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids_c1(...)

get_SPCx_node_ids(self, spc_id, consider_spcadd=True, stop_on_failure=True)

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters:
spc_id : int

the SPC id

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
node_ids : List[int]

the constrained associated node ids

get_SPCx_node_ids_c1(self, spc_id, stop_on_failure=True)

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters:
spc_id : int

the SPC id

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
node_ids_c1 : Dict[component] = node_ids
component : str

the DOF to constrain

node_ids : List[int]

the constrained node ids

get_area_breakdown(self, 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_area : bool; 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(self, bulk_data_lines, bulk_data_ilines=None)

Parses the BDF lines into a list of card_lines

get_bdf_cards_dict(self, bulk_data_lines, bulk_data_ilines=None)

Parses the BDF lines into a list of card_lines

get_bdf_stats(self, return_type='string')

Print statistics for the BDF

Parameters:
return_type : str (default=’string’)
the output type (‘list’, ‘string’)

‘list’ : list of strings ‘string’ : single, joined string

Returns:
return_data : str, 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(self, card_types=None, reset_type_to_slot_map=False, stop_on_missing_card=False, combine=False)
Parameters:
card_types : str / List[str] / default=None

the list of keys to consider (list of strings; string) None : all cards

reset_type_to_slot_map : bool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_card : bool

crashes if you request a card and it doesn’t exist

combine : bool; 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(self, card_types, reset_type_to_slot_map=False, stop_on_missing_card=False)
Parameters:
card_types : List[str]

the list of keys to consider

reset_type_to_slot_map : bool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_card : bool

crashes if you request a card and it doesn’t exist

Returns:
out_dict : dict[str] = List[BDFCard()]

the key=card_type, value=the card object

get_custom_types(self)

helper method for dict_to_h5py

get_dependent_nid_to_components(self, mpc_id=None, stop_on_failure=True)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_dependent_nid_to_components(...)

get_displacement_index(self)

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_transform : dict[cd]

the indicies in nids_all that correspond to cd > 0 cd : int

the CD coordinate system

nnodesi : int

nnodesi <= nnodes

icd_transform : dict{int cid

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(self, fdtype='float64', idtype='int32', sort_ids=True)

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:
fdtype : str; default=’float64’

the type of xyz_cp

idtype : str; default=’int32’

the type of nid_cp_cd

sort_ids : bool; default=True

sort the ids

Returns:
icd_transform : dict{int cd

Dictionary from coordinate id to index of the nodes in self.point_ids that their output (CD) in that coordinate system.

icp_transform : dict{int cp

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(self, sid, msg='')

gets the dload entries (e.g., TLOAD1, TLOAD2)

get_element_faces(self, element_ids=None, allow_blank_nids=True)

Gets the elements and faces that are skinned from solid elements. This includes internal faces, but not existing shells.

Parameters:
element_ids : List[int] / None

skin a subset of element faces default=None -> all elements

allow_blank_nids : bool; 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(self, pids=None, stop_if_no_eids=True, msg='')

Gets all the element IDs with a specific property ID.

Parameters:
pids : List[int] / int

list of property ID

stop_if_no_eids : bool; default=True

prevents crashing if there are no elements setting this to False really doesn’t make sense for non-DMIG models

Returns:
element_ids : dict[pid] = List[eid]

dictionary of lists by property pid : int

property id

eid : int

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(self, pids=None)

Gets all the element IDs with a specific property ID.

Parameters:
pids : List[int]; default=None -> all

list of property ID

Returns:
element_ids : List[int]

the element ids

For example, we want to get all the element ids with pids=[1, 2, 3]
get_element_nodes_by_element_type(self, dtype='int32', solids=None)

see get_elements_properties_nodes_by_element_type

get_elements_nodes_by_property_type(self, dtype='int32', save_element_types=False)

Gets a dictionary of (etype, pid) to [eids, node_ids]

Parameters:
dtype : str; default=’int32’

the type of the integers

save_element_types : bool; default=False

adds the etype_to_eids_pids_nids output

Returns:
etype_pid_to_eids_nids : dict[(etype, pid)]
etype : str

the element type

pid : int

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_nids : dict[etype]

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(self, dtype='int32', solids=None, stop_if_no_eids=True)

Gets a dictionary of element type to [eids, pids, node_ids]

Parameters:
dtype : str; default=’int32’

the type of the integers

solids : dict[etype]
etype : str

the element type should only be CTETRA, CHEXA, CPENTA, CPYRAM

value : varies
(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_nids : dict[etype]
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_encoding(self, encoding=None)

gets the file encoding

get_h5attrs(self)

helper method for dict_to_h5py

get_length_breakdown(self, property_ids=None, stop_if_no_length=True)

gets a breakdown of the length by property region

TODO: What about CONRODs?

get_load_arrays(self, subcase_id, eid_map, node_ids, normals, nid_map=None)

see pyNastran.bdf.mesh_utils.forces_moments.get_load_arrays(...)

get_mass_breakdown(self, property_ids=None, stop_if_no_mass=True, detailed=False)

Gets a breakdown of the mass by property region.

Parameters:
property_ids : List[int] / int

list of property ID

stop_if_no_mass : bool; default=True

prevents crashing if there are no elements setting this to False really doesn’t make sense for non-DMIG models

detailed : bool, optional, default

Separates structural and nonstructural mass outputs.

Returns:
pids_to_mass : dict {int

Map from property id to mass (structural mass only if detailed is True).

pids_to_mass_nonstructural : dict {int

Map from property id to nonstructural mass (only if detailed is True).

mass_type_to_mass : dict {str

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(self, msg='')

Returns a dictionary that maps a material ID to a list of properties

Returns:
mid_to_pids_map : dict[int] = int

the mapping

msg : str; default=’‘

a message added to the error message

get_material_ids(self)

gets the material ids

get_mklist(self)

gets the MKLIST vector from MKAERO1/MKAERO2

get_mpcs(self, mpc_id, consider_mpcadd=True, stop_on_failure=True)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpcs(...)

get_nid_map(self, sort_ids=True)

Maps the GRID/SPOINT/EPOINT ids to a sorted/unsorted order.

Parameters:
sort_ids : bool; default=True

sort the ids

Returns:
nid_map : Dict[nid]
nid : int

the GRID/SPOINT/EPOINT id

i : int

the index

..note :: GRIDs, SPOINTs, & EPOINTs are stored in separate slots,

so they are unorganized.

get_node_id_to_element_ids_map(self)

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(self)

Returns a dictionary that maps node IDs to a list of elements.

Returns:
nid_to_elements_map : Dict[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(self, eids, msg='')

Get the node IDs associated with a list of element IDs

Parameters:
eids : List[int]

list of element ID

msg : str

An additional message to print out if an element is not found

Returns:
node_ids : Set[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(self, pids=None, etypes=None, idtype='int32', msg='')

a work in progress

Parameters:
pids : List[int]

list of property ID

etypes : List[str]

element types to consider

Returns:
pid_to_eids_ieids_map : dict[(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
nelements : int

the number of elements in the property type

nnodes : int

varies based on the element type

get_point_grids(self, nodes, msg='')

gets GRID, POINT cards

get_pressure_array(self, load_case_id, eids, stop_on_failure=True)

see pyNastran.bdf.mesh_utils.forces_moments.get_pressure_array(...)

get_property_id_to_element_ids_map(self, msg='')

Returns a dictionary that maps a property ID to a list of elements.

Returns:
pid_to_eids_map : Dict[pid]=List[eid]

property id to a list of elements

msg : str; default=’‘

a message added to the error message

get_reduced_dloads(self, dload_id, scale=1.0, consider_dload_combinations=True, skip_scale_factor0=False, msg='')

Accounts for scale factors.

Parameters:
dload_id : int

the desired DLOAD id

consider_dload_combinations : bool; default=True

look at the DLOAD card

scale : float; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0 : bool; default=False

Skip loads with scale factor=0.0. Nastran does not do this. Nastran will fail if referenced loads do not exist.

msg : str

debug message

Returns:
dloads : List[loads]

a series of dload objects

scale_factors : List[float]

the associated scale factors

Warning

assumes xref=True ..

get_reduced_loads(self, load_case_id, scale=1.0, consider_load_combinations=True, skip_scale_factor0=False, stop_on_failure=True, msg='')

Accounts for scale factors.

Parameters:
load_case_id : int

the desired LOAD id

consider_load_combinations : bool; default=True

look at the LOAD card

scale : float; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0 : bool; 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_failure : bool; default=True

errors if parsing something new

msg : str

debug message

Returns:
loads : List[loads]

a series of load objects

scale_factors : List[float]

the associated scale factors

is_grav : bool

is there a gravity card

Warning

assumes xref=True ..

get_reduced_mpcs(self, mpc_id, consider_mpcadd=False, stop_on_failure=True)

Get all traced MPCs that are part of a set

Parameters:
mpc_id : int

the MPC id

consider_mpcadd : bool

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

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
mpcs : List[MPC]

the various MPCs

get_reduced_nsms(self, nsm_id, consider_nsmadd=True, stop_on_failure=True)

Get all traced NSMs that are part of a set

Parameters:
nsm_id : int

the NSM id

consider_nsmadd : bool

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

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
mpcs : List[NSM]

the various NSMs

get_reduced_spcs(self, spc_id, consider_spcadd=True, stop_on_failure=True)

Get all traced SPCs that are part of a set

Parameters:
spc_id : int

the SPC id

consider_spcadd : bool

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

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
spcs : List[SPC]

the various SPCs

get_rigid_elements_with_node_ids(self, node_ids)

see pyNastran.bdf.mesh_utils.mpc_dependency.get_rigid_elements_with_node_ids(...)

get_rslot_map(self, reset_type_to_slot_map=False)

gets the rslot_map

get_spcs(self, spc_id, consider_nodes=False, stop_on_failure=True)

Gets the SPCs in a semi-usable form.

Parameters:
spc_id : int

the desired SPC ID

consider_nodes : bool; default=False

True : consider the GRID card PS field False: consider the GRID card PS field

Returns:
nids : List[int]

the constrained nodes

comps : List[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(self)
get_thermal_material_ids(self)

gets the thermal material ids

get_volume_breakdown(self, property_ids=None, stop_if_no_volume=True)

gets a breakdown of the volume by property region

TODO: What about CONRODs? #’PBRSECT’, #’PBCOMP’, #’PBMSECT’, #’PBEAM3’, #’PBEND’, #’PIHEX’,

get_xyz_in_coord(self, cid=0, fdtype='float64', sort_ids=True)

Gets the xyz points (including SPOINTS) in the desired coordinate frame

Parameters:
cid : int; default=0

the desired coordinate system

fdtype : str; default=’float64’

the data type of the xyz coordinates

sort_ids : bool; default=True

sort the ids

Returns:
xyz : (n, 3) ndarray

the xyz points in the cid coordinate frame

get_xyz_in_coord_array(self, cid=0, fdtype='float64', idtype='int32')

Gets the xyzs as an array in an arbitrary coordinate system

Parameters:
fdtype : str; default=’float64’

the type of xyz_cp

idtype : str; default=’int32’

the type of nid_cp_cd

cid : int; 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_transform : dict{int cd

Dictionary from coordinate id to index of the nodes in self.point_ids that their output (CD) in that coordinate system.

icp_transform : dict{int cp

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)
>>> nid_cp_cd, xyz_cid, xyz_cp, icd_transform, icp_transform = out
get_xyz_in_coord_no_xref(self, cid=0, fdtype='float64', sort_ids=True)

see get_xyz_in_coord

include_zip(self, bdf_filename=None, encoding=None, make_ilines=True)

Read a bdf without perform any other operation, except (optionally) insert the INCLUDE files in the bdf

Parameters:
bdf_filename : str / None

the input bdf (default=None; popup a dialog)

encoding : str; default=None -> system default

the unicode encoding

make_ilines : bool; default=True

flag for ilines

Returns:
all_lines : List[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(self, card_name, count_num=1)

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_name : str

the card_name -> ‘GRID’

count_num : int, optional

the amount to increment by (default=1)

>>> bdf.read_bdf(bdf_filename)
>>> bdf.card_count[‘GRID’]
50
is_bdf_vectorized

Returns False for the BDF class

is_long_ids
is_reject(self, card_name)

Can the card be read.

If the card is rejected, it’s added to self.reject_count

Parameters:
card_name : str

the card_name -> ‘GRID’

load(self, obj_filename='model.obj')

Loads a pickleable object

load_hdf5_file(self, h5_file)

Loads a BDF object from an hdf5 object

Parameters:
hdf5_file : H5File()

an h5py object

exporter : HDF5Exporter; default=None

unused

load_hdf5_filename(self, hdf5_filename)

Loads a BDF object from an hdf5 filename

Parameters:
hdf5_filename : str

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(self, 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_ids : list[int]; (n, ) ndarray, optional

An array of element ids.

mass_ids : list[int]; (n, ) ndarray, optional

An array of mass ids.

reference_point : ndarray/int, optional
type : ndarray

An array that defines the origin of the frame. default = <0,0,0>.

type : int

the node id

sym_axis : str, 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’

scale : float, optional

The WTMASS scaling value. default=None -> PARAM, WTMASS is used float > 0.0

inertia_reference : str; default=’cg’

‘cg’ : inertia is taken about the cg ‘ref’ : inertia is about the reference point

Returns:
mass : float

The mass of the model.

cg : ndarray

The cg of the model as an array.

inertia : ndarray

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(self, 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_ids : list[int]; (n, ) ndarray, optional

An array of element ids.

mass_ids : list[int]; (n, ) ndarray, optional

An array of mass ids.

reference_point : ndarray/int, optional
type : ndarray

An array that defines the origin of the frame. default = <0,0,0>.

type : int

the node id

sym_axis : str, 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’

scale : float, optional

The WTMASS scaling value. default=None -> PARAM, WTMASS is used float > 0.0

inertia_reference : str; default=’cg’

‘cg’ : inertia is taken about the cg ‘ref’ : inertia is about the reference point

Returns:
mass : float

The mass of the model.

cg : ndarray

The cg of the model as an array.

inertia : ndarray

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(self, 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:
model : BDF()

a BDF object

element_ids : list[int]; (n, ) ndarray, optional

An array of element ids.

mass_ids : list[int]; (n, ) ndarray, optional

An array of mass ids.

nsm_id : int

the NSM id to consider

reference_point : ndarray/int, optional
type : ndarray

An array that defines the origin of the frame. default = <0,0,0>.

type : int

the node id

sym_axis : str, 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’

scale : float, optional

The WTMASS scaling value. default=None -> PARAM, WTMASS is used float > 0.0

inertia_reference : str; default=’cg’

‘cg’ : inertia is taken about the cg ‘ref’ : inertia is about the reference point

xyz_cid0_dict : dict[nid]

mapping of the node id to the global position

debug : bool; default=False

developer debug; may be removed in the future

Returns:
mass : float

The mass of the model.

cg : ndarray

The cg of the model as an array.

inertia : ndarray

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)

material_ids

gets the material ids

nastran_format
ncaeros

gets the number of CAEROx panels

ncoords

gets the number of coordinate systems

nelements

gets the number of element

nid_map

Gets the GRID/SPOINT/EPOINT ids to a sorted order.

Parameters:
sort_ids : bool; default=True

sort the ids

Returns:
nid_map : Dict[nid]
nid : int

the GRID/SPOINT/EPOINT id

i : int

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
nmaterials

gets the number of materials

nnodes

gets the number of GRIDs

node_ids

gets the GRID ids

nodes = None

stores SPOINT, GRID cards

npoints

gets the number of GRID, SPOINT, EPOINT ids

nproperties

gets the number of properties

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)

List the names of attributes of a class as strings. Returns public attributes as default.

Parameters:
mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

filter_properties: bool: default=False

filters the @property objects

Returns:
attribute_names : List[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

object_methods(self, mode='public', keys_to_skip=None)

List the names of methods of a class as strings. Returns public methods as default.

Parameters:
obj : instance

the object for checking

mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
method : List[str]

sorted list of the names of methods of a given type or None if the mode is wrong

point_ids

gets the GRID, SPOINT, EPOINT ids

pop_parse_errors(self)

raises an error if there are parsing errors

pop_xref_errors(self)

raises an error if there are cross-reference errors

property_ids

gets the property ids

read_bdf(self, bdf_filename=None, validate=True, xref=True, punch=False, read_includes=True, save_file_structure=False, encoding=None)

Read method for the bdf files

Parameters:
bdf_filename : str / None

the input bdf (default=None; popup a dialog)

validate : bool; default=True

runs various checks on the BDF

xref : bool; default=True

should the bdf be cross referenced

punch : bool; default=False

indicates whether the file is a punch file

read_includes : bool; default=True

indicates whether INCLUDE files should be read

save_file_structure : bool; default=False

enables the write_bdfs method

encoding : str; 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(self, card_name, card_lines, show_log=True, comment='')

rejects a card

replace_cards(self, replace_model)

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(self)

removes the errors from the model

reset_rslot_map(self)

helper method for get_rslot_map

safe_acsid(self, msg='')

gets the aerodynamic coordinate system

safe_aefact(self, aefact_id, ref_id, xref_errors, msg='')

Gets an AEFACT card

Parameters:
ref_id : int

the referencing value (e.g., an CAERO eid references a AEFACT)

safe_aelist(self, aelist_id, ref_id, xref_errors, msg='')

Gets an AELIST card

Parameters:
ref_id : int

the referencing value (e.g., an AESURF eid references a AELIST)

safe_caero(self, caero_id, ref_id, xref_errors, msg='')
safe_coord(self, cid, ref_id, xref_errors, msg='')

Gets a CORDx card

Parameters:
ref_id : int

the referencing value (e.g., an node and element references a coord)

safe_cross_reference(self, 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(self, eid, ref_id, xref_errors, msg='')

Gets an element card

Parameters:
ref_id : int

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(self, eids, ref_id, xref_errors, msg='')

Gets an series of elements

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

safe_empty_nodes(self, nids, msg='')

safe xref version of self.Nodes(nid, msg=’‘)

safe_get_elements(self, eids, msg='')

safe xref version of self.Elements(eid, msg=’‘)

safe_get_nodes(self, nids, msg='')

safe xref version of self.Nodes(nid, msg=’‘)

safe_get_points(self, point_ids, msg='')

safe xref version of self.Points(point_ids, msg=’‘)

safe_material(self, mid, ref_id, xref_errors, msg='')

Gets a material card

Parameters:
ref_id : int

the referencing value (e.g., an property references a material)

safe_paero(self, paero_id, ref_id, xref_errors, msg='')

Gets a PAEROx card

Parameters:
ref_id : int

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(self, pid, ref_id, xref_errors, msg='')
Parameters:
ref_id : int

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(self, pid, ref_id, xref_errors, msg='')

Gets a mass_property card

Parameters:
ref_id : int

the referencing value (e.g., an element references a property)

safe_tabled(self, tabled_id, ref_id, xref_errors, msg='')
Parameters:
ref_id : int

the referencing value (e.g., an TLOAD1 eid references a TABLED1)

safe_tableh(self, tableh_id, ref_id, xref_errors, msg='')
Parameters:
ref_id : int

the referencing value (e.g., an MATT1 eid references a TABLEH1)

save(self, obj_filename='model.obj', unxref=True)

Saves a pickleable object

saves(self, unxref=True)

Saves a pickled string

set_as_msc(self)
set_as_nx(self)
set_as_zona(self)
set_cards(self, cards)

Method for setting the cards that will be processed

Parameters:
cards : List[str]; Set[str]

a list/set of cards that should not be read

.. python ::

bdf_model.set_cards([‘GRID’, ‘CTRIA3’])

set_dynamic_syntax(self, dict_of_vars)

Uses the OpenMDAO syntax of %varName in an embedded BDF to update the values for an optimization study.

Parameters:
dict_of_vars : dict[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(self, nparse_errors=100, stop_on_parsing_error=True, nxref_errors=100, stop_on_xref_error=True)

Catch parsing errors and store them up to print them out all at once (not all errors are caught).

Parameters:
nparse_errors : int

how many parse errors should be stored (default=0; all=None; no storage=0)

stop_on_parsing_error : bool

should an error be raised if there are parsing errors (default=True)

nxref_errors : int

how many cross-reference errors should be stored (default=0; all=None; no storage=0)

stop_on_xref_error : bool

should an error be raised if there are cross-reference errors (default=True)

set_param(self, key, values)

sets a param card; creates it if necessary

sol

gets the solution (e.g. 101, 103)

subcases

gets the subcases

sum_forces_moments(self, p0, loadcase_id, include_grav=False, xyz_cid0=None, cid=0)

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:
p0 : NUMPY.NDARRAY shape=(3,) or integer (node ID)

the reference point

loadcase_id : int

the LOAD=ID to analyze

cid : int; default=0

the coordinate system for the summation

include_grav : bool; default=False

includes gravity in the summation (not supported)

xyz_cid0 : None / Dict[int] = (3, ) ndarray

the nodes in the global coordinate system

Returns:
forces : NUMPY.NDARRAY shape=(3,)

the forces

moments : NUMPY.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(self, p0, loadcase_id, eids, nids, include_grav=False, xyz_cid0=None, cid=0)

Sum the forces/moments based on a list of nodes and elements.

Parameters:
p0 : int; (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_id : int

the LOAD=ID to analyze

eids : List[int]

the list of elements to include (e.g. the loads due to a PLOAD4)

nids : List[int]

the list of nodes to include (e.g. the loads due to a FORCE card)

cid : int; default=0

the coordinate system for the summation

include_grav : bool; default=False

includes gravity in the summation (not supported)

xyz_cid0 : None / Dict[int] = (3, ) ndarray

the nodes in the global coordinate system

Returns:
forces : NUMPY.NDARRAY shape=(3,)

the forces

moments : NUMPY.NDARRAY shape=(3,)

the moments

Nodal Types : FORCE, 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(self, seid, nodes, msg='')
transform_xyzcp_to_xyz_cid(self, xyz_cp, nids, icp_transform, cid=0, in_place=False, atol=1e-06)

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_transform : dict{int cp

Dictionary from coordinate id to index of the nodes in self.point_ids that their input (CP) in that coordinate system.

cid : int; default=0

the coordinate system to get xyz in

in_place : bool, 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)
type_slot_str

helper method for printing supported cards

uncross_reference(self, word='')

uncross references the model

update_card(self, card_name, icard, ifield, value)

Updates a Nastran card based on standard Nastran optimization names

Parameters:
card_name : str

the name of the card (e.g. GRID)

icard : int

the unique 1-based index identifier for the card (e.g. the GRID id)

ifield : int

the index on the card (e.g. X on GRID card as an integer representing the field number)

value : varies

the value to assign

Returns:
obj : varies

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(self, xref=True, desvar_values=None)

doesn’t require cross referenceing

update_solution(self, sol, method, sol_iline)

Updates the overall solution type (e.g. 101,200,600)

Parameters:
sol : int

the solution type (101, 103, etc)

method : str

the solution method (only for SOL=600)

sol_iline : int

the line to put the SOL/method on

validate(self)

runs some checks on the input data beyond just type checking

write_bdf(self, out_filename=None, encoding=None, size=8, is_double=False, interspersed=False, enddata=None, write_header=True, close=True)

Writes the BDF.

Parameters:
out_filename : varies; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

encoding : str; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

size : int; {8, 16}

the field size

is_double : bool; default=False

False : small field True : large field

interspersed : bool; 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.

enddata : bool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

write_header : bool; default=True

flag for writing the pyNastran header

close : bool; default=True

should the output file be closed

write_bdfs(self, out_filenames, relative_dirname=None, encoding=None, size=8, is_double=False, enddata=None, close=True, is_windows=None)

Writes the BDF.

Parameters:
out_filename : varies; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

relative_dirname : str; default=None -> os.curdir

A relative path to reference INCLUDEs. ‘’ : relative to the main bdf None : use the current directory path : absolute path

encoding : str; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

size : int; {8, 16}

the field size

is_double : bool; default=False

False : small field True : large field

enddata : bool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

close : bool; default=True

should the output file be closed

is_windows : bool; default=None
True/False : Windows 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_skin_solid_faces(self, skin_filename, write_solids=False, write_shells=True, size=8, is_double=False, encoding=None)

Writes the skinned elements

Parameters:
skin_filename : str

the file to write

write_solids : bool; default=False

write solid elements that have skinned faces

write_shells : bool; default=False

write newly created shell elements if there are shells in the model, doesn’t write these

size : int; default=8

the field width

is_double : bool; default=False

double precision flag

encoding : str; default=None -> system default

the string encoding

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, xref=True, log=None, debug=True)[source]
pyNastran.bdf.bdf.main()[source]

shows off how unicode works becausee it’s overly complicated

pyNastran.bdf.bdf.read_bdf(bdf_filename=None, validate=True, xref=True, punch=False, save_file_structure=False, skip_cards=None, read_cards=None, encoding=None, log=None, debug=True, mode='msc')[source]

Creates the BDF object

Parameters:
bdf_filename : str (default=None -> popup)

the bdf filename

debug : bool/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

log : logging module object / None

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

validate : bool; default=True

runs various checks on the BDF

xref : bool; default=True

should the bdf be cross referenced

punch : bool; default=False

indicates whether the file is a punch file

save_file_structure : bool; default=False

enables the write_bdfs method

skip_cards : List[str]; default=None

None : include all cards list of cards to skip

read_cards : List[str]; default=None

None : include all cards list of cards to read (all the cards)

encoding : str; default=None -> system default

the unicode encoding

mode : str; default=’msc’

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

Returns:
model : BDF()

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, log=None)[source]

Bases: object

CaseControlDeck parsing and extraction class

Parameters:
lines : List[str]

list of lines that represent the case control deck ending with BEGIN BULK

log : log()

a :mod: logging object

add_parameter_to_global_subcase(self, param)[source]

Takes in a single-lined string and adds it to the global subcase.

Parameters:
param : str

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(self, isubcase, param)[source]

Takes in a single-lined string and adds it to a single Subcase.

Parameters:
isubcase : int

the subcase ID to add

param_name : List[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(self, model)[source]

Takes a case control deck and changes it from a SOL xxx to a SOL 200

Parameters:
model : BDF()

the BDF object

.. todo:: not done…
copy_subcase(self, i_from_subcase, i_to_subcase, overwrite_subcase=True)[source]

Overwrites the parameters from one subcase to another.

Parameters:
i_from_subcase : int

the Subcase to pull the data from

i_to_subcase : int

the Subcase to map the data to

overwrite_subcase : bool; default=True

NULLs i_to_subcase before copying i_from_subcase

Returns:
subcase : Subcase()

the new subcase

create_new_subcase(self, isubcase)[source]

Method create_new_subcase:

Parameters:
isubcase : int

the subcase ID

Returns:
subcase : Subcase()

the new subcase

Warning

be careful you dont add data to the global subcase after running this…is this True???

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

delete_subcase(self, isubcase)[source]

Deletes a subcase.

Parameters:
isubcase : int

the Subcase to delete

export_to_hdf5(self, hdf5_file, model, encoding)[source]

exports the case control deck section to an hdf5 file

finish_subcases(self)[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(self)[source]

Gets the list of subcases that aren’t the global subcase ID

get_op2_data(self)[source]

Gets the relevant op2 parameters required for a given subcase

Todo

not done…

get_subcase_list(self)[source]

Gets the list of subcases including the global subcase ID (0)

get_subcase_parameter(self, isubcase, param_name, obj=False)[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:
isubcase : int

the subcase ID to check

param_name : str

the parameter name to look for

obj : bool; default=False

should the object be returned

has_parameter(self, isubcase, *param_names)[source]

Checks to see if a parameter (e.g. STRESS) is defined in a certain subcase ID.

Parameters:
isubcase : int

the subcase ID to check

param_names : List[str]

the parameter name to look for

has_subcase(self, isubcase)[source]

Checks to see if a subcase exists.

Parameters:
isubcase : int

the subcase ID

Returns:
val : bool

does_subcase_exist (type = bool)

load_hdf5_file(self, hdf5_file, encoding)[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(self)[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(self, isubcase, sol)[source]

sol = STATICS, FLUTTER, MODAL, etc.

Parameters:
isubcase : int

the subcase ID to update

sol : str

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(self, write_begin_bulk=None)[source]
pyNastran.bdf.case_control_deck.integer(str_value, line)[source]

casts the value as an integer

pyNastran.bdf.case_control_deck.split_equal_space(line, word, example)[source]

Splits a case insensative line by an

reads:
  • ‘SUBCASE = 5’
  • ‘SUBCASE 5’
pyNastran.bdf.case_control_deck.verify_card(key, value, options, line)[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(self, key, value, options, param_type)[source]
allowed_param_types = ['SET-type', 'CSV-type', 'SUBCASE-type', 'KEY-type', 'STRESS-type', 'STRING-type', 'OBJ-type']
export_to_hdf5(self, hdf5_file, encoding)[source]
finish_subcase(self)[source]

Removes the subcase parameter from the subcase to avoid printing it in a funny spot

get_op2_data(self, sol, solmap_to_value)[source]
get_parameter(self, param_name, msg='', obj=False)[source]

Gets the [value, options] for a subcase.

Parameters:
param_name : str

the case control parameters to get

obj : bool; default=False

should the object be returned

Returns:
value : varies

the value of the parameter ‘ALL’ in STRESS(PLOT,PRINT) = ALL

options : List[varies]

the values in parentheses [‘PLOT’, ‘PRINT’] in STRESS(PLOT,PRINT) = ALL

has_parameter(self, *param_names)[source]

Checks to see if one or more parameter names are in the subcase.

Parameters:
param_names : str; List[str]

the case control parameters to check for

Returns:
exists : List[bool]

do the parameters exist

load_hdf5_file(self, hdf5_file, encoding)[source]
print_param(self, key, param)[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(self, lst)[source]

Does a “smart” sort on the keys such that SET cards increment in numerical order. Also puts the sets first.

Parameters:
lst : List[str]

the list of subcase list objects (list_a)

Returns:
list_b : List[str]

the sorted version of list_a

suppress_output(self, suppress_to='PLOT')[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(self, key, value, options, param_type)[source]
write_subcase(self, subcase0)[source]

Internal method to print a subcase

Parameters:
subcase0 : Subcase()

the global Subcase object

Returns:
msg : str

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, unused_value)[source]

Gets the device code of a given set of options and value

Parameters:
options : list[int/float/str]

the options for a parameter

unused_value : int/float/str

the value of the parameter

Returns:
device_code : int

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, unused_value)[source]

Gets the format code that will be used by the op2 based on the options.

Parameters:
options : list[int/float/str]

the options for a parameter

unused_value : int/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:
options : List[int/str]

the options for a parameter

unused_value : int; str

the value of the parameter

pyNastran.bdf.subcase.get_stress_code(key, options, unused_value)[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:
options : list[int/float/str]

the options for a parameter

value : int/float/str

the value of the parameter

Returns:
table_code : int

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_name : str

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:
fields : List[int/float/str/None]

all the fields in the BDF card (no trailing Nones)

size : int; default=8

the size of the field (8/16)

is_double : bool; 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:
card : str

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, value2)[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)[source]

Prints a nastran-style card with 8-character width fields.

Parameters:
fields : List[int/float/str/None]

all the fields in the BDF card (no trailing Nones)

Returns:
card : str

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 unneccessary field, print_card doesnt use it.

pyNastran.bdf.field_writer_8.print_field_8(value)[source]

Prints a 8-character width field

Parameters:
value : int/float/str

the value to print

Returns:
field : str

an 8-character string

pyNastran.bdf.field_writer_8.print_float_8(value)[source]

Prints a float in nastran 8-character width syntax using the highest precision possbile.

pyNastran.bdf.field_writer_8.print_int_card(fields)[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:
fields : List[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]

pyNastran.bdf.field_writer_8.print_int_card_blocks(fields_blocks)[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_blocks : List[int]

The fields written in “block” notation.

Returns:
msg : str

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)[source]

Prints a value in 8-character scientific notation. This is a sub-method and shouldnt typically be called

Notes

print_float_8 : a better float printing method

pyNastran.bdf.field_writer_8.set_blank_if_default(value, default)[source]

Used when setting the output data of a card to clear default values

Parameters:
value : int/float/str

the field value the may be set to None (blank) if value=default, the default value for the field

default : int/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, default)[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, default)[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, wipe_fields=True)[source]

Prints a nastran-style card with 16-character width fields.

Parameters:
fields : List[varies]

all the fields in the BDF card (no trailing Nones)

wipe_fields : bool; default=True

some cards (e.g. PBEAM) have ending fields that need to be there, others cannot have them.

Returns:
card : str

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 unneccessary field, print_card doesnt use it.

pyNastran.bdf.field_writer_16.print_field_16(value)[source]

Prints a 16-character width field

Parameters:
value : int / float / str / None

the value to print

Returns:
field : str

an 16-character string

pyNastran.bdf.field_writer_16.print_float_16(value)[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)[source]

Prints a value in 16-character scientific notation. This is a sub-method and shouldnt typically be called

See also

print_float_16 for a better method

pyNastran.bdf.field_writer_16.set_string16_blank_if_default(value, default)[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, wipe_fields=True)[source]

Prints a nastran-style card with 16-character width fields.

Parameters:
fields : List[varies]

all the fields in the BDF card (no trailing Nones)

wipe_fields : bool; default=True

some cards (e.g. PBEAM) have ending fields that need to be there, others cannot have them.

Returns:
card : str

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 unneccessary field, print_card doesnt use it.

pyNastran.bdf.field_writer_double.print_field_double(value)[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)[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
  • TransformLoadWRT
pyNastran.bdf.utils.Position(xyz, cid, model, is_cid_int=None)[source]

Gets the point in the global XYZ coordinate system.

Parameters:
xyz : (3,) ndarray

the position of the GRID in an arbitrary coordinate system

cid : int

the coordinate ID for xyz

model : BDF()

the BDF model object

is_cid_int : bool

is cid/cid_new an integer or a Coord object (deprecated)

Returns:
xyz2 : (3,) ndarray

the position of the GRID in an arbitrary coordinate system

pyNastran.bdf.utils.PositionWRT(xyz, cid, cid_new, model, is_cid_int=None)[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

cid : int

the coordinate ID for xyz

cid_new : int

the desired coordinate ID

model : BDF()

the BDF model object

is_cid_int : bool

is cid/cid_new an integer or a Coord object (deprecated)

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, is_cid_int=None)[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

cid : int

the coordinate ID for xyz

cid_new : int

the desired coordinate ID

model : BDF()

the BDF model object

is_cid_int : bool

is cid/cid_new an integer or a Coord object (deprecated)

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

pyNastran.bdf.utils.parse_patran_syntax(node_sets, pound=None)[source]

Parses Patran’s syntax for compressing nodes/elements

Parameters:
node_sets : str

the node_set to parse

pound : int / str

value : the pound value (e.g. # in 1:#, which means all)

Returns:
nodes : List[int]

the integer values

Patran has a short syntax of the form:
String Output
“1 2 3” [1, 2, 3]
“5:10” [5, 6, 7, 8, 9, 10]
“12:20:2” [12, 14, 16, 18, 20]

Examples

Example 1

>>> node_sets = "1 2 3 5:10 12:20:2"
>>> data = parse_patran_syntax(node_sets)
>>> data
data = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20]

Example 2

>>> node_sets = "1 2 3:#"
>>> data = parse_patran_syntax(node_sets, pound=10)
>>> data
data = [1, 2, 3, 5, 6, 7, 8, 9, 10]

Warning

Don’t include the n/node or e/element or any other identifier, just a string of “1 2 3 5:10 12:20:2”. Use parse_patran_syntax_dict to consider the identifier.

pyNastran.bdf.utils.parse_patran_syntax_dict(node_sets, pound_dict=None, msg='')[source]

Parses Patran’s syntax for compressing nodes/elements

Parameters:
node_sets : str

the node_set to parse

pound_dict : List[str]

key : the string value : the pound value (e.g. 1:#)

msg : str

error message; currently unused

Returns:
nodes : Dict[str] = List[int]

str : the key values : the integer values for that key

Notes

An identifier (e.g. “e”) must be used. Use parse_patran_syntax to skip the identifier.

Warning

case sensitive

Examples

Example 1

>>> node_sets = "e 1:3 n 2:6:2 Node 10:13"
>>> data = parse_patran_syntax_dict(node_sets)
>>> data = {
      'e'    : [1, 2, 3],
      'n'    : [2, 4, 6],
      'Node' : [10, 11, 12, 13],
}

Example 2

>>> node_sets = "e 1:3 n 2:6:2 Node 10:#"

# a pound character will be set to 20, but only for ‘Node’, but not # ‘n’ so define it twice if needed >>> pounds = {‘Node’ : 20} >>> data = parse_patran_syntax_dict(node_sets, pounds=pounds) >>> data = {

‘e’ : [1, 2, 3], ‘n’ : [2, 4, 6], ‘Node’ : [10, 11, 12, 13],

}

pyNastran.bdf.utils.parse_patran_syntax_dict_map(node_sets, type_map, msg='')[source]

Parses Patran’s syntax for compressing nodes/elements

Parameters:
node_sets : str

the node_set to parse

type_map : dict[key_in]
key_in : str

the name of the input string

key_out : str

the name of the out string

#pound_dict : List[str]

#key : the string #value : the pound value (e.g. 1:#)

msg : str

error message; currently unused

Returns:
nodes : Dict[str] = List[int]

str : the key values : the integer values for that key

Examples

Example 1 .. code-block:: python

# we drop the coordinate systems because we didn’t request them # (coord is not referenced) # >>> node_sets = “e 1:3 n 2:6:2 Node 10:13 N 15 coord 1:10” >>> type_map = {

‘n’ : ‘Node’, ‘Node’ : ‘Node’, ‘e’ : ‘Element’, ‘Elm’ : ‘Element’, ‘Element’ : ‘Element’,

}

Example 2 >>> data = parse_patran_syntax_dict(node_sets, type_map) >>> data = {

‘Element’ : [1, 2, 3], ‘Node’ : [2, 4, 6, 10, 11, 12, 13, 15],

}

Todo

doesn’t support pound_dict

pyNastran.bdf.utils.split_eids_along_nids(model, eids, nids)[source]

Dissassociate 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:
model : BDF()

the BDF model

eids : list/tuple

element ids to disassociate

nids : list/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, cid_new, model)[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

cid : int

the coordinate ID for xyz

cid_new : int

the desired coordinate ID

model : BDF()

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

pyNastran.bdf.utils.write_patran_syntax_dict(dict_sets)[source]

writes partran syntax

Parameters:
dict_sets : Dict[str] = List[int]

str : the key values : the integer values for that key

Returns:
node_sets : str

the node_set to parse

See parse_patran_syntax_dict for explanation of usage
write_path Module
Defines following useful methods:
  • write_include(filename, is_windows=True)
pyNastran.bdf.write_path._split_path(abspath, is_windows)[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, is_windows=None)[source]

Writes a bdf INCLUDE file line given an imported filename.

Parameters:
filename : str

the filename to write

is_windows : bool; default=None
True/False : Windows 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
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(self, fields1, fields2)[source]

helper for __eq__

comment

accesses the comment

get_field(self, n)[source]

Gets a field based on it’s field number

Parameters:
n : int

the field number

Returns:
value : int/float/str/None

the value of the field

get_stats(self)[source]

Prints out an easy to read summary of the card

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

object_methods(self, mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

print_card(self, size=8, is_double=False)[source]

prints the card in 8/16/16-double format

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

rstrip(self)[source]
update_field(self, n, value)[source]

Updates a field based on it’s field number.

Parameters:
n : int

the field number

value : int/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(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.base_card.Element[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

defines the Element class

dummy init

Pid(self)[source]

Gets the Property ID of an element

Returns:
pid : int

the Property ID

_verify_unique_node_ids(self, required_node_ids, non_required_node_ids=None)[source]
get_node_positions(self, nodes=None)[source]

returns the positions of multiple node objects

get_node_positions_no_xref(self, model, nodes=None)[source]

returns the positions of multiple node objects

pid = 0
prepare_node_ids(self, nids, allow_empty_nodes=False)[source]

Verifies all node IDs exist and that they’re integers

validate_node_ids(self, allow_empty_nodes=False)[source]
verify_unique_node_ids(self)[source]
class pyNastran.bdf.cards.base_card.Material[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Base Material Class

dummy init

Mid(self)[source]

returns the material ID of an element

Returns:
mid : int

the Material ID

TRef
cross_reference(self, model)[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(self)[source]

returns the material ID of an element

Returns:
mid : int

the Material ID

Pid(self)[source]

returns the property ID of an property

Returns:
pid : int

the Property ID

write_card_16(self, is_double=False)[source]
write_card_8(self)[source]
pyNastran.bdf.cards.base_card.break_word_by_trailing_integer(pname_fid)[source]

Splits a word that has a value that is an integer

Parameters:
pname_fid : str

the DVPRELx term (e.g., A(11), NSM(5))

Returns:
word : str

the value not in parentheses

value : int

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)[source]

Splits a word that has a value that can be A/B as well as an integer

Parameters:
pname_fid : str

the DVPRELx term; A(11), NSM(5), NSM(B)

Returns:
word : str

the value not in parentheses

value : int/str

the value in parenthese

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, 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, 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
ASET ID1 C1 ID2 C2 ID3 C3 ID4 C4
ASET 16 2 23 3516 1 4    
_finalize_hdf5(self, encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'ABCQSet'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[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(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'ABQSet1'
uncross_reference(self)[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:
ids : List[int]

the GRID/SPOINT ids

components : List[str]

the degree of freedoms to be retained (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms to be retained (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : List[str]

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : List[str]

the degree of freedoms to be free (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms to be free (e.g., ‘1’, ‘123’)

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'CSET1'
uncross_reference(self)[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:
ids : List[int]

the GRID/SPOINT ids

components : List[str]

the degree of freedoms to be fixed (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms to be omitted (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : List[str]

the degree of freedoms to be created (e.g., ‘1’, ‘123’)

comment : str; 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:
ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms to be created (e.g., ‘1’, ‘123’)

comment : str; 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:
cavities : List[int]

the RADCAV ids

comment : str; default=’‘

a comment for the card

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

get_ids(self)[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(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

add_seset(self, seset)[source]
cross_reference(self, model)[source]
ids = None

Grid or scalar point identification number. (0 < Integer < 1000000; G1 < G2)

raw_fields(self)[source]
type = 'SESET'
uncross_reference(self)[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:
sid : int

set id

ids : List[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_skin : bool; default=False

if is_skin is used; ids must be empty

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

add_set(self, set1)[source]
cross_reference_set(self, model, xref_type, msg='', allow_empty_nodes=False)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

xref_type : str

{‘Node’, ‘Point’}

allow_empty_nodes : bool; 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(self)[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(self)[source]
safe_cross_reference(self, model, xref_type, msg='', allow_empty_nodes=False)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

xref_type : str

{‘Node’}

allow_empty_nodes : bool; 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(self, set1)[source]
type = 'SET1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.bdf_sets.SET3(sid, desc, ids, comment='')[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(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

add_set(self, set3)[source]
cross_reference_set(self, model, xref_type, msg='')[source]
get_ids(self)[source]
ids = None

Identifiers of grids points, elements, points or properties. (Integer > 0)

is_element(self)[source]
is_grid(self)[source]
is_point(self)[source]
is_property(self)[source]
raw_fields(self)[source]

Gets the “raw” card without any processing as a list for printing

sid = None

Unique identification number. (Integer > 0)

symmetric_difference(self, set3)[source]
type = 'SET3'
union(self, set3)[source]
valid_descs = ['GRID', 'POINT', 'ELEMENT', 'PROP', 'RBEIN', 'RBEEX']
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]

eliminates duplicate IDs from self.IDs and sorts self.IDs

ids = None

list of IDs in the SETx

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'SuperABCQSet'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[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(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids = None

Identifiers of grids points. (Integer > 0)

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'SuperABQSet1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[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:
name : str

SNAME Set name. (One to four characters or the word ‘ZERO’ followed by the set name.)

ids : List[int]

the GRID/SPOINT ids

components : List[str]

the degree of freedoms (e.g., ‘1’, ‘123’)

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

components = None

Identifiers of grids points. (Integer > 0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'USET'
uncross_reference(self)[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:
name : str

SNAME Set name. (One to four characters or the word ‘ZERO’ followed by the set name.)

ids : List[int]

the GRID/SPOINT ids

components : str

the degree of freedoms (e.g., ‘1’, ‘123’)

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]

gets the “raw” card without any processing as a list for printing

type = 'USET1'
uncross_reference(self)[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_values : dict
key : str

the parameter name

value : float

the value

comment : str; default=’‘

a comment for the card

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'DTABLE'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.bdf_tables.RandomTable[source]

Bases: pyNastran.bdf.cards.bdf_tables.Table

type = 'TABLE??'
class pyNastran.bdf.cards.bdf_tables.TABDMP1(tid, x, y, Type='G', comment='')[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TABDMP1'
class pyNastran.bdf.cards.bdf_tables.TABLED1(tid, x, y, xaxis='LINEAR', yaxis='LINEAR', extrap=0, comment='')[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:
tid : int

table id

x : List[float]

nvalues

y : List[float]

nvalues

xaxis : str

LINEAR, LOG

yaxis : str

LINEAR, LOG

extrap : int; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

interpolate(self, x)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TABLED1'
class pyNastran.bdf.cards.bdf_tables.TABLED2(tid, x1, x, y, extrap=0, comment='')[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:
tid : int

table id

x1 : float

y = yT(x - x1)

x : List[float]

the x values

y : List[float]

the y values

extrap : int; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

interpolate(self, x)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TABLED2'
class pyNastran.bdf.cards.bdf_tables.TABLED3(tid, x1, x2, x, y, extrap=0, comment='')[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:
tid : int

table id

x1 : float

y = yT(x - x1)

x2 : ???

???

x : List[float]

the x values

y : List[float]

the y values

extrap : int; default=0
Extrapolation method:

0 : linear 1 : constant

Note

this is NX specific

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TABLED3'
class pyNastran.bdf.cards.bdf_tables.TABLED4(tid, x1, x2, x3, x4, a, comment='')[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

interpolate(self, x)[source]

y = sum_{i=0}^N Ai * ((x-x1)/x2))^i

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
tid : int

Table ID

x, y : List[float]

table values

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TABLEH1'
class pyNastran.bdf.cards.bdf_tables.TABLEHT(tid, 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:
tid : int

Table ID

x, y : List[float]

table values

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
tid : int

Table ID

Type : int; 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, y : List[float]

table values

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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.RandomTable

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TABRND1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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.RandomTable

Gust Power Spectral Density

Defines the power spectral density (PSD) of a gust for aeroelastic response analysis.

Creates a TABRNDG card

Parameters:
tid : int

table id

Type : int

PSD type 1 : von Karman 2 : Dryden

LU : float

Scale of turbulence divided by velocity (units of time)

WG : float

Root-mean-square gust velocity

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.build_thru(packs, max_dv=None, nthru=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:
packs : List[pack]
pack : List[int first, int last, int delta]

the first, last, delta id values

max_dv : int; default=None -> no limit

defines the max allowable delta between two values

nthru : int; default=None

don’t use this; it will crash

Returns:
value : varies

the value of the field

pyNastran.bdf.cards.collpase_card.build_thru_float(packs, max_dv=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:
packs : List[pack]

pack : List[first, last, delta] first, last, delta are integers

max_dv : int; 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:
packs : List[pack]
pack : List[id_low, id_high, delta_id]

a list representation of the min/max/delta id values

max_dv : int; default=1

maximum allowed delta between two values

thru_split : int; 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:
singles : List[int]

the list of singles

doubles : List[pack]
pack : List[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:
fields : List[int]

the values to collapse

thru_split : int; 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:
singles : List[int]

the list of singles

doubles : List[pack]
pack : List[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=None)[source]

Collapses fields into a set of packs

Parameters:
fields : list[int, int, …]

the list of integers to compress

Returns:
packs = list[pack]

pack = list[int first_val, int last_val, int_by]

pyNastran.bdf.cards.collpase_card.collapse_thru_by(fields, get_packs=False)[source]
Parameters:
fields : List[int]

the list of fields to collapse

get_packs : bool; 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)[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_list : List[int]

list of values to pack

Returns:
packs : List[pack]
pack : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

TODO: xref

raw_fields(self)[source]
safe_cross_reference(self, model)[source]

TODO: xref

type = 'GMSPC'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.constraints.MPC(conid, nodes, components, coefficients, comment='')[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:
conid : int

Case Control MPC id

nodes : List[int]

GRID/SPOINT ids

components : List[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

coefficients : List[float]

the scaling coefficients

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds an MPC card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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)

constraints
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

enforced
gids
gids_ref
node_ids
nodes = None

Identification number of grid or scalar point. (Integer > 0)

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

object_methods(self, mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'MPC'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

see BaseCard.write_card``

write_card_16(self, is_double=False)[source]
write_card_8(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids
mpc_ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'MPCADD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.constraints.SESUP(nodes, Cs, comment='')[source]

Bases: pyNastran.bdf.cards.constraints.SUPORT

classmethod _init_from_empty()[source]
type = 'SESUP'
class pyNastran.bdf.cards.constraints.SPC(conid, nodes, components, enforced, comment='')[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:
conid : int

constraint id

nodes : List[int]

GRID/SPOINT ids

components : List[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforced : List[float]

the constrained value for the given node (typically 0.0)

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

constraints
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

gids
gids_ref
node_ids
object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

object_methods(self, mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'SPC'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.constraints.SPC1(conid, components, nodes, comment='')[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:
conid : int

constraint id

components : str

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

nodes : List[int]

GRID/SPOINT ids

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

constraints
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'SPC1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
spc_ids
type = 'SPCADD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
conid : int

Identification number of a single-point constraint set.

ringax : int

Ring identification number. See RINGAX entry.

hid : int

Harmonic identification number. (Integer >= 0)

component : int

Component identification number. (Any unique combination of the Integers 1 through 6.)

enforced : float

Enforced displacement value

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a SPCAX card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, model)[source]
enforced = None

Enforced displacement value

hid = None

Harmonic identification number. (Integer >= 0)

raw_fields(self)[source]
ringax = None

Ring identification number. See RINGAX entry.

safe_cross_reference(self, model)[source]
type = 'SPCAX'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

constraints
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'SPCOFF'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

constraints
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'SPCOFF1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
nodes : List[int]

the nodes to release

Cs : List[str]

compoents to support at each node

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'SUPORT'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
conid : int

Case Control SUPORT id

nodes : List[int]

the nodes to release

Cs : List[str]

compoents to support at each node

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

add_suport1_to_set(self, suport1)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'SUPORT1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
class pyNastran.bdf.cards.contact.BCONP(contact_id, slave, master, sfac, fric_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  
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a BCONP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'BCONP'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
crid : int

CRID Contact region ID.

offset : float; default=None

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

surf : str; default=’TOP’

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

Type : str; 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_point : int; 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.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
surf = None

SURF Indicates the contact side. See Remark 1. (Character = “TOP” or “BOT”; Default = “TOP”)

type = 'BCRPARA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
type = 'BCTADD'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
csid : int

Contact set ID. Parameters defined in this command apply to contact set CSID defined by a BCTSET entry. (Integer > 0)

params : dict[key]

the optional parameters

comment : str; default=’‘

a comment for the card

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
type = 'BCTPARA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'BLSEG'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

eids = None

Element identification numbers of shell elements. (Integer > 0)

raw_fields(self)[source]
sid = None

Set identification number. (Unique Integer > 0)

type = 'BSURF'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
type = 'BSURFS'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

Type = 'C'
raw_fields(self)[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:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

Type = 'R'
int_type = 0
raw_fields(self)[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:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

Type = 'S'
raw_fields(self)[source]
type = 'CORD1S'
class pyNastran.bdf.cards.coordinate_systems.CORD2C(cid, origin, zaxis, xzplane, rid=0, 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:
cid : int

coordinate system id

origin : List[float, float, float]

the origin of the coordinate system

zaxis : List[float, float, float]

the z-axis of the coordinate system

xzplane : List[float, float, float]

a point on the xz plane

rid : int; default=0

the referenced coordinate system that defines the system the vectors

comment : str; default=’‘

a comment for the card

Type = 'C'
raw_fields(self)[source]
type = 'CORD2C'
class pyNastran.bdf.cards.coordinate_systems.CORD2R(cid, origin, zaxis, xzplane, rid=0, comment='')[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:
cid : int

coordinate system id

origin : List[float, float, float]

the origin of the coordinate system

zaxis : List[float, float, float]

the z-axis of the coordinate system

xzplane : List[float, float, float]

a point on the xz plane

rid : int; default=0

the referenced coordinate system that defines the system the vectors

comment : str; default=’‘

a comment for the card

Type = 'R'
raw_fields(self)[source]
type = 'CORD2R'
class pyNastran.bdf.cards.coordinate_systems.CORD2S(cid, origin, zaxis, xzplane, rid=0, 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:
cid : int

coordinate system id

origin : List[float, float, float]

the origin of the coordinate system

zaxis : List[float, float, float]

the z-axis of the coordinate system

xzplane : List[float, float, float]

a point on the xz plane

rid : int; default=0

the referenced coordinate system that defines the system the vectors

comment : str; default=’‘

a comment for the card

Type = 'S'
raw_fields(self)[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:
cid : int

coordinate system id

method_es : str

flag for coordinate system type E : Eularian? S : Space?

method_int : int

0-1000 E1000 = ‘E’ + 1000

form : str

EQN

thetas : List[int]

???

rid : int

the referenced coordinate system that defines the system the vectors???

comment : str; default=’‘

a comment for the card

Rid(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CORD3G card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

coord3g_transform_to_global(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
rotation_x(self, ct, st)[source]
rotation_y(self, ct, st)[source]
rotation_z(self, ct, st)[source]
type = 'CORD3G'
uncross_reference(self)[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(self)[source]

Gets the coordinate ID

beta(self)[source]

Gets the 3 x 3 transformation

\[[\lambda] = [B_{ij}]\]
beta_n(self, n)[source]

Gets the 3n x 3n transformation

\[[\lambda] = [B_{ij}]\]
global_to_local

Gets the 3 x 3 global to local transform

is_resolved = None

have all the transformation matricies been determined

local_to_global

Gets the 3 x 3 local to global transform

move_origin(self, xyz, maintain_rid=False)[source]

Move the coordinate system to a new origin while maintaining the orientation

Parameters:
xyz : the new origin point to move the coordinate to in

the global coordinate system

maintain_rid : bool; default=False

set the rid to cid=0 if False

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

resolve(self)[source]
setup(self)[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(self)[source]

Sets up a global CORD2R, CORD2S, CORD2C

setup_no_xref(self, model)[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 = '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:
cid : int

the coordinate id

g1 : int

grid point 1

g2 : int

grid point 2

g3 : int

grid point 3

comment : str; default=’‘

a comment for the card

G1(self)[source]
G2(self)[source]
G3(self)[source]
Rid(self)[source]

Gets the reference coordinate system self.rid

classmethod add_card(card, icard=0, comment='')[source]
Parameters:
card : BDF()

a BDFCard object

icard : int

the coordinate location on the line (there are possibly 2 coordinates on 1 card)

comment : str; default=’‘

a comment for the card

cid = None

the coordinate ID

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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

node_ids

Gets the integers for the node [g1,g2,g3]

rid = 0
setup(self)[source]

Finds the position of the nodes used define the coordinate system and sets the ijk vectors

to_cord2x(self, model, rid=0)[source]

Converts a coordinate system from a CORD1x to a CORD2x

Parameters:
model : BDF()

a BDF model

rid : int; default=0

The relative coordinate system

uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.coordinate_systems.Cord2x(cid, origin, zaxis, xzplane, rid=0, comment='')[source]

Bases: pyNastran.bdf.cards.coordinate_systems.Coord

Parent class for:
  • CORD2R
  • CORD2C
  • CORD2S

This method emulates the CORD2x card.

Parameters:
cid : int

coord id

origin : ndarray/None

the origin None -> [0., 0., 0.]

zaxis : ndarray/None

a point on the z-axis None -> [0., 0., 1.]

xzplane : ndarray/None

a point on the xz-plane None -> [1., 0., 0.]

rid : int; default=0

reference coord id

.. note :: no type checking
Rid(self)[source]

Gets the reference coordinate system self.rid

classmethod _add(cid, origin, zaxis, xzplane, rid=0, comment='')[source]
_finish_setup(self)[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:
cid : int

the new coordinate system id

rid : int; 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:
cid : int

the new coordinate system id

origin : (3,) ndarray

defines the location of the origin in the global coordinate frame

rid : int; 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

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]

Removes cross-reference links

update(self, unused_nid_map, cid_map)[source]
maps = {
‘node’ : nid_map, ‘coord’ : cid_map,

}

update_e123(self, maintain_rid=False)[source]

If you move the coordinate frame, e1, e2, e3 does not update. This updates the coordinate system.

Parameters:
maintain_rid : bool; default=False

set the rid to cid=0 if False

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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(self, xyz_global)[source]
static xyz_to_coord(p)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
setup(self)[source]
type = 'GMCORD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, 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(self, 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._fix_xyz_shape(xyz, name='xyz')[source]

Checks the shape of a grid point location and fixes it if possible

Parameters:
xyz : (N, 3) float ndarray

the xyz locations

name : str; 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:
model : BDF()

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)

cid : int; default=0

the reference coordinate system

axis : int; 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???

cids : List[int]

the created coordinate system ids

origins : List[(ox, oy, oz)]

the origin of each coordinate system

cid_to_inids : Dict[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, cord2_type, cid, origin, rid=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:
model : BDF()

a BDF object

cord2_type : str

‘CORD2R’, ‘CORD2C’, ‘CORD2S’

cid : int

the new coordinate system id

origin : (3,) ndarray

defines the location of the origin in the global coordinate frame

rid : int; 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)

add : bool; default=True

adds the coordinate system to the model

Returns:
coord : CORD2R, 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:
model : BDF()

a BDF object

cord2_type : str

‘CORD2R’, ‘CORD2C’, ‘CORD2S’

cid : int

the new coordinate system id

origin : (3,) ndarray

defines the location of the origin in the global coordinate frame

rid : int; 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

add : bool; default=True

adds the coordinate system to the model

Returns:
coord : CORD2R, CORD2C, CORD2S

the coordinate system

pyNastran.bdf.cards.coordinate_systems.define_spherical_cutting_plane(model, origin, rid, cids, thetas, phis)[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:
model : BDF()

a BDF object

origin : (3, ) float ndarray

defines the location of the origin in the global coordinate frame

rid : int

the new spherical reference coordinate system id

cids : List[int, …]

list of new coordinate system ids

thetas : List[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:
model : BDF()

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_transform : Dict[cp cid] -> inids

a mapping of the CP coord to the node indices

icd_transform : Dict[cd cid] -> inids

a mapping of the CD coord to the node indices

cids : List[int]

the created coordinate system ids

Returns:
#origins : List[(ox, oy, oz)]

#the origin of each coordinate system

cid_to_inids : Dict[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_check0 : List[int]

the Cps to check

icp_transform : dict{int cp

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_place : bool, default=False

If true the original xyz_cp is modified, otherwise a new one is created.

do_checks : bool; 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_checked : List[int]

the Cps that were checked

cps_to_check : List[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, matrix_form, tin, tout, nrows, ncols, 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.            
_get_complex_fields(self, func)[source]
_get_real_fields(self, func)[source]
classmethod _init_from_empty()[source]
_properties = ['shape', 'ifo', 'is_real', 'is_complex', 'is_polar', 'matrix_type', 'tin_dtype', 'tout_dtype']
_read_complex(self, card)[source]

reads a complex DMI column

_read_real(self, card)[source]

reads a real DMI column

_write_card(self, func)[source]

writes the card in single/double precision

classmethod add_card(card, comment='')[source]

Adds a DMI card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

classmethod export_to_hdf5(h5_file, model, encoding)[source]
finalize(self)[source]

converts the lists into numpy arrays

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’)

is_complex

real vs. complex attribute

is_polar
Used by:
  • DMIG
  • DMIJ
  • DMIJI
  • DMIK
Not used by:
  • DMI
  • DMIAX
  • DMIG, UACCEL
  • DMIGOUT
  • DMIGROT
is_real

real vs. complex attribute

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(self)[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

shape

gets the matrix shape

type = 'DMI'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self)[source]

writes the card in single precision

write_card_8(self)[source]

writes the card in single precision

write_card_double(self)[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:
name : str

the name of the matrix

matrix_form : int

matrix shape 1=Square 2=General Rectangular 6=Symmetric

tin : int

matrix input precision 1=Real, Single Precision 3=Complex, Single Precision

tout : int

matrix output precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

GCNj : List[(node, dof, harmonic_number)]???

the jnode, jDOFs

GCNi : List[(node, dof, harmonic_number)]???

the inode, iDOFs

Real : List[float]???

The real values

Complex : List[float]???; default=None

The complex values (if the matrix is complex)

comment : str; default=’‘

a comment for the card

_write_card(self, func)[source]

writes the card

classmethod add_card(card, comment='')[source]

Adds a NastranMatrix (DMIAX) card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

is_complex

is the matrix complex

is_polar

is the matrix polar (vs real/imag)?

is_real

is the matrix real?

matrix_form = None

ifo/4-Lower Triangular; 5=Upper Triangular; 6=Symmetric; 8=Identity (m=nRows, n=m)

matrix_type

gets the matrix type

raw_fields(self)[source]
tin_dtype

gets the input dtype

tout = None

0-Set by cell precision

tout_dtype

gets the output dtype

type = 'DMIAX'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self)[source]

writes the card in small large format

write_card_8(self)[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:
name : str

the name of the matrix

ifo : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]

the [jnode, jDOFs]

GCi : List[(node, dof)]

the inode, iDOFs

Real : List[float]

The real values

Complex : List[float]; default=None

The complex values (if the matrix is complex)

comment : str; 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(self, func)[source]

writes the card

classmethod add_card(card, comment='')[source]

Adds a DMIG,UACCEL card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
type = 'DMIG'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self)[source]

writes the card in small large format

write_card_8(self)[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:
name : str

the name of the matrix

matrix_form : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]???

the jnode, jDOFs

GCi : List[(node, dof)]???

the inode, iDOFs

Real : List[float]???

The real values

Complex : List[float]???; default=None

The complex values (if the matrix is complex)

comment : str; 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, ifo, 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 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:
name : str

the name of the matrix

ifo : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]???

the jnode, jDOFs

GCi : List[(node, dof)]???

the inode, iDOFs

Real : List[float]???

The real values

Complex : List[float]???; default=None

The complex values (if the matrix is complex)

comment : str; 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:
name : str

the name of the matrix

ifo : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]

the jnode, jDOFs

GCi : List[(node, dof)]

the inode, iDOFs

Real : List[float]

The real values

Complex : List[float]; default=None

The complex values (if the matrix is complex)

comment : str; 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:
name : str

UNITS

fields : List[varies]

the fields

comment : str; default=’‘

a comment for the card

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'DTI'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
name : str

the name of the matrix

matrix_form : int

matrix shape 4=Lower Triangular 5=Upper Triangular 6=Symmetric 8=Identity (m=nRows, n=m)

tin : int

matrix input precision 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

tout : int

matrix output precision 0=same as tin 1=Real, Single Precision 2=Real, Double Precision 3=Complex, Single Precision 4=Complex, Double Precision

polar : int; default=0

Input format of Ai, Bi Integer=blank or 0 indicates real, imaginary format Integer > 0 indicates amplitude, phase format

ncols : int

???

GCj : List[(node, dof)]

the jnode, jDOFs

GCi : List[(node, dof)]

the inode, iDOFs

Real : List[float]

The real values

Complex : List[float]; default=None

The complex values (if the matrix is complex)

comment : str; default=’‘

a comment for the card

_finalize_hdf5(self, encoding)[source]

hdf5 helper function

classmethod add_card(card, comment='')[source]

Adds a NastranMatrix (DMIG, DMIJ, DMIK, DMIJI) card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

fill_in_default_components(self, model)[source]
finalize(self)[source]

converts the lists into numpy arrays

get_matrix(self, is_sparse=False, apply_symmetry=True)[source]

Builds the Matrix

Parameters:
is_sparse : bool; default=False

should the matrix be returned as a sparse matrix. Slower for dense matrices.

apply_symmetry : bool; default=True

If the matrix is symmetric (ifo=6), returns a symmetric matrix. Supported as there are symmetric matrix routines.

Returns:
M : numpy.ndarray or scipy.coomatrix

the matrix

rows : dict[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 ..

is_complex

real vs. complex attribute

is_polar
Used by:
  • DMIG
  • DMIJ
  • DMIJI
  • DMIK
Not used by:
  • DMI
  • DMIAX
  • DMIG, UACCEL
  • DMIGOUT
  • DMIGROT
is_real

real vs. complex attribute

matrix_form = None

4-Lower Triangular; 5=Upper Triangular; 6=Symmetric; 8=Identity (m=nRows, n=m)

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.)

shape

gets the matrix shape

tin_dtype

gets the input dtype

tout = None

0-Set by cell precision

tout_dtype

gets the output dtype

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

pyNastran.bdf.cards.dmig._export_dmig_to_hdf5(h5_file, model, dict_obj, encoding)[source]

export dmigs, dmijs, dmijis, dmiks, dmis

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(self, nrows, ncols)[source]

helper method for get_matrix

pyNastran.bdf.cards.dmig._set_polar(polar)[source]
pyNastran.bdf.cards.dmig.get_matrix(self, is_sparse=False, apply_symmetry=True)[source]

Builds the Matrix

Parameters:
is_sparse : bool

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:
M : ndarray

the matrix

rows : Dict[(nid, nid)] = float

dictionary of keys=rowID, values=(Grid,Component) for the matrix

cols : Dict[](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(GCi, GCj, ifo)[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 (not implemented)
  • FREQ4
  • FREQ5 (not implemented)
  • 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:
sid : int

DELAY id that is referenced by a TLOADx, RLOADx or ACSRCE card

nodes : List[int]

list of nodes that see the delay len(nodes) = 1 or 2

components : List[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

delays : List[float]

Time delay (tau) for designated point Pi and component Ci len(nodes) = len(delays)

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_id1', 'node_id2', 'node_ids']
add(self, delay)[source]
classmethod add_card(card, comment='')[source]

Adds a DELAY card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

delays = None

Time delay (tau) for designated point Pi and component Ci. (Real)

get_delay_at_freq(self, freq)[source]
node_id1
node_id2
node_ids
nodes = None

Grid, extra, or scalar point identification number. (Integer > 0)

raw_fields(self)[source]
sid = None

Identification number of DELAY entry. (Integer > 0)

type = 'DELAY'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

DPHASE id that is referenced by a RLOADx or ACSRCE card

nodes : List[int]

list of nodes that see the delay len(nodes) = 1 or 2

components : List[int]

the components corresponding to the nodes that see the delay len(nodes) = len(components)

phase_leads : List[float]

Phase lead θ in degrees. len(nodes) = len(delays)

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_id1', 'node_id2', 'node_ids']
add(self, dphase)[source]
classmethod add_card(card, comment='')[source]

Adds a DPHASE card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_dphase_at_freq(self, freq)[source]
node_id1
node_id2
node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'DPHASE'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

set id referenced by case control FREQUENCY

freqs : List[float]

the frequencies for a FREQx object

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

add_frequencies(self, 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:
freqs : List[float] / (nfreq, ) float ndarray

the frequencies for a FREQx object

add_frequency_object(self, freq)[source]
Parameters:freq – a FREQx object

See also

addFrequencies()

get_freqs(self)[source]
raw_fields(self)[source]
type = 'FREQ'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

set id referenced by case control FREQUENCY

f1 : float

first frequency

df : float

frequency increment

ndf : int

number of frequency increments

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'FREQ1'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

set id referenced by case control FREQUENCY

f1 : float

first frequency

f2 : float

last frequency

nf : int; default=1

number of logorithmic intervals

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'FREQ2'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

set id referenced by case control FREQUENCY

f1 : float; default=0.0???

Lower bound of frequency range in cycles per unit time.

f2 : float; default=1E20???

Upper bound of frequency range in cycles per unit time.

freq_type : str; default=LINEAR

valid_types={LINEAR, LOG}

nef : int; default=10

???

cluster : float; default=1.0

???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'FREQ3'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

set id referenced by case control FREQUENCY

f1 : float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2 : float; default=1E20

Upper bound of frequency range in cycles per unit time.

nfm : int; default=3

Number of evenly spaced frequencies per ‘spread’ mode.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'FREQ4'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

set id referenced by case control FREQUENCY

f1 : float; default=0.0

Lower bound of frequency range in cycles per unit time.

f2 : float; default=1e20

Upper bound of frequency range in cycles per unit time.

fractions : List[float]

Fractions of the natural frequencies in the range F1 to F2.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'FREQ5'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

NLPARM id; points to the Case Control NLPARM

ninc :int; 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.

dt : float; default=0.0

???

kmethod : str; default=’AUTO’

???

kstep : int; default=5

???

max_iter : int; default=25

???

conv : str; default=’PW’

???

int_out : str; default=’NO’

???

eps_u : float; default=0.01

???

eps_p : float; default=0.01

???

eps_w : float; default=0.01

???

max_div : int; default=3

???

max_qn; default=None -> varies

???

max_ls : int; default=4

???

fstress : float; default=0.2

???

ls_tol : float; default=0.5

???

max_bisect : int; default=5

???

max_r : float; default=20.

???

rtol_b : float; default=20.

???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'NLPARM'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'NLPCI'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Set identifier for all rotors. Must be selected in the case control deck by RMETHOD = SID.

rstart : float

Starting value of reference rotor speed.

rstart : float

Step-size of reference rotor speed. See Remark 3. (Real ≠ 0.0)

numstep : int

Number of steps for reference rotor speed including RSTART.

rids : List[int]

Identification number of rotor i. (Integer > 0 with RID(i+1) > RIDi; Default = i)

rsets : List[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)

rspeeds : List[int/float, …, int/float]

float : rotor speeds int : TABLEDi

rcords : List[int]

???

w3s : List[float]

???

w4s : List[float]

???

rforces : List[int]

???

brgsets : List[int]

???

refsys : str; default=’ROT’
Reference system

‘FIX’ analysis is performed in the fixed reference system. ‘ROT’ analysis is performed in the rotational reference system.

cmout : float; default=0.0

???

runit : str; default==’RPM’

???

funit : str; default==’RPM’,

???

zstein : str; default==’NO’

???

orbeps : float; default=1.e-6

???

roprt : int; default=0

???

sync : int; default=1

???

etype : int; default=1

???

eorder : float; default=1.0

???

threshold : float; default=0.02

???

maxiter : int; default=10

???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
type = 'ROTORD'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
type = 'ROTORG'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
type = 'TF'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Case Control IC id

nodes : int / List[int]

the nodes to which apply the initial conditions

components : int / List[int]

the DOFs to which apply the initial conditions

u0 : float / List[float]

Initial displacement.

v0 : float / List[float]

Initial velocity.

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
add(self, tic)[source]
classmethod add_card(card, comment='')[source]

Adds a TIC card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'TIC'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the time step id

N : List[int/None]

List of number of time steps for each step section.

DT : List[float/None]

List of time steps for each step section.

NO : List[int/None]

List of step frequency for each step section. Every N steps, results will be printed.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TSTEP'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the time step id

tend : List[float/None]

???

ninc : List[int/None]

???

nout : List[int/str/None]

???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TSTEP1'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.

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  

method = None for NX, but apparently TSTEP as well, which is not in the QRG

Creates a TSTEPNL card

Parameters:
sid : int

the time step id

ndt : int

???

dt : float

???

no : int

???

method : str

??? MSC = {AUTO, ITER, ADAPT, SEMI, FNT, PFNT} NX = {None, TSTEP}

kstep : ???; default=None

???

max_iter : int; default=10

???

conv : str; default=’PW’

??? PW, W, U

eps_u : float; default=1.e-2

???

eps_p : float; default=1.e-3

???

eps_w : float; default=1.e-6

???

max_div : int; default=2

???

max_qn : int; default=10

???

max_ls : int; default=2

???

fstress : float; default=0.2

???

max_bisect : int; default=5

???

adjust : int; default=5

???

mstep : int; default=None

???

rb : float; default=0.6

???

max_r = float; default=32.

???

utol = float; default=0.1

???

rtol_b = float; default=20.

???

min_iter : int; default=None

not listed in all QRGs

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

allowed_methods = ['AUTO', 'ITER', 'ADAPT', 'SEMI', 'FNT', 'PFNT', 'TSTEP']
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'TSTEPNL'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

expand_card Module
defines:
  • expand_thru
  • expand_thru_by
pyNastran.bdf.cards.expand_card.expand_thru(fields, set_fields=True, sort_fields=False)[source]

Expands a list of values of the form [1,5,THRU,9,13] to be [1,5,6,7,8,9,13]

Parameters:
fields : List[int/str]

the fields to expand

set_fields : bool; 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_fields : bool; default=False

Should the fields be sorted at the end?

pyNastran.bdf.cards.expand_card.expand_thru_by(fields, set_fields=True, sort_fields=True, require_int=True, allow_blanks=False)[source]

Expands a list of values of the form [1,5,THRU,9,BY,2,13] to be [1,5,7,9,13]

Parameters:
fields : List[int/str]

the fields to expand

set_fields : bool; 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_fields : bool; default=False

Should the fields be sorted at the end?

require_int : bool; default=True

True : all data must be integers False : floats are allowed (e.g., DDVAL)

allow_blanks : bool; 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

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

Mid(self)[source]

returns the material ID of an element

Returns:
mid : int

the Material ID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CREEP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'CREEP'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

classmethod add_card(card, comment='')[source]

Adds an EQUIV card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

mid = None

Identification number of a MAT1, MAT2, or MAT9 entry.

raw_fields(self)[source]
type = 'EQUIV'
class pyNastran.bdf.cards.materials.HyperelasticMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Hyperelastic Material Class

class pyNastran.bdf.cards.materials.IsotropicMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Isotropic Material Class

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:
mid : int

material id

E : float / None

Young’s modulus

G : float / None

Shear modulus

nu : float / None

Poisson’s ratio

rho : float; default=0.

density

a : float; default=0.

coefficient of thermal expansion

tref : float; default=0.

reference temperature

ge : float; default=0.

damping coefficient

St / Sc / Ss : float; default=0.

tensile / compression / shear allowable

mcsid : int; default=0

material coordinate system id used by PARAM,CURV

comment : str; default=’‘

a comment for the card

If E, G, or nu is None (only 1), it will be calculated
D(self)[source]
E(self)[source]
E_stress(self, stress)[source]
E_temperature(self, temperature)[source]
G(self)[source]
Mats1(self)[source]
Matt1(self)[source]
Nu(self)[source]
Rho(self)[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

compliance(self)[source]

per AeroComBAT

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the materials in a vectorized way

getG_default(self)[source]
get_density(self)[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(self)[source]
repr_fields(self)[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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
mid : int

material id

bulk : float; default=None

Bulk modulus

rho : float; default=None

Density

c : float; default=None

Speed of sound

ge : float; default=0.

Damping

gamma : float; default=None

NX : ratio of imaginary bulk modulus to real bulk modulus; default=0.0 MSC : normalized admittance coefficient for porous material

table_bulk : int; default=None

TABLEDx entry defining bulk modulus vs. frequency None for MSC Nastran

table_rho : int; default=None

TABLEDx entry defining rho vs. frequency None for MSC Nastran

table_ge : int; default=None

TABLEDx entry defining ge vs. frequency None for MSC Nastran

table_gamma : int; default=None

TABLEDx entry defining gamma vs. frequency None for MSC Nastran

comment : str; default=’‘

a comment for the card

Rho(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT10 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

dummy cross reference method for a Material

get_density(self)[source]
mp_name_map = {'RHO': 'rho'}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT10'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
classmethod _init_from_empty()[source]
_properties = ['_field_map', 'mp_name_map']
_validate_input(self)[source]
classmethod add_card(card, comment='')[source]

Adds a MAT11 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

mp_name_map = {'E1': 'e1', 'E2': 'e2', 'E3': 'e3'}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT11'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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              
Dplate(self)[source]

Eq 9.1.6 in Finite Element Method using Matlab

Dsolid(self)[source]

Eq 9.4.7 in Finite Element Method using Matlab

Rho(self)[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the materials in a vectorized way

get_density(self)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT2'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
Rho(self)[source]
classmethod add_card(card, comment='')[source]

Adds a MAT3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the elements in a vectorized way

get_density(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.

classmethod _init_from_empty()[source]
_validate_input(self)[source]
classmethod add_card(card, comment='')[source]

Adds a MAT3D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT3D'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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          
Rho(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT4 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_density(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MAT4'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
mid : int

material id

kxx : float; default==0.

???

kxy : float; default==0.

???

kxz : float; default==0.

???

kyy : float; default==0.

???

kyz : float; default==0.

???

kzz : float; default==0.

???

cp : float; default==0.

???

rho : float; default==1.

???

hgen : float; default=1.

???

comment : str; default=’‘

a comment for the card

K(self)[source]

thermal conductivity matrix

Rho(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MAT5 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_density(self)[source]
mid = None

Thermal conductivity (assumed default=0.0)

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT5'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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          
D(self)[source]

Todo

what about G1z and G2z

E11(self)[source]
E22(self)[source]
G12(self)[source]
Matt8(self)[source]
Nu12(self)[source]
Rho(self)[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT8 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, mids)[source]

exports the materials in a vectorized way

get_density(self)[source]
mp_name_map = {'A1': 'a1', 'A2': 'a2', 'E1': 'e11', 'E2': 'e22', 'G12': 'g12', 'G1Z': 'g1z', 'NU12': 'nu12', 'RHO': 'rho'}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT8'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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  
D(self)[source]
Rho(self)[source]
_properties = ['_field_map', 'mp_name_map']
classmethod add_card(card, comment='')[source]

Adds a MAT9 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MAT9'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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        
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATG card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MATG'
uncross_reference(self)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.materials.MATHE(mid, model, bulk, rho, texp, mus, alphas, betas, mooney, sussbat, aboyce, 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

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATHE card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MATHE'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

Rho(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATHP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'MATHP'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : [varies, …]

the fields that define the card

type = 'NXSTRAT'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.materials.OrthotropicMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Orthotropic Material Class

class pyNastran.bdf.cards.materials.ThermalMaterial[source]

Bases: pyNastran.bdf.cards.base_card.Material

Thermal Material Class

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(self, strain)[source]

Gets E (Young’s Modulus) for a given strain.

Parameters:
strain : float / None

the strain (None -> linear E value)

Returns:
E : float

Young’s Modulus

Hf(self)[source]
Tid(self)[source]
Type = None

Type of material nonlinearity. (‘NLELAST’ for nonlinear elastic or ‘PLASTIC’ for elastoplastic.)

Yf(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATS1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
E(self, temperature)[source]

Gets E (Young’s Modulus) for a given temperature.

Parameters:
temperature : float; default=None

the temperature (None -> linear E value)

Returns:
E : float

Young’s Modulus

E_table(self)[source]
G_table(self)[source]
Ge_table(self)[source]
Nu_table(self)[source]
Rho_table(self)[source]
Sc_table(self)[source]
Ss_table(self)[source]
St_table(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MATT1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
A2_table(self)[source]
A3_table(self)[source]
G11_table(self)[source]
G12_table(self)[source]
G13_table(self)[source]
G22_table(self)[source]
G23_table(self)[source]
G33_table(self)[source]
Ge_table(self)[source]
Rho_table(self)[source]
Sc_table(self)[source]
Ss_table(self)[source]
St_table(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MATT2'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
Ax_table(self)[source]
Az_table(self)[source]
Eth_table(self)[source]
Ex_table(self)[source]
Ez_table(self)[source]
Ge_table(self)[source]
Gzx_table(self)[source]
Nuth_table(self)[source]
Nuxz_table(self)[source]
Rho_table(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MATT3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
H_table(self)[source]
Hgen_table(self)[source]
K_table(self)[source]
Mu_table(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT4 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MATT4'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
Hgen_table(self)[source]
Kxx_table(self)[source]
Kxy_table(self)[source]
Kxz_table(self)[source]
Kyy_table(self)[source]
Kyz_table(self)[source]
Kzz_table(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT5 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MATT5'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
A2_table(self)[source]
E1_table(self)[source]
E2_table(self)[source]
F12_table(self)[source]
G12_table(self)[source]
G1z_table(self)[source]
G2z_table(self)[source]
Ge_table(self)[source]
Nu12_table(self)[source]
Rho_table(self)[source]
S_table(self)[source]
Xc_table(self)[source]
Xt_table(self)[source]
Yc_table(self)[source]
Yt_table(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a MATT8 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
type = 'MATT8'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
type = 'MATT9'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.material_deps.MaterialDependence[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Mid(self)[source]
_get_table(self, key)[source]

internal method for accessing tables

class pyNastran.bdf.cards.material_deps.MaterialDependenceThermal[source]

Bases: pyNastran.bdf.cards.material_deps.MaterialDependence

_xref_table(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGB'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

CMETHOD id in the case control deck

method : str
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.

HESS : Upper Hessenberg. For linear perturbation of ANALYSIS= DCEIG

with large displacement, please don’t use HESS.

ARNO: ???

norm : str; default=’MAX’

Method for normalizing eigenvectors valid_norm = {MAX, POINT}

grid : int

GRID/SPOINT id Required if norm=’POINT’

component : int

Required if norm=’POINT’

epsilon : float
neigenvalues : int

Number of Eigenvalues

mblkszs : List[float]; default=None

used by CLAN

iblkszs : List[int]; default=None

used by CLAN

ksteps : List[int]; default=None

used by CLAN

NJIs : List[int]; default=None

used by CLAN

alphaAjs : List[float]; default=None

used by HESS/INV

omegaAjs : List[float]; default=None

used by HESS/INV

alphaBjs : List[float]; default=None

used by HESS/INV

omegaBjs : List[float]; default=None

used by HESS/INV

LJs : List[float]; default=None

used by HESS/INV

NEJs : List[int]; default=None

used by HESS/INV

NDJs : List[int]; default=None

used by HESS/INV

shift_r1 : List[float]; default=None

used by ISSR

shift_i1 : List[float]; default=None

used by ISSR

isrr_flag : List[int]; default=None

used by ISSR

nd1 : List[int]; default=None

used by ISSR

comment : str; 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]
static _load_clan(nrows, card)[source]

loads complex Lanczos

static _load_hess_inv(nrows, method, card)[source]

loads inverse power

static _load_isrr(nrows, card)[source]

loads the iterative Schur-Rayleigh-Ritz

classmethod add_card(card, comment='')[source]

Adds an EIGC card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[source]
raw_method(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

repr_method(self)[source]
sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGC'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; 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(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGP'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

Adds a EIGR card

Parameters:
sid : int

method id

method : str; default=’LAN’

eigenvalue method recommended: {LAN, AHOU} obsolete : {INV, SINV, GIV, MGIV, HOU, MHOU, AGIV}

f1 / f2 : float; default=None

lower/upper bound eigenvalue

f2 : float; default=None

upper bound eigenvalue

ne : int; default=None

estimate of number of roots (used for INV)

nd : int; default=None

desired number of roots

msglvl : int; default=0

debug level; 0-4

maxset : int; default=None

Number of vectors in block or set

shfscl : float; default=None

estimate of first flexible mode natural frequency

norm : str; default=None

{MAX, MASS, AF, POINT} default=MASS (NX)

G : int; default=None

node id for normalization; only for POINT

C : int; default=None

component for normalization (1-6); only for POINT

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

allowed_methods = ['LAN', 'AHOU', 'INV', 'SINV', 'GIV', 'MGIV', 'HOU', 'MHOU', 'AGIV']
cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'EIGR'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

method id

v1 : float; default=None

lower bound eigenvalue

v2 : float; default=None

upper bound eigenvalue

nd : int

number of roots

msglvl : int; default=0

debug level; 0-4

maxset : int; default=None

Number of vectors in block or set

shfscl : float; default=None

estimate of first flexible mode natural frequency

norm : str; default=None

{MAX, MASS, AF}

options : ???; default=None -> []

???

values : ???; default=None -> []

???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

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:
Type : str

LINE, TRIA, QUAD, HEX

field_eid : int

starting element id

pid : int

property id

field_id : int

GRIDG id

cdir : str

L, M, N

th_geom_opt :
TH : ???

???

GEOM : ???

only when Type = BEND

OPT : ???

???

eidl : int

???

eidh : int

???

classmethod add_card(card, comment='')[source]

Adds a CGEN card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
node_ids
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[int/float/str]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'CGEN'
uncross_reference(self, model)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
nid : int

the EPOINT id

comment : str; 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:
ids : List[int]

EPOINT ids

comment : str; default=’‘

a comment for the card

create_epointi(self)[source]

Creates individal EPOINT objects

type = 'EPOINT'
class pyNastran.bdf.cards.nodes.GRDSET(cp, cd, ps, seid, comment='')[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:
cp : int; default=0

the xyz coordinate frame

cd : int; default=0

the analysis coordinate frame

ps : str; default=’‘

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seid : int; default=0

superelement id TODO: how is this used by Nastran???

comment : str; default=’‘

a comment for the card

Cd(self)[source]

Gets the output coordinate system

Returns:
cd : int

the output coordinate system

Cp(self)[source]

Gets the analysis coordinate system

Returns:
cp : int

the analysis coordinate system

Ps(self)[source]

Gets the GRID-based SPC

Returns:
ps : str

the GRID-based SPC

SEid(self)[source]

Gets the Superelement ID

Returns:
seid : int

the Superelement ID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GRDSET card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cd = None

Analysis coordinate system

cp = None

Output Coordinate System

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ps = None

Default SPC constraint on undefined nodes

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

seid = None

Superelement ID

type = 'GRDSET'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int

the size of the card (8/16)

class pyNastran.bdf.cards.nodes.GRID(nid, xyz, cp=0, cd=0, ps='', seid=0, comment='')[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:
nid : int

node id

xyz : float ndarray

Raw location <\(x_1, x_2, x_3\)>

cp : int

reference coordinate system

cd : int

analysis coordinate system

ps : str

nodal-based constraints

seid : int

superelement id

cp_ref : Coord() or None

cross-referenced cp

cd_ref : Coord() 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:
nid : int

node id

cp : int; default=0

the xyz coordinate frame

xyz : (3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cd : int; default=0

the analysis coordinate frame

ps : str; default=’‘

Additional SPCs in the analysis coordinate frame (e.g. ‘123’). This corresponds to DOF set SG.

seid : int; default=0

superelement id TODO: how is this used by Nastran???

comment : str; default=’‘

a comment for the card

Cd(self)[source]

Gets the output coordinate system

Returns:
cd : int

the output coordinate system

Cp(self)[source]

Gets the analysis coordinate system

Returns:
cp : int

the analysis coordinate system

Nid(self)[source]

Gets the GRID ID

Returns:
nid : int

node ID

Ps(self)[source]

Gets the GRID-based SPC

Returns:
ps : str

the GRID-based SPC

SEid(self)[source]

Gets the Superelement ID

Returns:
seid : int

the Superelement ID

classmethod add_card(card, comment='')[source]

Adds a GRID card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model, grdset=None)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

grdset : GRDSET / 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(self)[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(self)[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(self, model)[source]
get_position_wrt(self, model, cid)[source]

Gets the location of the GRID which started in some arbitrary system and returns it in the desired coordinate system

Parameters:
model : BDF()

the BDF object

cid : int

the desired coordinate ID

Returns:
xyz : (3, ) float ndarray

the position of the GRID in an arbitrary coordinate system

get_position_wrt_no_xref(self, model, cid)[source]

see get_position_wrt

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[int/float/str]

the fields that define the card

set_position(self, model, xyz, cid=0, xref=True)[source]

Updates the GRID location

Parameters:
xyz : (3, ) float ndarray

the location of the node.

cp : int; default=0 (global)

the analysis coordinate system

xref : bool; default=True

cross-references the coordinate system

type = 'GRID'
uncross_reference(self)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int; default=8

the size of the card (8/16)

is_double : bool; default=False

should this card be written with double precision

Returns:
msg : str

the card as a string

write_card_16(self, is_double=False)[source]

Writes a GRID card in 16-field format

write_card_8(self)[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(self)[source]

Gets the output coordinate system

Returns:
cd : int

the output coordinate system

classmethod add_card(card, comment='')[source]

Adds a GRIDB card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

get_position(self)[source]
nid = None

node ID

ps = None

local SPC constraint

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

ringfl = None

ringfl

type = 'GRIDB'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int; default=8

the size of the card (8/16)

is_double : bool; default=False

should this card be written with double precision

Returns:
msg : str

the card as a string

class pyNastran.bdf.cards.nodes.POINT(nid, xyz, cp=0, comment='')[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:
nid : int

node id

xyz : (3, ) float ndarray; default=None -> [0., 0., 0.]

the xyz/r-theta-z/rho-theta-phi values

cp : int; default=0

coordinate system for the xyz location

comment : str; default=’‘

a comment for the card

Cp(self)[source]

Gets the analysis coordinate system

Returns:
cp : int

the analysis coordinate system

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a POINT card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp = None

Grid point coordinate system

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_position(self)[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(self, model, cid)[source]

Gets the location of the POINT which started in some arbitrary system and returns it in the desired coordinate system

Parameters:
model : BDF()

the BDF model object

cid : int

the desired coordinate ID

Returns:
xyz : (3,) ndarray

the position of the POINT in an arbitrary coordinate system

nid = None

Node ID

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list[varies]

the fields that define the card

set_position(self, model, xyz, cid=0)[source]

Updates the POINT location

Parameters:
xyz : (3,) float ndarray

the location of the node

cp : int; default=0 (global)

the analysis coordinate system

type = 'POINT'
uncross_reference(self)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int

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:
nid : int

the node id

seqid : int/float

the superelement id

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

append(self, seqgp)[source]
cross_reference(self, model)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

type = 'SEQGP'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int; default=8

unused

is_double : bool; 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:
nid : int

the SPOINT id

comment : str; default=’‘

a comment for the card

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:
ids : List[int]

SPOINT ids

comment : str; default=’‘

a comment for the card

create_spointi(self)[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, nids)[source]

exports the nodes in a vectorized way

classmethod _init_from_empty()[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

type

dummy method for EPOINT/SPOINT classes

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int; default=8

unused

is_double : bool; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

add_points(self, sList)[source]

Adds more EPOINTs/SPOINTs to this object

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

type

dummy method for EPOINTs/SPOINTs classes

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card

Parameters:
size : int; default=8

unused

is_double : bool; default=False

unused

pyNastran.bdf.cards.nodes.compress_xpoints(point_type, xpoints)[source]

Gets the SPOINTs/EPOINTs in sorted, short form.

uncompresed: SPOINT,1,3,5 compressed: SPOINT,1,3,5

uncompresed: SPOINT,1,2,3,4,5 compressed: SPOINT,1,THRU,5

uncompresed: 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, points, comment='')[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dconstr_ids
classmethod export_to_hdf5(hdf5_file, dconadds, encoding)[source]
raw_fields(self)[source]
type = 'DCONADD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

1 2 3 4 5 6 7
DCONSTR DCID RID LALLOW/LID UALLOW/UID LOWFQ HIGHFQ
DCONSTR 10 4 1.25      

Creates a DCONSTR card

Parameters:
oid : int

unique optimization id

dresp_id : int

DRESP1/2 id

lid / uid=-1.e20 / 1.e20

lower/upper bound

lowfq / highfq : float; default=0. / 1.e20

lower/upper end of the frequency range

comment : str; default=’‘

a comment for the card

DRespID(self)[source]
Lid(self)[source]
Rid(self)[source]
Uid(self)[source]
classmethod add_card(card, comment='')[source]

Adds a DCONSTR card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(hdf5_file, dconstrs, encoding)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'DCONSTR'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'DDVAL'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

design variable id

label : str

name of the design variable

xinit : float

the starting point value for the variable

xlb : float; default=-1.e20

the lower bound

xub : float; default=1.e20

the lower bound

delx : float; 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

ddval : int; default=None
int : DDVAL id

allows you to set discrete values

None : continuous

comment : str; default=’‘

a comment for the card

DDVal(self)[source]
_properties = ['value']
classmethod add_card(card, comment='')[source]

Adds a DESVAR card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'DESVAR'
1 2 3 4 5 6 7 8
DESVAR OID LABEL XINIT XLB XUB DELXV DDVAL
uncross_reference(self)[source]

Removes cross-reference links

value

gets the actual value for the DESVAR

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
oid : int

optimization id

dependent_desvar : int

the DESVAR to link

independent_desvars : List[int]

the DESVARs to combine

coeffs : List[int]

the linear combination coefficients

c0 : float; default=0.0

an offset

cmult : float; default=1.0

an scale factor

comment : str; default=’‘

a comment for the card

Ci
IDv
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DLINK card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

ddvid
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'DLINK'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

defaults = {'APRCOD': 2, 'AUTOSE': 0, 'CONV1': 0.001, 'CONV2': 1e-20, 'CONVDV': 0.001, 'CONVPR': 0.001, 'CT': -0.03, 'CTMIN': 0.003, 'DELB': 0.0001, 'DELP': 0.2, 'DELX': 0.5, 'DESMAX': 5, 'DISBEG': 0, 'DISCOD': 1, 'DLXESL': 0.5, 'DPMAX': 0.5, 'DPMIN': 0.01, 'DRATIO': 0.1, 'DSMXESL': 20, 'DXMAX': 1.0, 'DXMIN': 0.05, 'ETA1': 0.01, 'ETA2': 0.25, 'ETA3': 0.7, 'FSDALP': 0.9, 'FSDMAX': 0, 'GMAX': 0.005, 'GSCAL': 0.001, 'IGMAX': 0, 'IPRINT': 0, 'ISCAL': 0, 'METHOD': 0, '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': None, '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(self)[source]
type = 'DOPTPRM'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

response id

lable : str

Name of the response

response_type : str

Response type

property_type : str

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.

region : int

Region identifier for constraint screening

atta : int / float / str / blank

Response attribute

attb : int / float / str / blank

Response attribute

atti : List[int / float / str]

the response values to pull from List[int]:

list of grid ids list of property ids

List[str]

‘ALL’

comment : str; default=’‘

a comment for the card

validate : bool; 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)

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(self)[source]

returns the values of ATTa

DRespID(self)[source]
OptID(self)[source]
_elements(self)[source]

helper method

_nodes(self)[source]

helper method

_properties(self)[source]

helper method

classmethod add_card(card, comment='')[source]

Adds a DRESP1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

atti_values(self)[source]

returns the values of ATTi

calculate(self, op2_model, subcase_id)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the dresps in a vectorized way

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

ptype
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

rtype
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'DRESP1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

response id

label : str

Name of the response

dequation : int / str

int : DEQATN id str : an equation

region : int

Region identifier for constraint screening

params : dict[(index, card_type)] = values

the storage table for the response function index : int

a counter

card_type : str

the type of card to pull from DESVAR, DVPREL1, DRESP2, etc.

values : List[int]

the values for this response

method : str; default=MIN

flag used for FUNC=BETA/MATCH FUNC = BETA

valid options are {MIN, MAX}

FUNC = MATCH

valid options are {LS, BETA}

c1 / c2 / c3 : float; default=1. / 0.005 / 10.0

constants for FUNC=BETA or FUNC=MATCH

comment : str; default=’‘

a comment for the card

validate : bool; default=False

should the card be validated when it’s created

params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}
DEquation(self)[source]
DRespID(self)[source]
OptID(self)[source]
_pack(self, params)[source]

packs the params/params_ref into a form for output

_pack_params(self)[source]
_validate(self)[source]
classmethod add_card(card, comment='')[source]

Adds a DRESP2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

calculate(self, op2_model, subcase_id)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the dresps in a vectorized way

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'DRESP2'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

response id

label : str

Name of the response

group : str

Selects a specific external response routine

Type : str

Refers to a specific user-created response calculation type in the external function evaluator

region : str

Region identifier for constraint screening

params : dict[(index, card_type)] = values

the storage table for the response function index : int

a counter

card_type : str

the type of card to pull from DESVAR, DVPREL1, DRESP2, etc.

values : List[int]

the values for this response

comment : str; default=’‘

a comment for the card

validate : bool; default=False

should the card be validated when it’s created

params = {

(0, ‘DRESP1’) = [10, 20], (1, ‘DESVAR’) = [30], (2, ‘DRESP1’) = [40],

}
_pack(self, params)[source]

packs the params/params_ref into a form for output

_pack_params(self)[source]
_validate(self)[source]
classmethod add_card(card, comment='')[source]

Adds a DRESP3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the dresps in a vectorized way

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'DRESP3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.optimization.DSCREEN(rtype, trs=-0.5, nstr=20, comment='')[source]

Bases: pyNastran.bdf.cards.optimization.OptConstraint

Creates a DSCREEN object

Parameters:
rtype : str

Response type for which the screening criteria apply

trs : float

Truncation threshold

nstr : int

Maximum number of constraints to be retained per region per load case

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a DSCREEN card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
OptID(self)[source]
Type
_get_element(self, model, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvcrel(self, element, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVCREL1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

calculate(self, op2_model, subcase_id)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'DVCREL1'
uncross_reference(self)[source]

Removes cross-reference links

update_model(self, model, desvar_values)[source]

doesn’t require cross-referencing

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
Eid(self)[source]
OptID(self)[source]
Type
_get_element(self, model, eid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvcrel(self, elem, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVCREL2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

allowed_elements = ['CQUAD4', 'CTRIA3', 'CBAR', 'CBEAM', 'CELAS1', 'CBUSH', 'CDAMP2']
calculate(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields(self)[source]
repr_fields(self)[source]

Todo

finish repr_fields for DVCREL2

type = 'DVCREL2'
uncross_reference(self)[source]

Removes cross-reference links

update_model(self, model, desvar_values)[source]

doesn’t require cross-referencing

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
dvid : int

DESVAR id

nid : int

GRID/POINT id

dxyz : (3, ) float ndarray

the amount to move the grid point

cid : int; default=0

Coordinate system for dxyz

coeff : float; default=1.0

the dxyz scale factor

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

coord_id
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

desvar_id
node_id
raw_fields(self)[source]
type = 'DVGRID'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
oid : int

optimization id

prop_type : str

material card name (e.g., MAT1)

mid : int

material id

mp_name : str

optimization parameter as a pname (material name; E)

dvids : List[int]

DESVAR ids

coeffs : List[float]

scale factors for DESVAR ids

mp_min : float; default=None

minimum material property value

mp_max : float; default=1e20

maximum material property value

c0 : float; default=0.

offset factor for the variable

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

Mid(self)[source]
OptID(self)[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvmrel(self, mat, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVMREL1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'DVMREL1'
uncross_reference(self)[source]

Removes cross-reference links

update_model(self, model, desvar_values)[source]

doesn’t require cross-referencing

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
oid : int

optimization id

mat_type : str

material card name (e.g., MAT1)

mid : int

material id

mp_name : str

optimization parameter as a pname (material name; E)

deqation : int

DEQATN id

dvids : List[int]; default=None

DESVAR ids

labels : List[str]; default=None

DTABLE names

mp_min : float; default=None

minimum material property value

mp_max : float; default=1e20

maximum material property value

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

.. note:: either dvids or labels is required
DEquation(self)[source]
Mid(self)[source]
OptID(self)[source]
_get_material(self, model, mid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvmrel(self, mat, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVMREL2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

allowed_materials = ['MAT1', 'MAT2']
calculate(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_attributes(…)

raw_fields(self)[source]
repr_fields(self)[source]

Todo

finish repr_fields for DVMREL2

type = 'DVMREL2'
uncross_reference(self)[source]

Removes cross-reference links

update_model(self, model, desvar_values)[source]

doesn’t require cross-referencing

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
oid : int

optimization id

prop_type : str

property card name (e.g., PSHELL)

pid : int

property id

pname_fid : str/int

optimization parameter as a pname (property name; T) or field number (fid)

dvids : List[int]

DESVAR ids

coeffs : List[float]

scale factors for DESVAR ids

p_min : float; default=None

minimum property value

p_max : float; default=1e20

maximum property value

c0 : float; default=0.

offset factor for the variable

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

OptID(self)[source]
Pid(self)[source]
_get_property(self, model, pid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids', 'allowed_properties', 'allowed_elements', 'allowed_masses', 'allowed_properties_mass']
_update_by_dvprel(self, prop, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVPREL1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, op2_model, subcase_id)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_xinit_lower_upper_bound(self, model)[source]

gets the active x value and the lower/upper bounds

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'DVPREL1'
uncross_reference(self)[source]

Removes cross-reference links

update_model(self, model, desvar_values)[source]

doesn’t require cross-referencing

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
oid : int

optimization id

prop_type : str

property card name (e.g., PSHELL)

pid : int

property id

pname_fid : str/int

optimization parameter as a pname (property name; T) or field number (fid)

deqation : int

DEQATN id

dvids : List[int]; default=None

DESVAR ids

labels : List[str]; default=None

DTABLE names

#params : dict[(index, card_type)] = values

#the storage table for the response function #index : int

#a counter

#card_type : str

#the type of card to pull from #DESVAR, DVPREL1, DRESP2, etc.

#values : List[int]

#the values for this response

p_min : float; default=None

minimum property value

p_max : float; default=1e20

maximum property value

validate : bool; default=False

should the variable be validated

comment : str; default=’‘

a comment for the card

.. note:: either dvids or labels is required
DEquation(self)[source]
OptID(self)[source]
Pid(self)[source]
_get_property(self, model, pid, msg='')[source]
classmethod _init_from_empty()[source]
_properties = ['desvar_ids']
_update_by_dvprel(self, prop, value)[source]
classmethod add_card(card, comment='')[source]

Adds a DVPREL2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

.. todo:: add support for DEQATN cards to finish DVPREL2 xref
get_xinit_lower_upper_bound(self, 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(self)[source]
repr_fields(self)[source]

Todo

finish repr_fields for DVPREL2

type = 'DVPREL2'
uncross_reference(self)[source]

Removes cross-reference links

update_model(self, model, desvar_values)[source]

doesn’t require cross-referencing

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

desvar_ids
validate(self)[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

dequation = None

DEQATN entry identification number. (Integer > 0)

desvar_ids
oid = None

Unique identification number

validate(self)[source]

card checking method that should be overwritten

class pyNastran.bdf.cards.optimization.OptConstraint[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

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._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:
name : str

the name of the response (e.g., DRESP1, DVPREL1)

values_list : varies

typical : List[int] DNODE : List[List[int], List[int]]

inline : bool; 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:
key : str

the name of the PARAM

values : int/float/str/List

varies depending on the type of PARAM

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PARAM'
update_values(self, value1=None, value2=None)[source]

Updates value1 and value2. Performs type checking based on the PARAM type after setting any default value(s).

Parameters:
value1 : varies; default=None

the main value

value2 : varies; 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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

nend : int; default=0)

the number of blank fields at the end of the line

Returns:
fields_out : List[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)[source]

Removes any trailing Nones from the card. Also converts empty strings to None. Allows floats & ints.

Parameters:
card : List[str]

the fields on the card as a list

Returns:
short_card : List[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, list_type, lists, comment='')[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        
Attributes:
name : str

The name.

list_type : str

{‘SET1’, ‘AELIST’, ‘CAEROx’}

lists : list[int]

list of values of AECOMP lists

Creates an AECOMP card

Parameters:
name : str

the name of the component

list_type : str

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.

lists : List[int, int, …]; int

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

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AECOMP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

allowed_list_types = ['SET1', 'AELIST', 'CAERO']
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_lists(self)[source]
raw_fields(self)[source]
safe_cross_reference(self, model)[source]
type = 'AECOMP'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.aero.aero.AECOMPL(name, labels, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

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:
name : str

the name of the component

labels : List[str, str, …]; str

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

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AECOMPL card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model)[source]
type = 'AECOMPL'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
sid : int

unique id

fractions : List[float, …, float]

list of percentages

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

fractions = None

Number (float)

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

sid = None

Set identification number. (Unique Integer > 0)

type = 'AEFACT'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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_id : int/str

unique id

label : str

name of the dependent AESURF card

independent_labels : List[str, …, str]

name for the independent variables (AESTATs)

linking_coefficents : List[float]

linking coefficients

comment : str; default=’‘

a comment for the card

Cis
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AELINK card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, mode='public', keys_to_skip=None, filter_properties=False)[source]

See also

pyNastran.utils.object_methods(…)

object_methods(self, mode='public', keys_to_skip=None)[source]

See also

pyNastran.utils.object_methods(…)

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
list_fields : List[int/float/str]

the fields that define the card

type = 'AELINK'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.aero.aero.AELIST(sid, elements, comment='')[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:
sid : int

unique id

elements : List[int, …, int]; int

list of box ids

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

clean_ids(self)[source]
cross_reference(self, model)[source]
elements = None

List of aerodynamic boxes generated by CAERO1 entries to define a surface. (Integer > 0 or ‘THRU’)

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

safe_cross_reference(self, model)[source]
sid = None

Set identification number. (Integer > 0)

type = 'AELIST'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.AEPARM(aeparm_id, label, units, comment='')[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:
id : int

the unique id

label : str

the variable name

units : str

unused by Nastran

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'AEPARM'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.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='')[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:
aesid : int

controller number

label : str

controller name

cid1 / cid2 : int / None

coordinate system id for primary/secondary control surface

alid1 / alid2 : int / None

AELIST id for primary/secondary control surface

eff : float; default=1.0

Control surface effectiveness

ldw : str; default=’LDW’

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

crefc : float; default=1.0

reference chord for the control surface

crefs : float; default=1.0

reference area for the control surface

pllim / pulim : float; default=-pi/2 / pi/2

Lower/Upper deflection limits for the control surface in radians

hmllim / hmulim : float; default=None

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

tqllim / tqulim : int; 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

comment : str; default=’‘

a comment for the card

Cid1(self)[source]
Cid2(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AESURF card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

aelist_id1(self)[source]
aelist_id2(self)[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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]

Gets the fields in their unmodified form

Returns:
fieldsreset_camera[int/float/str]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[int/float/str]

the fields that define the card

safe_cross_reference(self, model, 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(self)[source]

Removes cross-reference links

update(self, unused_model, maps)[source]
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.AESURFS(aesid, label, list1, list2, comment='')[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:
aesid : int

the unique id

label : str

the AESURF name

list1 / list2 : int / None

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

comment : str; default=’‘

a comment for the card

List1(self)[source]
List2(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an AESURFS card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'AESURFS'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.CAERO1(eid, pid, igroup, p1, x12, p4, x43, cp=0, nspan=0, lspan=0, nchord=0, lchord=0, comment='')[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:
eid : int

element id

pid : int, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igroup : int

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)

x12 : float

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

x43 : float

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

cp : int, CORDx

int : coordinate system CORDx : Coordinate object (xref)

nspan : int

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

nchord : int

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

lspan : int, AEFACT

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

lchord : int, AEFACT

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

comment : str; default=’‘

accesses the comment

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

Parameters:
eid : int

element id

pid : int, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igroup : int

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)

x12 : float

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

x43 : float

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

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspan : int; default=0

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

nchord : int; default=0

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

lspan : int, AEFACT; default=0

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

lchord : int, AEFACT; default=0

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

comment : str; default=’‘

a comment for the card

Cp(self)[source]
Pid(self)[source]
_box_id_error(self, box_id)[source]

Raise box_id IndexError.

_finalize_hdf5(self, encoding)[source]

hdf5 helper function

_get_box_x_chord_center(self, box_id, x_chord)[source]

The the location of the x_chord of the box along the centerline.

classmethod _init_from_empty()[source]
_init_ids(self, 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:
card : BDFCard()

a BDFCard object

comment : str; 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

cp = None

Coordinate system for locating point 1.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

flip_normal(self)[source]

flips the CAERO1 normal vector

get_LChord(self)[source]
get_LSpan(self)[source]
get_box_index(self, box_id)[source]

Get the index of self.box_ids that coresponds to the given box id.

Parameters:
box_id : int

Box id to ge tthe index of.

Returns:
index : tuple

Index of self.box_ids that coresponds to the given box id.

get_box_mid_chord_center(self, box_id)[source]

The the location of the mid chord of the box along the centerline.

Parameters:
box_id : int

Box id.

Returns:
xyz_mid_chord : ndarray

Location of box mid chord in global.

get_box_quarter_chord_center(self, box_id)[source]

The the location of the quarter chord of the box along the centerline.

Parameters:
box_id : int

Box id.

Returns:
xyz_quarter_chord : ndarray

Location of box quater chord in global.

get_leading_edge_points(self)[source]

gets the leading edge points

get_npanel_points_elements(self)[source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns:
npoints : int

The number of nodes for the CAERO

nelmements : int

The number of elements for the CAERO

get_points(self)[source]

Get the 4 corner points for the CAERO card

Returns:
p1234 : (4, 3) list

List of 4 corner points in the global frame

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]

npanels
panel_points_elements(self)[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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : LIST

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

set_points(self, points)[source]
shape

returns (nelements_nchord, nelements_span)

shift(self, dxyz)[source]

shifts the aero panel

type = 'CAERO1'
uncross_reference(self)[source]

Removes cross-reference links

update(self, maps)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
eid : int

element id

pid : int, PAERO2

int : PAERO2 ID PAERO2 : PAERO2 object (xref)

igroup : int

Group number

p1 : (1, 3) ndarray float

xyz location of point 1 (forward position)

x12 : float

length of the CAERO2

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nsb : int; default=0

Number of slender body elements

lsb : int; default=0

AEFACT id for defining the location of the slender body elements

nint : int; default=0

Number of interference elements

lint : int; default=0

AEFACT id for defining the location of interference elements

comment : str; default=’‘

a comment for the card

Cp(self)[source]
Lint(self)[source]
Lsb(self)[source]
Pid(self)[source]
classmethod _init_from_empty()[source]
_init_ids(self, dtype='int32')[source]
_properties = ['nboxes']
classmethod add_card(card, comment='')[source]

Adds a CAERO2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp = None

Coordinate system for locating point 1.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

get_points(self)[source]

creates a 1D representation of the CAERO2

get_points_elements_3d(self)[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)

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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

The fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
set_points(self, points)[source]
shift(self, dxyz)[source]

shifts the aero panel

type = 'CAERO2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

PAERO3 property id

p1 : (3,) float ndarray

???

x12 : float

???

p4 : (3,) float ndarray

???

x43 : float

???

cp : int; default=0

coordinate system for locating point 1

list_w : int

???

list_c1 : int; default=None

defines an AEFACT for ???

list_c2 : int; default=None

defines an AEFACT for ???

comment : str; default=’‘

a comment for the card

Cp(self)[source]
List_c1(self)[source]
List_c2(self)[source]
List_w(self)[source]
Pid(self)[source]
classmethod _init_from_empty()[source]
_properties = ['shape', 'xy']
classmethod add_card(card, comment='')[source]

Adds a CAERO3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp = None

Coordinate system for locating point 1.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

get_npanel_points_elements(self)[source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns:
npoints : int

The number of nodes for the CAERO

nelmements : int

The number of elements for the CAERO

get_points(self)[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(self)[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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

The fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
shape

returns (nelements_nchord, nelements_span)

type = 'CAERO3'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
eid : int

element id

pid : int, PAERO4

int : PAERO4 ID PAERO4 : PAERO4 object (xref)

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)

x12 : float

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

x43 : float

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

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspan : int; default=0

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

lspan : int, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan

comment : str; default=’‘

a comment for the card

Cp(self)[source]
Pid(self)[source]
classmethod _init_from_empty()[source]
_init_ids(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp = None

Coordinate system for locating point 1.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

get_LSpan(self)[source]
get_npanel_points_elements(self)[source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns:
npoints : int

The number of nodes for the CAERO

nelmements : int

The number of elements for the CAERO

get_points(self)[source]
panel_points_elements(self)[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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

The fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
shape

returns (nelements_nchord, nelements_span)

type = 'CAERO4'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
eid : int

element id

pid : int

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)

x12 : float

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

x43 : float

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

cp : int, CORDx; default=0

int : coordinate system

nspan : int; default=0

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

lspan : int, AEFACT; default=0

int > 0 : AEFACT reference for non-uniform nspan int = 0 : use nspan

ntheory : int; default=0

??? valid_theory = {0, 1, 2}

nthick : int; default=0

???

comment : str; default=’‘

a comment for the card

Cp(self)[source]
LSpan(self)[source]
Pid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CAERO5 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

c1_c2(self, mach)[source]
cp = None

Coordinate system for locating point 1.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

get_npanel_points_elements(self)[source]
get_points(self)[source]
panel_points_elements(self)[source]
pid = None

Property identification number of a PAERO5 entry.

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'CAERO5'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
name : str

Character string of up to 8 characters identifying the monitor point

label : str

A string comprising no more than 56 characters that identifies and labels the monitor point.

axes : str

components {1,2,3,4,5,6}

aecomp_name : str

name of the AECOMP/AECOMPL entry

xyz : List[float, float, float]; default=None

The coordinates in the CP coordinate system about which the loads are to be monitored. None : [0., 0., 0.]

cp : int, CORDx; default=0

coordinate system of XYZ

cd : int; default=None -> cp

the coordinate system for load outputs

comment : str; default=’‘

a comment for the card

Notes

CD - MSC specific field

Cd(self)[source]
Cp(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'MONPNT1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, unused_xref_errors)[source]
type = 'MONPNT2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
Cp(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'MONPNT3'
uncross_reference(self)[source]
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

PAERO1 id

caero_body_ids : List[int]; default=None

CAERO2 ids that are within the same IGROUP group

comment : str; default=’‘

a comment for the card

Bi
Bodies(self)[source]
classmethod _init_from_empty()[source]
_properties = ['_field_map']
classmethod add_card(card, comment='')[source]

Adds a PAERO1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
object_attributes(self, 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:
mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
attribute_names : List[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'PAERO1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

PAERO1 id

orient : str

Orientation flag. Type of motion allowed for bodies. Refers to the aerodynamic coordinate system of ACSID. See AERO entry. valid_orientations = {Z, Y, ZY}

width : float

Reference half-width of body and the width of the constant width interference tube

AR : float

Aspect ratio of the interference tube (height/width)

thi / thn : List[int]

The first (thi) and last (thn) interference element of a body to use the theta1/theta2 array

lrsb : int; default=None
int : AEFACT id containing a list of slender body half-widths

at the end points of the slender body elements

None : use width

lrib : int; default=None
int : AEFACT id containing a list of interference body

half-widths at the end points of the interference elements

None : use width

lth : List[int, int]; default=None

AEFACT id for defining theta arrays for interference calculations for theta1/theta2

comment : str; default=’‘

a comment for the card

AR = None

Aspect ratio of the interference tube (height/width). float>0.

Lrib(self)[source]

AEFACT id

Lrsb(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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)

lth1
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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'PAERO2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

PAERO1 id

nbox : int

Number of Mach boxes in the flow direction; 0 < nbox < 50

ncontrol_surfaces : int

Number of control surfaces. (0, 1, or 2)

x / y : List[float, None]

float : locations of points 5 through 12, which are in the aerodynamic coordinate system, to define the cranks and control surface geometry.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
npoints
pid = None

Property identification number. (Integer > 0)

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

safe_cross_reference(self, model, unused_xref_errors)[source]
type = 'PAERO3'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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?

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PAERO4 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
pid = None

Property identification number. (Integer > 0)

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'PAERO4'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

ltaus_id
lxis_id
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'PAERO5'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE1(eid, caero, box1, box2, setg, dz=0.0, method='IPS', usage='BOTH', nelements=10, melements=10, comment='')[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:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box1 / box2 : int

First/last box id that is used by the spline

setg : int

SETx id that defines the list of GRID points that are used by the surface spline

dz : float; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

method : str; 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

usage : str; 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 : int; default=10

The number of FE elements along the local spline x-axis if using the FPS option

melements : int; default=10

The number of FE elements along the local spline y-axis if using the FPS option

comment : str; default=’‘

a comment for the card

CAero(self)[source]
Set(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

aero_element_ids
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'SPLINE1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE2(eid, caero, box1, box2, setg, dz=0.0, dtor=1.0, cid=0, dthx=0.0, dthy=0.0, usage='BOTH', comment='')[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:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box1 / box2 : int

First/last box/body id that is used by the spline

setg : int

SETx id that defines the list of GRID points that are used by the beam spline

dz : float; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

dtor : float; default=1.0

Torsional flexibility ratio (EI/GJ). Use 1.0 for bodies (CAERO2).

cid : int; default=0

Rectangular coordinate system for which the y-axis defines the axis of the spline. Not used for bodies, CAERO2

dthx : float; 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).

DTHY : Used for rotation about the spline’s y-axis (torsion).

It is used for slope of bodies.

usage : str; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

comment : str; default=’‘

a comment for the card

CAero(self)[source]
Cid(self)[source]
Set(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

aero_element_ids
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'SPLINE2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE3(eid, caero, box_id, components, nodes, displacement_components, coeffs, usage='BOTH', comment='')[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:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box_id : int

Identification number of the aerodynamic box number.

components : int

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

nodes : List[int]

Grid point identification number of the independent grid point.

displacement_components

Component numbers in the displacement coordinate system. 1-6 (GRIDs) 0 (SPOINTs)

coeffs

Coefficient of the constraint relationship.

usage : str; default=BOTH

Spline usage flag to determine whether this spline applies to the force transformation, displacement transformation, or both valid_usage = {FORCE, DISP, BOTH}

comment : str; default=’‘

a comment for the card

CAero(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a SPLINE3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
node_ids
raw_fields(self)[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(self, model, xref_errors)[source]
type = 'SPLINE3'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.aero.SPLINE4(eid, caero, aelist, setg, dz, method, usage, nelements, melements, comment='')[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:
eid : int

spline id

caero : int

CAEROx id that defines the plane of the spline

box1 / box2 : int

First/last box id that is used by the spline

setg : int

SETx id that defines the list of GRID points that are used by the surface spline

dz : float; default=0.0

linear attachment flexibility dz = 0.; spline passes through all grid points

method : str; 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

usage : str; 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 : int; default=10

The number of FE elements along the local spline x-axis if using the FPS option

melements : int; default=10

The number of FE elements along the local spline y-axis if using the FPS option

comment : str; default=’‘

a comment for the card

AEList(self)[source]
CAero(self)[source]
Set(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

aero_element_ids
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'SPLINE4'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
CAero(self)[source]
Cid(self)[source]
Set(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

aero_element_ids
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'SPLINE5'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
cref : float

the aerodynamic chord

bref : float

the wing span for a half model, this should be the full span for a full model, this should be the full span

sref : float

the wing area for a half model, this should be the half area for a full model, this should be the full area

acsid : int; default=0

aerodyanmic coordinate system defines the direction of the wind

rcsid : int; default=0

coordinate system for rigid body motions

sym_xz : int; default=0

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

sym_xy : int; default=0

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

comment : str; default=’‘

a comment for the card

Acsid(self)[source]
Rcsid(self)[source]
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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

bref = None

Reference span

cref = None

Reference chord length

cross_reference(self, model)[source]

Cross refernece aerodynamic coordinate system.

Parameters:
model : BDF

The BDF object.

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

rcsid = None

Reference coordinate system identification for rigid body motions.

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Safe cross refernece aerodynamic coordinate system.

Parameters:
model : BDF

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(self)[source]

Removes cross-reference links

update(self, maps)[source]
maps = {
‘coord’ : cid_map,

}

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
id : int

unique id

label : str

name for the id

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/str]

the fields that define the card

type = 'AESTAT'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the unique id

aesid : int

the control surface (AESURF) id

lalpha : int; default=None

the angle of attack profile (AEFACT) id

lmach : int; default=None

the mach profile (AEFACT) id

lschd : int; default=None

the control surface deflection profile (AEFACT) id

comment : str; default=’‘

a comment for the card

AESid(self)[source]
LAlpha(self)[source]
LMach(self)[source]
LSchd(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'CSSCHD'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.DIVERG(sid, nroots, machs, comment='')[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:
sid : int

The name.

nroots : int

the number of roots

machs : List[float, …, float]

list of Mach numbers

Creates an DIVERG card, which is used in divergence analysis (SOL 144).

Parameters:
sid : int

The name

nroots : int

the number of roots

machs : List[float, …, float]

list of Mach numbers

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'DIVERG'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the trim id; referenced by the Case Control TRIM field

mach : float

the mach number

q : float

dynamic pressure

labels : List[str]

names of the fixed variables

uxs : List[float]

values corresponding to labels

aeqr : float

0.0 : rigid trim analysis 1.0 : elastic trim analysis (default)

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self, model)[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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model)[source]
sid = None

Trim set identification number. (Integer > 0)

type = 'TRIM'
uncross_reference(self)[source]

Removes cross-reference links

uxs = None

The magnitude of the aerodynamic extra point degree-of-freedom. (Real)

validate(self)[source]

card checking method that should be overwritten

verify_trim(self, 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 pullup : lock URDD3=2.5, URDD5=0, PITCH=0

    solve for ANGLEA, DPITCH use DPITCH

    abrupt pitch : lock URDD3=1.0, URDD5=0, ANGLEA=5

    solve for PITCH, DPITCH use DPITCH

    Full model:
    2.5g pullup : lock 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 yaw : lock 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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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      
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a TRIM2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
velocity : float

the airspeed

cref : float

the aerodynamic chord

rho_ref : float

FLFACT density scaling factor

acsid : int; default=0

aerodyanmic coordinate system defines the direction of the wind

sym_xz : int; default=0

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

sym_xy : int; default=0

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

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cref = None

Reference length for reduced frequency

cross_reference(self, model)[source]

Cross refernece aerodynamic coordinate system.

Parameters:
model : BDF

The BDF object.

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[int/float/str]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

rho_ref = None

Reference density

safe_cross_reference(self, model, xref_errors)[source]

Safe cross refernece aerodynamic coordinate system.

Parameters:
model : BDF

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(self)[source]

Removes cross-reference links

update(self, maps)[source]
maps = {
‘coord’ : cid_map,

}

validate(self)[source]

card checking method that should be overwritten

velocity = None

Velocity for aerodynamic force data recovery and to calculate the BOV parameter

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
acsid : int; default=0

aerodyanmic coordinate system defines the direction of the wind

sym_xz : int; default=0

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

sym_xy : int; default=0

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

Acsid(self)[source]
is_anti_symmetric_xy
is_anti_symmetric_xz
is_symmetric_xy
is_symmetric_xz
set_ground_effect(self, 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:
sid : int

the id of a density, reduced_frequency, mach, or velocity table the FLUTTER card defines the meaning

factors : varies
values : List[float, …, float]

list of factors

List[f1, THRU, fnf, nf, fmid]
f1 : float

first value

THRU : str

the word THRU

fnf : float

second value

nf : int

number of values

fmid : float; default=(f1 + fnf) / 2.

the mid point to bias the array

TODO: does f1 need be be greater than f2/fnf???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

max(self)[source]
min(self)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

type = 'FLFACT'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.dynamic_loads.FLUTTER(sid, method, density, mach, reduced_freq_velocity, imethod='L', nvalue=None, omax=None, epsilon=0.001, comment='')[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:
sid : int

flutter id

method : str
valid methods = [K, KE,

PKS, PKNLS, PKNL, PKE]

density : int

defines a series of air densities in units of mass/volume PARAM,WTMASS does not affect this AERO affects this references an FLFACT id

mach : int

defines a series of the mach numbers references an FLFACT id

reduced_freq_velocity : int
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

imethod : str; default=’L’

Choice of interpolation method for aerodynamic matrix interpolation. imethods :

  1. L - linear
  2. S - surface
  3. TCUB - termwise cubic
nvalue : int

Number of eigenvalues beginning with the first eigenvalue for output and plots

omax : float

For the PKS and PKNLS methods, OMAX specifies the maximum frequency, in Hz., to be used in he flutter sweep. MSC only.

epsilon : float; default=1.0e-3

Convergence parameter for k. Used in the PK and PKNL methods only

comment : str; default=’‘

a comment for the card

_get_raw_nvalue_omax(self)[source]
_get_repr_nvalue_omax(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_density(self)[source]
get_mach(self)[source]
get_rfreq_vel(self)[source]
headers
make_flfacts_alt_sweep(self, model, mach, alts, eas_limit=1000.0, alt_units='m', velocity_units='m/s', density_units='kg/m^3', eas_units='m/s')[source]

makes an altitude sweep

make_flfacts_mach_sweep(self, 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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'FLUTTER'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

gust load id

dload : int

TLOADx or RLOADx entry that defines the time/frequency dependence

wg : float

Scale factor (gust velocity/forward velocity) for gust velocity

x0 : float

Streamwise location in the aerodynamic coordinate system of the gust reference point.

V : float; default=None
float : velocity of the vehicle (must be the same as the

velocity on the AERO card)

None : ???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

type = 'GUST'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
machs : List[float]

series of Mach numbers

reduced_freqs : List[float]

series of reduced frequencies

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

mklist(self)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

type = 'MKAERO1'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
machs : List[float]

series of Mach numbers

reduced_freqs : List[float]

series of reduced frequencies

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds an MKAERO2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

mklist(self)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

type = 'MKAERO2'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_ratio : float

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, ny, dtype='int32')[source]

Creates an array of rectilinear mesh of nodes and then grabs indexs it to get the elements

pyNastran.bdf.cards.aero.utils.make_monpnt1s_from_cids(model, 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_inids : Dict[cid]=inids
cid : int

coord id

inids : (nnodes_in_cid, ) int ndarray

the indicies in nids in sorted order

cids : List[int]

cids to create

delete_unused_coords : bool; 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

dtype : str; 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]
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:
cid : int

coordinate system id

origin : List[float]

the xyz origin

delta : float

pitch angle

theta : float

roll angle

comment : str; default=’‘

a comment for the card

Type = 'R'
acoord_transform_to_global(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

coord_to_xyz(self, p)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
rid
rotation_x(self, ct, st)[source]
rotation_y(self, ct, st)[source]
rotation_z(self, ct, st)[source]
setup(self)[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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
cref : float

the aerodynamic chord

bref : float

the wing span for a half model, this should be the full span for a full model, this should be the full span

sref : float

the wing area for a half model, this should be the half area for a full model, this should be the full area

acsid : int; default=0

aerodyanmic coordinate system defines the direction of the wind

rcsid : int; default=0

coordinate system for rigid body motions

sym_xz : int; default=0

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

comment : str; default=’‘

a comment for the card

Acsid(self)[source]
Rcsid(self)[source]
acsid = None

Aerodynamic coordinate system identification.

classmethod add_card(card, comment='')[source]

Adds an AEROZ card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, unused_model)[source]
cref = None

Reference chord length

cross_reference(self, model)[source]

Cross refernece aerodynamic coordinate system.

Parameters:
model : BDF

The BDF object.

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

rcsid = None

Reference coordinate system identification for rigid body motions.

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Safe cross refernece aerodynamic coordinate system.

Parameters:
model : BDF

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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
label : str

controller name

surface_type : str

defines the control surface type {SYM, ASYM}

cid : int

coordinate system id to define the hinge axis

panlst : int

aero panels defined by PANLST

setg : int

???

actuator_tf : int

???

comment : str; default=’‘

a comment for the card

Cid(self)[source]
SetK(self)[source]
classmethod add_card(card, comment='')[source]

Adds an AESURF card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

aesid
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(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

label = None

Controller name.

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fieldsreset_camera[int/float/str]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[int/float/str]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'AESURFZ'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

body id

label : str

An arbitrary character string used to define the body.

pid : int; default=0

Identification number of PBODY7 bulk data card (specifying body wake and/or inlet aerodynamic boxes)

acoord : int; default=0

Identification number of ACOORD bulk data card (specifying body center line location and orientation)

nseg : int

Number of body segments

idmeshes : List[int]

Identification number of SEGMESH bulk data card (specifying body segments).

comment : str; default=’‘

a comment for the card

ACoord(self)[source]
Pid(self)[source]
_get_nthetas(self)[source]
_get_points_elements_3di(self, segmesh)[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(self)[source]
classmethod add_card(card, comment='')[source]

Adds a BODY7 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

get_points(self)[source]

creates a 1D representation of the BODY7

get_points_elements_3d(self)[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

nboxes
npanels
pid = None

Property identification number of a PAERO7 entry.

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

The fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'BODY7'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igid : int

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)

x12 : float

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

x43 : float

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

cp : int, CORDx

int : coordinate system CORDx : Coordinate object (xref)

nspan : int

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

nchord : int

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

lspan : int, AEFACT

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

lchord : int, AEFACT

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

comment : str; default=’‘

accesses the comment

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

Parameters:
eid : int

element id

pid : int, PAERO1

int : PAERO1 ID PAERO1 : PAERO1 object (xref)

igroup : int

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)

x12 : float

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

x43 : float

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

cp : int, CORDx; default=0

int : coordinate system CORDx : Coordinate object (xref)

nspan : int; default=0

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

nchord : int; default=0

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

lspan : int, AEFACT; default=0

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

lchord : int, AEFACT; default=0

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

comment : str; default=’‘

a comment for the card

Cp(self)[source]
_box_id_error(self, box_id)[source]

Raise box_id IndexError.

_get_box_x_chord_center(self, box_id, x_chord)[source]

The the location of the x_chord of the box along the centerline.

_init_ids(self, 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element identification number

flip_normal(self)[source]
get_LSpan(self)[source]
get_box_index(self, box_id)[source]

Get the index of self.box_ids that coresponds to the given box id.

Parameters:
box_id : int

Box id to ge tthe index of.

Returns:
index : tuple

Index of self.box_ids that coresponds to the given box id.

get_box_mid_chord_center(self, box_id)[source]

The the location of the mid chord of the box along the centerline.

Parameters:
box_id : int

Box id.

Returns:
xyz_mid_chord : ndarray

Location of box mid chord in global.

get_box_quarter_chord_center(self, box_id)[source]

The the location of the quarter chord of the box along the centerline.

Parameters:
box_id : int

Box id.

Returns:
xyz_quarter_chord : ndarray

Location of box quater chord in global.

get_npanel_points_elements(self)[source]

Gets the number of sub-points and sub-elements for the CAERO card

Returns:
npoints : int

The number of nodes for the CAERO

nelmements : int

The number of elements for the CAERO

get_points(self)[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.

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]

npanels
panel_points_elements(self)[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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : LIST

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

set_points(self, points)[source]
shape

returns (nelements_nchord, nelements_span)

shift(self, dxyz)[source]

shifts the aero panel

type = 'CAERO7'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
sid : int

Unique set identification number. (Integer > 0)

sym : str

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)
fix : int

Identification number of a FIXHATM, FIXMATM, FIXMACH, or FIXMDEN bulk data card. (Integer > 0)

nmode : int

Number of structural modes used in the flutter analysis. (Integer >= 0)

tabdmp : int

Identification number of a TABDMP1 bulk data card specifying modal damping as

a function of natural frequency. (Integer ≥ 0)

mlist : int

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)

conmlst : int

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)

nkstep : int; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, model)[source]
cross_reference(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors=None)[source]
type = 'FLUTTER_ZONA'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the MKAEROZ id

mach : float

the mach number for the TRIM solution

save : str

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

filename : str

the length of the file must be at most 56 characters

print_flag : int

???

freqs : List[float]

???

method : int

???

save : ???

???

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]
cross_reference(self, model)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MKAEROZ'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

PAFOIL7 identification number.

i_axial : str

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_tip : int

Identification number of an AEFACT bulk data card used to specify the half thickness of the airfoil at the wing root/tip.

i_camber : int; 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_tip : int

Identification number of an AEFACT bulk data card used to specify the half thickness at the wing tip.

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a PAFOIL7 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

The fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'PAFOIL7'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

spline id

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a PANLST3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'PANLST1'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

spline id

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a PANLST3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'PANLST3'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

Body segment mesh identification number.

naxial : int

Number of axial stations (i.e., divisions) of the segment. (min=2).

nradial : int

Number of circumferential points of the segment (min=3).

nose_radius : float

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.

iaxis : int

The index of the axial station where the blunt nose ends. IAXIS is active only if ZONA7U (Hypersonic Aerodynamic Method) is used.

ITYPEi : int

Type of input used to define the circumferential box cuts - 1 body of revolution - 2 elliptical body - 3 arbitrary body

Xi : List[float]

X-location of the axial station; Xi must be in ascending order. (i.e., Xi+1 > Xi)

cambers : List[float]

Body camber at the Xi axial station. (Real)

YRi : List[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.

ZRi : List[float]

The semi-axis length of the elliptical body parallel to the Z-axis. Used only if ITYPEi=2. (Real)

IDYi : int

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.

IDZi : int

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.

comment : str; default=’‘

a comment for the card

Cp(self)[source]
Pid(self)[source]
classmethod add_card(card, comment='')[source]

Adds a SEGMESH card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
pid
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list

The fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : list

The fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
shift(self, dxyz)[source]

shifts the aero panel

type = 'SEGMESH'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

spline id

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a SPLINE1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, 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(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'SPLINE1_ZONA'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

spline id

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a SPLINE1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'SPLINE2_ZONA'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

spline id

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a SPLINE3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, model)[source]
cross_reference(self, model)[source]
raw_fields(self)[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(self, model, xref_errors)[source]
type = 'SPLINE3_ZONA'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

the TRIMLNK id

sym : ???

???

coeffs : ???

???

var_ids : ???

???

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a TRIMLNK card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, model)[source]
cross_reference(self, model)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'TRIMLNK'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_id : int

the trim id; referenced by the Case Control TRIM field

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a TRIMVAR card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, model)[source]
cross_reference(self, model)[source]
raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model)[source]
type = 'TRIMVAR'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the trim id; referenced by the Case Control TRIM field

q : float

dynamic pressure

true_g : float

???

nxyz : List[float]

???

pqr : List[float]

[roll_rate, pitch_rate, yaw_rate]

loadset : int

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.

labels : List[str]

names of the fixed variables

uxs : List[float]

values corresponding to labels

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a TRIM card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

convert_to_nastran(self, model)[source]
cross_reference(self, model)[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(self)[source]

Gets the fields in their unmodified form

Returns:
fields : list[varies]

the fields that define the card

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model)[source]
sid = None

Trim set identification number. (Integer > 0)

type = 'TRIM_ZONA'
uncross_reference(self)[source]

Removes cross-reference links

uxs = None

The magnitude of the aerodynamic extra point degree-of-freedom. (Real)

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.aero.zona.ZONA(model)[source]

Bases: object

PAFOIL(self, pid, msg='')[source]

gets a pafoil profile (PAFOIL7/PAFOIL8)

_add_aesurfz_object(self, aesurf)[source]

adds an AESURFZ object

_add_caero2s(self, caero2s, add=False)[source]

Converts ZONA BODY7 to CAERO2/PAERO2/AEFACT

_add_mkaeroz_object(self, mkaeroz)[source]

adds an MKAEROZ object

_add_pafoil_object(self, pafoil)[source]

adds an PAFOIL7/PAFOIL8 object

_add_panlst_object(self, panlst)[source]

adds an PANLST1/PANLST2/PANLST3 object

_add_trimlnk_object(self, trimlnk)[source]

adds an TRIMLNK object

_add_trimvar_object(self, trimvar)[source]

adds an TRIMVAR object

_convert_aesurf_aelist(self)[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(self)[source]

Converts ZONA CAERO7/BODY7 to CAERO1/CAERO2

_convert_splines(self)[source]

Converts ZONA splines to splines

_convert_trim(self)[source]

Converts ZONA TRIM to TRIM

_convert_trimlnk(self)[source]

Converts ZONA TRIMLNK to AELINK

classmethod _init_from_self(model)[source]

helper method for dict_to_h5py

clear(self)[source]

clears out the ZONA object

convert_to_nastran(self, save=True)[source]

Converts a ZONA model to Nastran

cross_reference(self)[source]
object_attributes(self, 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:
mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
attribute_names : List[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

object_methods(self, mode='public', keys_to_skip=None)[source]

List the names of methods of a class as strings. Returns public methods as default.

Parameters:
obj : instance

the object for checking

mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
method : List[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(self)[source]
update_for_zona(self)[source]
validate(self)[source]
verify(self, xref)[source]
write_bdf(self, 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
  • PRESAX
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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'AXIC'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.
cid : int
Fluid coordinate system identification number. (Integer > 0)
G : float
Value of gravity for fluid elements in the axial direction. (Real)
drho : float
Default mass density for fluid elements. (Real > 0.0 or blank)
db : float
Default bulk modulus for fluid elements.
no_sym : str
Request for nonsymmetric (sine) terms of series. {YES, NO}
F : str; default=None
Flag specifying harmonics. (Blank if harmonic is specified, or Character: ‘NONE’)
Ni : List[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'AXIF'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PCONEAX)

nids : List[int, int]

node ids

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
node_ids
nodes
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

ring_ids
safe_cross_reference(self, model, xref_errors)[source]
type = 'CCONEAX'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

PCONEAX property id for a CCONEAX.

mid1 : int

Membrane material id

mid2 : int

bending material id

mid3 : int

transverse shear material id

t1 : float

Membrane thickness. (Real > 0.0 if MID1 = 0)

t2 : float

Transverse shear thickness. (Real > 0.0 if MID3 = 0)

I : float

Moment of inertia per unit width.

nsm : float

Nonstructural mass per unit area.

z1, z2 : float

Fiber distances from the middle surface for stress recovery.

phi : List[float]

Azimuthal coordinates (in degrees) for stress recovery.

comment : str; default=’‘

a comment for the card

Mid1(self)[source]
Mid2(self)[source]
Mid3(self)[source]
Mids(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PCONEAX card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid_ref
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PCONEAX'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
nid : int

Point identification number.

ringax : int

Identification number of a RINGAX entry.

phi : float

Azimuthal angle in degrees.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'POINTAX'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.PRESAX(sid, pressure, rid1, rid2, phi1=0.0, phi2=360.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1 2 3 4 5 6 7
PRESAX SID P RID1 RID2 PHI1 PHI2
PRESAX 3 7.92 4 3 20.6 31.4
PRESAX 300 .1 2 1 -90. +90.
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PRESAX card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
type = 'PRESAX'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.axisymmetric.axisymmetric.RINGAX(nid, R, z, ps=None, comment='')[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

nid = None

Node ID

ps = None

local SPC constraint

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

type = 'RINGAX'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.axisymmetric.axisymmetric.RINGFL(ringfl, xa, xb, comment='')[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]

Gets the fields in their unmodified form

Returns:
fields : List[varies]

the fields that define the card

type = 'RINGFL'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.axisymmetric.axisymmetric.TEMPAX(sid, ring, phi, temperature, comment='')[source]

Bases: pyNastran.bdf.cards.thermal.loads.ThermalLoad

Defines temperature sets for conical shell problems.

1 2 3 4 5 6 7 8 9
TEMPAX SID RID1 PHI1 T1 SID RID2 PHI2 T2
TEMPAX 4 7 30.0 105.3        

Creates a TEMPAX card

Parameters:
sid : int

Load set identification number

temperatures : dict[nid]
nid : int

node id

temperature : float

the nodal temperature

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a TEMPAX card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

icard : int; default=0

???

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
get_loads(self)[source]
raw_fields(self)[source]

Writes the TEMPAX card

repr_fields(self)[source]

Writes the TEMP card

safe_cross_reference(self, model, debug=True)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'TEMPAX'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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!

Area(self)[source]

Get the area, \(A\).

\[A = \frac{1}{2} \lvert (n_1-n_2) \times (n_1-n_3) \rvert\]
AreaCentroidNormal(self)[source]

Returns area, centroid, normal as it’s more efficient to do them together

Mass(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CTRAX3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTRAX3'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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!

Area(self)[source]

Get the area, \(A\).

\[A = \frac{1}{2} \lvert (n_1-n_2) \times (n_1-n_3) \rvert\]
AreaCentroidNormal(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTRAX6'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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!

Area(self)[source]

Get the area, \(A\).

\[A = \frac{1}{2} \lvert (n_1-n_2) \times (n_1-n_3) \rvert\]
AreaCentroidNormal(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTRIAX'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
Area(self)[source]

Get the normal vector.

\[A = \frac{1}{2} \lvert (n_1-n_3) \times (n_1-n_5) \rvert\]
AreaCentroidNormal(self)[source]

Returns area, centroid, normal as it’s more efficient to do them together

Centroid(self)[source]

Get the centroid.

\[CG = \frac{1}{3} (n_0+n_1+n_2)\]
Mass(self)[source]
\[m = \frac{m}{A} A \f]\]
MassPerArea(self)[source]

Returns the mass per area

Mid(self)[source]

Returns the material ID

Todo

possibly remove this

Normal(self)[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(self)[source]

Returns the non-structural mass

Pid(self)[source]

Gets the Property ID of an element

Returns:
pid : int

the Property ID

classmethod add_card(card, comment='')[source]

Adds a CTRIAX6 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
     5               5
    / \             / \
   6   4   -->     6   4
 /       \       /       \
1----2----3     1----2----3
get_edge_ids(self)[source]

Return the edge IDs

node_ids
5

/ 6 4

/ 1—-2—-3

pid = -53
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

theta = None

theta

type = 'CTRIAX6'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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!

Thickness(self)[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUADX card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1--5--2       1--8--4
|     |  -->  |     |
8  9  6       5  9  7
|     |       |     |
4--7--3       2--6--3
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CQUADX'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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!

classmethod add_card(card, comment='')[source]

Adds a CQUADX4 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1--5--2       1--8--4
|     |  -->  |     |
8  9  6       5  9  7
|     |       |     |
4--7--3       2--6--3
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CQUADX4'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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!

Mass(self)[source]
Normal(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CQUADX8 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1--5--2       1--8--4
|     |  -->  |     |
8     6       5     7
|     |       |     |
4--7--3       2--6--3
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CQUADX8'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]

Gets the fields of the card in their full form

type = 'BAROR'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

mid : int

material id

nids : List[int, int]

node ids; connected grid points at ends A and B

x : List[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0 : int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offt : str; default=’GGG’

Offset vector interpretation flag

pa / pb : int; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wb : List[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

comment : str; default=’‘

a comment for the card

Area(self)[source]

returns the area of the element face

Centroid(self)[source]
G0(self)[source]

gets G0

Ga(self)[source]

gets Ga/G1

Gb(self)[source]

gets Gb/G2

I1(self)[source]
I2(self)[source]
J(self)[source]

returns the Polar Moment of Inertia, \(J\)

Length(self)[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(self)[source]
Nsm(self)[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:
card : BDFCard()

a BDFCard object

beamor : BAROR() or None

defines the defaults

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]

Return the edge IDs

get_orientation_vector(self, 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(self)[source]

X and G0 compete for the same fields, so the method exists to make it easier to write the card

Returns:
x_g0 : varies

g0 : List[int, None, None] x : List[float, float, float]

Notes

Used by CBAR and CBEAM

node_ids
nodes
nodes_ref
raw_fields(self)[source]

Gets the fields of the card in their full form

repr_fields(self)[source]

Gets the fields of the card in their reduced form

safe_cross_reference(self, model, xref_errors)[source]
type = 'CBAR'
uncross_reference(self)[source]

Removes cross-reference links

update_by_cp_name(self, cp_name, value)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

scale : str

defines what x means LE : x is in absolute coordinates along the bar FR : x is in fractional

x : List[float]

the additional output locations (doesn’t include the end points) len(x) <= 6

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'CBARAO'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

Area(self)[source]

returns the area of the element face

Centroid(self)[source]
G0(self)[source]

gets the orientation vector node

Ga(self)[source]

gets node 1

Gb(self)[source]

gets node 2

Gc(self)[source]

gets the node between node 1 and 2

Length(self)[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(self)[source]

Get the mass per unit length, :math:` rac{m}{L}`

Nsm(self)[source]

Placeholder method for the non-structural mass, \(nsm\)

Volume(self)[source]
classmethod _init_from_empty()[source]
_integrate(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_edge_ids(self)[source]

Return the edge IDs

get_x_g0_defaults(self)[source]

X and G0 compete for the same fields, so the method exists to make it easier to write the card

Returns:
x_g0 : varies

g0 : List[int, None, None] x : List[float, float, float]

Notes

Used by CBAR, CBEAM, and CBEAM3

node_ids
nodes
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'CBEAM3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PBEND)

nids : List[int, int]

node ids; connected grid points at ends A and B

g0 : int

???

x : List[float, float, float]

???

geom : int

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.

3 : The 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.

4 : THETAB 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.

comment : str; default=’‘

a comment for the card

Area(self)[source]

returns the area of the element face

Centroid(self)[source]
Ga(self)[source]
Gb(self)[source]
Length(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_x_g0_defaults(self)[source]
node_ids
nodes
nodes_ref
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'CBEND'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.elements.bars.LineElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

Area(self)[source]

returns the area of the element face

C(self)[source]

torsional constant

E(self)[source]

returns the Young’s Modulus, \(E\)

G(self)[source]

returns the Shear Modulus, \(G\)

I11(self)[source]

returns the Moment of Inertia, \(I_{11}\)

I12(self)[source]

returns the Moment of Inertia, \(I_{12}\)

I22(self)[source]

returns the Moment of Inertia, \(I_{22}\)

J(self)[source]

returns the Polar Moment of Inertia, \(J\)

Length(self)[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(self)[source]

Get the mass of the element.

\[m = \left( \rho A + nsm \right) L\]
MassPerLength(self)[source]

Get the mass per unit length, :math:` rac{m}{L}`

Nsm(self)[source]

Placeholder method for the non-structural mass, \(nsm\)

Nu(self)[source]

Get Poisson’s Ratio, :math:` u`

Rho(self)[source]

Get the material density, :math:` ho`

get_edge_ids(self)[source]

Return the edge IDs

uncross_reference(self)[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:
v : List[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)

eid : int

the element id

xyz1 / xyz2 : (3, ) float ndarray

the xyz locations for node 1 / 2

nid1 / nid2 : int

the node ids for xyz1 / xyz2

i : (3, ) float ndarray

the unnormalized x-axis (not including the CBEAM offset)

Li : float

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, elem, xyz1, xyz2, node1, node2, ihat_offset, i_offset, eid, Li_offset, log)[source]

Rotates v, wa, wb

Parameters:
model : BDF()

BDF : assume the model isn’t xref’d None : use the xref’d values

elem : CBAR() / CBEAM()

the CBAR/CBEAM

xyz1 / xyz2 : (3, ) float ndarray

the xyz locations for node 1 / 2

node1 / node2 : GRID()

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)

eid : int

the element id

Li_offset : float

the length of the CBAR/CBEAM (not including the CBEAM offset)

log : Log()

a logging object or None

Returns:
v : List[float, float, float]

the projection vector that defines the y-axis (jhat)

wa : List[float, float, float]

the offset vector at A

wb : List[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(self)[source]
type = 'BEAMOR'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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            

offt/bit are MSC specific fields

Adds a CBEAM card

Parameters:
pid : int

property id

mid : int

material id

nids : List[int, int]

node ids; connected grid points at ends A and B

x : List[float, float, float]

Components of orientation vector, from GA, in the displacement coordinate system at GA (default), or in the basic coordinate system

g0 : int

Alternate method to supply the orientation vector using grid point G0. Direction of is from GA to G0. is then transferred to End A

offt : str; default=’GGG’

Offset vector interpretation flag None : bit is active

bit : float; 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 / pb : int; default=0

Pin Flag at End A/B. Releases the specified DOFs

wa / wb : List[float, float, float]

Components of offset vectors from the grid points to the end points of the axis of the shear center

sa / sb : int; 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

comment : str; default=’‘

a comment for the card

offt/bit are MSC specific fields
Area(self)[source]

returns the area of the element face

Centroid(self)[source]
G0(self)[source]

gets G0

Ga(self)[source]

gets Ga/G1

Gb(self)[source]

gets Gb/G2

Mid(self)[source]
Nodes(self)[source]
Nsm(self)[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:
card : BDFCard()

a BDFCard object

beamor : BEAMOR() or None

defines the defaults

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]

the centroid formuala is way more complicated if you consider the nonstructural mass axis

center_of_mass_xform(self)[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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_axes(self, 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(self, 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(self)[source]

Return the edge IDs

get_offt_bit_defaults(self)[source]

offt doesn’t exist in NX nastran

get_x_g0_defaults(self)[source]

X and G0 compete for the same fields, so the method exists to make it easier to write the card

Returns:
x_g0 : varies

g0 : List[int, None, None] x : List[float, float, float]

Notes

Used by CBAR and CBEAM

is_bit

is the bit flag active?

is_offt

is the offt flag active?

node_ids
nodes
nodes_ref
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'CBEAM'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
pyNastran.bdf.cards.elements.beam._init_offt_bit(card, unused_eid, 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, n2, xform, dim1, dim2)[source]
^y |

0—-3 | | | |—-> z | | 1—-2

pyNastran.bdf.cards.elements.beam_connectivity.box_faces(n1, n2, xform, dim1, dim2)[source]
^ y |

0———3 | | | 4—7 | | | + | |—> z | 5—6 | | | 1———2

pyNastran.bdf.cards.elements.beam_connectivity.chan1_faces(n1, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[source]

^y | 0——–7 | | | | | 5—–6 | | | +–|--|——-> z

4—–3

1——–2

<—-> e/zsc

<——–> bflange
pyNastran.bdf.cards.elements.beam_connectivity.h_faces(n1, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[source]
^ y |

0—–5 ^ hall

/ | |

/ | |

1 +—–4—z | / |

/ |
2_______3 v
<-> wtri

<———–> wall

pyNastran.bdf.cards.elements.beam_connectivity.i1_faces(n1, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[source]
^y |

0—–5 ^ hall | | | | | | | | | | | | | | 4—3 | ^ tflange | +——|——-> z | | 1———2 v v

<—-> tweb <———> bflange

pyNastran.bdf.cards.elements.beam_connectivity.rod_faces(n1, n2, xform, dim1, dim2)[source]

defines points in a circle with triangle based end caps

pyNastran.bdf.cards.elements.beam_connectivity.t1_faces(n1, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[source]
^y |

0–7 | | | |

2–1 6–5 | |—->z 3——–4

bflange

<———->

pyNastran.bdf.cards.elements.beam_connectivity.t_faces(n1, n2, xform, dim1, dim2)[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, n2, xform, dim1, dim2)[source]

defines a rod with a hole

pyNastran.bdf.cards.elements.beam_connectivity.z_faces(n1, n2, xform, dim1, dim2)[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

Cid(self)[source]
Mass(self)[source]
get_edge_ids(self)[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:
eid : int

Element id

pid : int

Property id (PBUSH)

nids : List[int, int]

node ids; connected grid points at ends A and B The nodes may be coincident, but then cid is required.

x : List[float, float, float]; None
List : the directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use g0

g0 : int/None
int : the directional vector used to define the stiffnesses

or damping from the PBUSH card

None : use x

cid : int; 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)

ocid : int; 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)

si : List[float, float, float]; default=None

Components of spring-damper offset in the OCID coordinate system if OCID > 0. None : [None, None, None]

comment : str; default=’‘

a comment for the card

Cid(self)[source]
G0(self)[source]
Ga(self)[source]
Gb(self)[source]
OCid(self)[source]
_get_x_g0(self)[source]
_properties = ['_field_map']
classmethod add_card(card, comment='')[source]

Adds a CBUSH card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CBUSH'
uncross_reference(self)[source]

Removes cross-reference links

update_by_cp_name(self, cp_name, value)[source]
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

Ga(self)[source]
Gb(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CBUSH1D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

node_ids
nodes
nodes_ref
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CBUSH1D'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.

Ga(self)[source]
Gb(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CBUSH2D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids, encoding='ascii')[source]

exports the elements in a vectorized way

node_ids
nodes
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CBUSH2D'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PDAMP)

nids : List[int, int]

node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

B(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CDAMP1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

b : float

damping

nids : List[int, int]

SPOINT ids node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

B(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CDAMP2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PDAMP)

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

B(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CDAMP3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

b : float

damping

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

B(self)[source]
classmethod add_card(card, icard=0, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CDAMP4'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PDAMP5)

nids : List[int, int]

GRID/SPOINT ids

comment : str; default=’‘

a comment for the card

B(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CDAMP5 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CDAMP5'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PVISC)

nids : List[int, int]

GRID ids

comment : str; default=’‘

a comment for the card

B(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CVISC card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CVISC'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.elements.damper.DamperElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

class pyNastran.bdf.cards.elements.damper.LineDamper[source]

Bases: pyNastran.bdf.cards.elements.damper.DamperElement

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

Ga(self)[source]

Gets the GA node

Gb(self)[source]

Gets the GB node

Gs(self)[source]

Gets the GS node

classmethod _init_from_empty()[source]
_properties = ['node_ids', 'nodes']
classmethod add_card(card, comment='')[source]

Adds a CFAST card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp_name_map = {}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_edge_ids(self)[source]
node_ids

gets all the node ids used on the CFAST (Gs, Ga, Gb)

nodes

gets all the nodes used on the CFAST (Gs, Ga, Gb)

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CFAST'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

Element ID

pid : int

Property ID (PGAP)

nids : List[int, int]

node ids; connected grid points at ends A and B

x : List[float, float, float]

Components of the orientation vector, from GA, in the displacement coordinate system at GA

g0 : int

GO Alternate method to supply the orientation vector using grid point GO. Direction of is from GA to GO

cid : int; default=None

Element coordinate system identification number. CID must be specified if GA and GB are coincident (distance from GA to GB < 10^-4)

comment : str; default=’‘

a comment for the card

Cid(self)[source]
G0(self)[source]
Ga(self)[source]
Gb(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CGAP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
nodes
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CGAP'
uncross_reference(self)[source]

Removes cross-reference links

update_by_cp_name(self, cp_name, value)[source]
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
type = 'CRAC2D'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
type = 'CRAC3D'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.elements.elements.CrackElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'Crack'
uncross_reference(self)[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(self, encoding)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids', 'ul_nodes', 'ud_nodes', 'nodes']
classmethod add_card(card, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
nodes
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'GENEL'
ud_nodes

gets the {UD} nodes

ul_nodes

gets the {UL} nodes

uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

Element ID

nodes : List[int, int]

Unique GRID point IDs

classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a PLOTEL card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, encoding)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'PLOTEL'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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, pid, nids, c1=0, c2=0, comment='')[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:
eid : int

element id

pid : int

property id (PMASS)

nids : List[int, int]

node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

Centroid(self)[source]

Centroid is assumed to be c=(g1+g2)/2. If g2 is blank, then the centroid is the location of g1.

G1(self)[source]
G2(self)[source]
Mass(self)[source]
Pid(self)[source]

Gets the Property ID of an element

Returns:
pid : int

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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CMASS1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

mass : float

mass

nids : List[int, int]

node ids

c1 / c2 : int; default=None

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

Centroid(self)[source]

Centroid is assumed to be c=(g1+g2)/2. If g2 is blank, then the centroid is the location of g1.

G1(self)[source]
G2(self)[source]
Mass(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CMASS2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cp_name_map = {'M': 'mass'}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the masses in a vectorized way

node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CMASS2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PMASS)

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

Centroid(self)[source]
Mass(self)[source]
S1(self)[source]
S2(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CMASS3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
type = 'CMASS3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

mass : float

SPOINT mass

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

Centroid(self)[source]
Mass(self)[source]
S1(self)[source]
S2(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, icard=0, comment='')[source]
center_of_mass(self)[source]
cp_name_map = {'M': 'mass'}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'CMASS4'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

nid : int

the node to put the mass matrix

mass_matrix : (6, 6) float ndarray

the 6x6 mass matrix, M

cid : int; default=0

the coordinate system for the mass matrix

comment : str; 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(self)[source]
static Mass()[source]
MassMatrix(self)[source]
Nid(self)[source]
_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CONM1'
uncross_reference(self)[source]

Removes cross-reference links

update_by_cp_name(self, name, value)[source]
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

nid : int

node id

mass : float

the mass of the CONM2

cid : int; 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

comment : str; default=’‘

a comment for the card

Centroid(self)[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(self, model)[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(self)[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(self)[source]

Returns the 3x3 inertia matrix .. warning:: doesnt handle offsets or coordinate systems

Mass(self)[source]
Nid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cid = None

Coordinate system identification number. For CID of -1; see X1, X2, X3 below. (Integer > -1; Default = 0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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)

node_ids
offset(self, xyz_nid)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CONM2'
uncross_reference(self)[source]

Removes cross-reference links

update_by_cp_name(self, name, value)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.elements.mass.PointMassElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[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:
eid : int

element id

nids : List[int, int]

node ids; connected grid points at ends A and B

cna / cnb : str

independent DOFs in ‘123456’

cma / cmb : str

dependent DOFs in ‘123456’

alpha : float; default=0.0

coefficient of thermal expansion

comment : str; default=’‘

a comment for the card

Ga(self)[source]
Gb(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids

independent_nodes

gets the independent node ids

nodes
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'RBAR'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
Ga(self)[source]
Gb(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids

independent_nodes

gets the independent node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'RBAR1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

Gni : List[int]

independent node ids

Cni : List[str]

the independent components (e.g., ‘123456’)

Gmi : List[int]

dependent node ids

Cmi : List[str]

the dependent components (e.g., ‘123456’)

alpha : float; default=0.

thermal expansion coefficient

comment : str; default=’‘

a comment for the card

Gmi_node_ids
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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids

independent_nodes

gets the independent node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'RBE1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.elements.rigid.RBE2(eid, gn, cm, Gmi, alpha=0.0, comment='')[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      

Creates an RBE2 element

Parameters:
eid : int

element id

gn : int

Identification number of grid point to which all six independent degrees-of-freedom for the element are assigned.

cm : str

Component numbers of the dependent degrees-of-freedom in the global coordinate system at grid points GMi.

Gmi : List[int]

dependent nodes

alpha : float; default=0.0

???

Gmi_node_ids
Gn(self)[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:
card : BDFCard()

a BDFCard object

comment : str; 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(self, 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

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)

independent_nodes

gets the independent node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'RBE2'
uncross_reference(self)[source]

Removes cross-reference links

update(self, maps)[source]

Updates the card without xref

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.elements.rigid.RBE3(eid, refgrid, refc, weights, comps, Gijs, Gmi=None, Cmi=None, alpha=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.rigid.RigidElement

Todo

not done, needs testing badly

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:
eid : int

element id

refgrid : int

dependent node

refc : str

dependent components for refgrid???

GiJs : List[int, …, int]

independent nodes

comps : List[str, …, str]

independent components

weights : List[float, …, float]

weights for the importance of the DOF

Gmi : List[int, …, int]; default=None -> []

dependent nodes / UM Set

Cmi : List[str, …, str]; default=None -> []

dependent components / UM Set

alpha : float; default=0.0

thermal expansion coefficient

comment : str; default=’‘

a comment for the card

Gijs_node_ids
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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids TODO: not checked

independent_nodes

gets the independent node ids TODO: not checked

raw_fields(self)[source]
ref_grid_id
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, debug=True)[source]
type = 'RBE3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
eid : int

element id

nids : List[int, int]

node ids; connected grid points at ends A and B

cma / cmb : str; default=None

dependent DOF must be in [None, ‘1’, ‘2’, ‘3’] one of them must be None

alpha : float; default=0.0

coefficient of thermal expansion

comment : str; default=’‘

a comment for the card

Ga(self)[source]
Gb(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids

independent_nodes

gets the independent node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'RROD'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

independent_nid : int

the independent node id

dependent_nids : List[int]

the dependent node ids

dependent_components : List[str]

Components to be constrained

diameter_ratio : float; default=0.1

Ratio of the diameter of the elastic tube to the sum of the lengths of all segments

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids

independent_nodes

gets the independent node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'RSPLINE'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

rigid_type : str

GRID/ELEM

shell/solid_eid : int; default=None

the shell/solid element id (if rigid_type=ELEM)

shell/solid_grids : List[int, int]; default=None

the shell/solid node ids (if rigid_type=GRID)

comment : str; default=’‘

a comment for the card

B—-S—-A
EidShell(self)[source]
EidSolid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RSSCON card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

dependent_nodes

gets the dependent node ids

independent_nodes

gets the independent node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, model)[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:
eid : int

element id

mid : int

material id

nids : List[int, int]

node ids

A : float

area

j : float; default=0.

polar moment of inertia

c : float; default=0.

stress factor

nsm : float; default=0.

non-structural mass per unit length

comment : str; default=’‘

a comment for the card

Area(self)[source]
C(self)[source]

torsional constant

Centroid(self)[source]

Get the centroid of the element (save as the center of mass for the CONROD)

E(self)[source]

returns the Young’s Modulus, :math:`E`$

G(self)[source]

returns the Shear Modulus, \(G\)

J(self)[source]

returns the Polar Moment of Inertia, \(J\)

Length(self)[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(self)[source]

Gets the mass per length of the CONROD

Mid(self)[source]
Nsm(self)[source]

Placeholder method for the non-structural mass

Pid(self)[source]

Spoofs the property id for the CONROD

Rho(self)[source]

returns the material density f$ rho f$

classmethod add_card(card, comment='')[source]

Adds a CONROD card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]

Get the center of mass of the element (save as the centroid for the CONROD)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

pid = -10
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CONROD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PROD)

nids : List[int, int]

node ids

comment : str; default=’‘

a comment for the card

Area(self)[source]
C(self)[source]
Centroid(self)[source]
E(self)[source]
G(self)[source]
J(self)[source]
Length(self)[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(self)[source]
Mid(self)[source]
Nsm(self)[source]
Rho(self)[source]

returns the material density f$ rho f$

classmethod add_card(card, comment='')[source]

Adds a CROD card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]
classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CROD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

pid : int

property id

nids : List[int, int]

node ids

comment : str; default=’‘

a comment for the card

Area(self)[source]
Centroid(self)[source]
E(self)[source]
G(self)[source]
J(self)[source]
Length(self)[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(self)[source]

get the mass of the element.

\[m = \left( \rho A + nsm \right) L\]
Mid(self)[source]
Nsm(self)[source]
Rho(self)[source]

returns the material density f$ rho f$

classmethod add_card(card, comment='')[source]

Adds a CTUBE card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]
classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTUBE'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.elements.rods.RodElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

Mass(self)[source]

get the mass of the element.

\[m = \left( \rho A + nsm \right) L\]
get_edge_ids(self)[source]
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, pid, nids, zoffset=0.0, theta_mcid=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
CTRIA3 EID PID N1 | N2 N3 THETA/MCID ZOFFSET
    TFLAG T1 T2 T3    

Creates a CTRIA3 card

Parameters:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 : float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

_get_repr_defaults(self)[source]
_properties = ['cp_name_map', '_field_map']
classmethod add_card(card, comment='')[source]

Adds a CTRIA3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp_name_map = {'T1': 'T1', 'T2': 'T2', 'T3': 'T3'}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal(self)[source]

Flips normal of element.

   1           1
  * *   -->   * *
 *   *       *   *
2-----3     3-----2
get_thickness_scale(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTRIA3'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int/None, int/None, int/None]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 : float; default=None

If it is not supplied, then T1 through T3 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

Area(self)[source]

Get the area, \(A\).

\[A = \frac{1}{2} (n_0-n_1) \times (n_0-n_2)\]
AreaCentroidNormal(self)[source]

Returns area, centroid, normal as it’s more efficient to do them together

Centroid(self)[source]

Get the centroid.

\[CG = \frac{1}{3} (n_1+n_2+n_3)\]
Normal(self)[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(self)[source]

Returns the thickness, \(t\)

_get_repr_defaults(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CTRIA6 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

flip_normal(self)[source]

Flips normal of element.

    1                1
    **               **
   *  *             *  *
  4    6   -->     6    4
 *      *         *      *
2----5---3       3----5---2
get_thickness_scale(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTRIA6'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PSHEAR)

nids : List[int, int, int, int]

node ids

comment : str; default=’‘

a comment for the card

Area(self)[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(self)[source]
::
1—–2 | /| | A1/ | | / | |/ A2 | 4—–3
AreaCentroidNormal(self)[source]
Centroid(self)[source]
G(self)[source]
Mass(self)[source]
\[m = \frac{m}{A} A \f]\]
Normal(self)[source]
Thickness(self)[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CSHEAR card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

center_of_mass(self)[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1---2       1---4
|   |  -->  |   |
|   |       |   |
4---3       2---3
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CSHEAR'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int, int/None, int/None,

int/None, int/None, int/None]

node ids

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

comment : str; default=’‘

a comment for the card

Area(self)[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(self)[source]
\[m = \frac{m}{A} A \f]\]
Thickness(self)[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUAD card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1--5--2       1--8--4
|     |  -->  |     |
8  9  6       5  9  7
|     |       |     |
4--7--3       2--6--3
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CQUAD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4 : float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp_name_map = {'T1': 'T1', 'T2': 'T2', 'T3': 'T3', 'T4': 'T4'}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1---2       1---4
|   |  -->  |   |
|   |       |   |
4---3       2---3
get_thickness_scale(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

split_to_ctria3(self, 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(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_as_ctria3(self, new_eid)[source]

triangle - 012 triangle - 023

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int, int/None, int/None, int/None, int/None]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4 : float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

Area(self)[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(self)[source]
1-----2
|    /|
| A1/ |
|  /  |
|/ A2 |
4-----3

centroid
   c = sum(ci*Ai)/sum(A)
   where:
     c=centroid
     A=area
Normal(self)[source]
Thickness(self)[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUAD8 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1--5--2       1--8--4
|     |  -->  |     |
8     6       5     7
|     |       |     |
4--7--3       2--6--3
get_thickness_scale(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CQUAD8'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PSHELL/PCOMP/PCOMPG)

nids : List[int, int, int, int]

node ids

zoffset : float; default=0.0

Offset from the surface of grid points to the element reference plane. Requires MID1 and MID2.

theta_mcid : float; default=0.0
float : material coordinate system angle (theta) is defined

relative to the element coordinate system

int : x-axis from material coordinate system angle defined by

mcid is projected onto the element

tflag : int; default=0

0 : Ti are actual user specified thicknesses 1 : Ti are fractions relative to the T value of the PSHELL

T1 / T2 / T3 / T4 : float; default=None

If it is not supplied, then T1 through T4 will be set equal to the value of T on the PSHELL entry.

comment : str; default=’‘

a comment for the card

Thickness(self)[source]

Returns the thickness

classmethod add_card(card, comment='')[source]

Adds a CQUADR card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
1---2       1---4
|   |  -->  |   |
|   |       |   |
4---3       2---3
get_thickness_scale(self)[source]
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CQUADR'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

type = 'CPLSTN4'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

type = 'CPLSTN6'
class pyNastran.bdf.cards.elements.shell.CPLSTN8(eid, pid, nids, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.elements.shell.CPLSTx8

type = 'CPLSTN8'
pyNastran.bdf.cards.elements.shell._triangle_area_centroid_normal(nodes, card)[source]

Gets the area, centroid and normal for a triangle.

Parameters:
nodes : List[np.ndarray]

List of three triangle vertices.

Returns:
area : float

Area of triangle.

centroid : ndarray

Centroid of triangle.

unit_normal : ndarray

Unit normal of triangles.

card : CTRIA3(), 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

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:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=20

Centroid(self)[source]

See also

CHEXA8.Centroid

Volume(self)[source]

See also

CHEXA8.Volume

classmethod add_card(card, comment='')[source]

Adds a CHEXA20 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[source]

Return the edge IDs

get_face(self, nid_opposite, nid)[source]
get_face_area_centroid_normal(self, nid, nid_opposite)[source]
Parameters:
nid : int

G1 - a grid point on the corner of a face

nid_opposite : int

G3 - the grid point diagonally opposite of G1

node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CHEXA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=8

Centroid(self)[source]

Averages the centroids at the two faces

Volume(self)[source]

Calculate the volume of the hex

classmethod add_card(card, comment='')[source]

Adds a CHEXA8 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[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(self, nid_opposite, nid)[source]
get_face_area_centroid_normal(self, nid, nid_opposite)[source]
Parameters:
nid : int

G1 - a grid point on the corner of a face

nid_opposite : int

G3 - the grid point diagonally opposite of G1

material_coordinate_system(self, xyz=None)[source]

http://www.ipes.dk/Files/Ipes/Filer/nastran_2016_doc_release.pdf

node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CHEXA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CIHEX1(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.CHEXA8

type = 'CIHEX1'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.CIHEX2(eid, pid, nids, comment='')[source]

Bases: pyNastran.bdf.cards.elements.solid.CHEXA20

type = 'CIHEX2'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=15

Centroid(self)[source]

See also

CPENTA6.Centroid

Volume(self)[source]

See also

CPENTA6.Volume

classmethod add_card(card, comment='')[source]

Adds a CPENTA15 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[source]

Return the edge IDs

get_face(self, nid, nid_opposite)[source]
get_face_area_centroid_normal(self, nid, nid_opposite=None)[source]
node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CPENTA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=6

Centroid(self)[source]
Volume(self)[source]

Calculate the volume of the penta

classmethod add_card(card, comment='')[source]

Adds a CPENTA6 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[source]

Return the edge IDs

get_face(self, nid, nid_opposite=None)[source]
get_face_area_centroid_normal(self, nid, nid_opposite=None)[source]
get_face_nodes_and_area(self, nid, nid_opposite)[source]
material_coordinate_system(self, xyz=None)[source]

http://www.ipes.dk/Files/Ipes/Filer/nastran_2016_doc_release.pdf

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CPENTA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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    
Centroid(self)[source]

See also

CPYRAM5.Centroid

Volume(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[source]

Return the edge IDs

node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CPYRAM'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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
Centroid(self)[source]

See also

CPYRAM5.Centroid

Volume(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[source]

Return the edge IDs

node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CPYRAM'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=10

Centroid(self)[source]

Gets the cenroid of the primary tetrahedron.

See also

CTETRA4.Centroid

Volume(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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(self)[source]

Return the edge IDs

get_face_area_centroid_normal(self, nid_opposite, nid=None)[source]
get_face_nodes(self, nid_opposite, nid=None)[source]
node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTETRA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
eid : int

element id

pid : int

property id (PSOLID, PLSOLID)

nids : List[int]

node ids; n=4

comment : str; default=’‘

a comment for the card

Centroid(self)[source]
Volume(self)[source]

Calculate the volume of the tet

classmethod add_card(card, comment='')[source]

Adds a CTETRA4 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

ansys_faces

Gets the faces of the element

Returns:
faces : Dict[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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Element ID

faces

Gets the faces of the element

Returns:
faces : Dict[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)
get_edge_ids(self)[source]

Return the edge IDs

get_face(self, nid_opposite, nid)[source]
get_face_area_centroid_normal(self, nid, nid_opposite)[source]
get_face_nodes(self, nid_opposite, nid=None)[source]
material_coordinate_system(self, xyz=None)[source]

http://www.ipes.dk/Files/Ipes/Filer/nastran_2016_doc_release.pdf

node_ids
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CTETRA'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.elements.solid.SolidElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

E(self)[source]
G(self)[source]
Mass(self)[source]

Calculates the mass of the solid element Mass = Rho * Volume

Mid(self)[source]

Returns the material ID as an integer

Nu(self)[source]
Rho(self)[source]

Returns the density

Volume(self)[source]

Base volume method that should be overwritten

_properties = ['faces']
center_of_mass(self)[source]
cross_reference(self, model)[source]
classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_face_area_centroid_normal(self, nid_opposite, nid=None)[source]
raw_fields(self)[source]
uncross_reference(self)[source]

Removes cross-reference links

pyNastran.bdf.cards.elements.solid.area_centroid(n1, n2, n3, n4)[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:
nid : int

G1 - a grid point on the corner of a face

nid_opposite : int

G3 - the grid point diagonally opposite of G1

nodes_ref : List[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:
nid : int

G1 - a grid point on the corner of a face

nid_opposite : int / 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:
nid : int

G1 - a grid point on the corner of a face

nid_opposite : int

G4 - a grid point not being loaded

pyNastran.bdf.cards.elements.solid.volume4(n1, n2, n3, n4)[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:
eid : int

element id

pid : int

property id (PELAS)

nids : List[int, int]

node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

comment : str; default=’‘

a comment for the card

K(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

c1 = None

component number

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CELAS1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

k : float

spring stiffness

nids : List[int, int]

SPOINT ids node ids

c1 / c2 : int; default=0

DOF for nid1 / nid2

ge : int; default=0.0

damping coefficient

s : float; default=0.0

stress coefficient

comment : str; default=’‘

a comment for the card

K(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

c1 = None

component number

cp_name_map = {'GE': 'ge', 'K': 'k', 'S': 's'}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
k = None

stiffness of the scalar spring

node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

s = None

stress coefficient

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CELAS2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

pid : int

property id (PELAS)

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

K(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
node_ids
nodes = None

Scalar point identification numbers

raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CELAS3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
eid : int

element id

k : float

spring stiffness

nids : List[int, int]

SPOINT ids

comment : str; default=’‘

a comment for the card

K(self)[source]
classmethod add_card(card, comment='')[source]

Adds a CELAS4 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cp_name_map = {'K': 'k'}
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, eids)[source]

exports the elements in a vectorized way

get_edge_ids(self)[source]
k = None

stiffness of the scalar spring

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'CELAS4'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.elements.springs.SpringElement[source]

Bases: pyNastran.bdf.cards.base_card.Element

Mass(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

write_card_16(self, 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, dim)[source]
BAR
    2
    ^
    |
*---|--*
|   |  |
|   |  |
|h  *-----------> 1
|      |
|   b  |
*------*
\[I_1 = \frac{1}{12} b h^3\]
\[I_2 = \frac{1}{12} h b^3\]
pyNastran.bdf.cards.properties.bars.I1_I2_I12(prop)[source]
class pyNastran.bdf.cards.properties.bars.IntegratedLineProperty[source]

Bases: pyNastran.bdf.cards.properties.bars.LineProperty

Area(self)[source]

gets area

I11(self)[source]

gets I11

I12(self)[source]
I22(self)[source]

gets I22

J(self)[source]

gets J

Nsm(self)[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

Area(self)[source]

gets area

E(self)[source]

gets the material Young’s ratio

G(self)[source]

gets the material Shear ratio

I11(self)[source]

gets I11

I22(self)[source]

gets I22

J(self)[source]

gets J

Nsm(self)[source]

gets nonstructural mass per unit length

Nu(self)[source]

gets the material Poisson’s ratio

Rho(self)[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:
pid : int

property id

mid : int

material id

area : float

area

i1, i2, i12, j : float

moments of inertia

nsm : float; default=0.

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2 : float

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2 : float; default=1.e8

Shear stiffness factor K in K*A*G for plane 1/2.

comment : str; default=’‘

a comment for the card

A = None

Area -> use Area()

Area(self)[source]

Gets the area \(A\) of the CBAR.

I11(self)[source]

gets the section I11 moment of inertia

I12(self)[source]

gets the section I12 moment of inertia

I22(self)[source]

gets the section I22 moment of inertia

MassPerLength(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBAR'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

mid : int

material id

Type : str

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}

dim : List[float]

dimensions for cross-section corresponding to Type; the length varies

group : str; default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

nsm : float; default=0.

non-structural mass

comment : str; 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(self)[source]

Gets the area \(A\) of the CBAR.

I1(self)[source]

gets the section I1 moment of inertia

I11(self)[source]

gets I11

I12(self)[source]

gets the section I12 moment of inertia

I1_I2_I12(self)[source]
I2(self)[source]

gets the section I2 moment of inertia

I22(self)[source]

gets I22

J(self)[source]

gets J

MassPerLength(self)[source]

Gets the mass per length \(\frac{m}{L}\) of the CBAR.

\[\frac{m}{L} = A \rho + nsm\]
Nsm(self)[source]

Gets the non-structural mass \(nsm\) of the CBAR.

Type

Section Type (e.g. ‘ROD’, ‘TUBE’, ‘I’, ‘H’)

classmethod _init_from_empty()[source]
_points(self, beam_type, dim)[source]
_properties = ['Type', 'valid_types']
classmethod add_card(card, comment='')[source]

Adds a PBARL card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid = None

Material ID

nsm = None

non-structural mass

pid = None

Property ID

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBARL'
uncross_reference(self)[source]

Removes cross-reference links

update_by_pname_fid(self, 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(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

mid : int

material id

A : List[float]

areas for ABC

iz / iy / iyz : List[float]

area moment of inertias for ABC

iyz : List[float]; default=None -> [0., 0., 0.]

area moment of inertias for ABC

j : List[float]; default=None

polar moment of inertias for ABC None -> iy + iz from section A for ABC

so : List[str]; default=None

None -> [‘YES’, ‘YESA’, ‘YESA’]

cy / cz / dy / dz / ey / ez / fy / fz : List[float]; default=[0., 0., 0.]

stress recovery loctions for ABC

ny / nz : List[float]

Local (y, z) coordinates of neutral axis for ABC

my / mz : List[float]

Local (y, z) coordinates of nonstructural mass center of gravity for ABC

nsiy / nsiz / nsiyz : List[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

cw : List[float]

warping coefficients for ABC

stress : str; 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(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
type = 'PBEAM3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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    
MassPerLength(self)[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:
A : float

cross-sectional area

i1, i2 : float

area moments of inertia for plane 1/2

j : float

torsional stiffness

rb : float; default=None

bend radius of the line of centroids

theta_b : float; default=None

arc angle of element (degrees)

c1, c2, d1, d2, e1, e2, f1, f2 : float; default=0.0

the r/z locations from the geometric centroid for stress recovery

k1, k2 : float; default=None

Shear stiffness factor K in K*A*G for plane 1 and plane 2

nsm : float; default=0.

nonstructural mass per unit length???

zc : float; default=None

Offset of the geometric centroid in a direction perpendicular to the plane of points GA and GB and vector v.

delta_n : float; 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:
fsi : int

Flag selecting the flexibility and stress intensification factors. See Remark 3. (Integer = 1, 2, or 3)

rm : float

Mean cross-sectional radius of the curved pipe

t : float

Wall thickness of the curved pipe

p : float; default=None

Internal pressure

rb : float; default=None

bend radius of the line of centroids

theta_b : float; default=None

arc angle of element (degrees)

nsm : float; default=0.

nonstructural mass per unit length???

rc : float; default=None

Radial offset of the geometric centroid from points GA and GB.

zc : float; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBEND'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

Area(self)[source]

Gets the area \(A\) of the CBAR.

I11(self)[source]

gets I11

I22(self)[source]

gets I22

J(self)[source]

gets J

MassPerLength(self)[source]

Gets the mass per length \(\frac{m}{L}\) of the CBAR.

\[\frac{m}{L} = A \rho + nsm\]
Nsm(self)[source]

Gets the non-structural mass \(nsm\) of the CBAR.

_finalize_hdf5(self, encoding)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBRSECT card from BDF.add_card(...)

Parameters:
card : List[str]

this card is special and is not a BDFCard like other cards

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

plot(self, model, figure_id=1, show=False)[source]

Plots the beam section

Parameters:
model : BDF()

the BDF object

figure_id : int; default=1

the figure id

show : bool; default=False

show the figure when done

raw_fields(self)[source]

not done…

repr_fields(self)[source]

not done…

type = 'PBRSECT'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
dim : List[float]

a list of the dimensions associated with beam_type

Returns:
Area : float

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)[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_parameters : List[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, value)[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:
pid : int

Property ID

mid : int

Material ID

mids : List[int]

Material ID for the i-th integration point

y / z : List[float]

The (y,z) coordinates of the lumped areas in the element coordinate system

c : List[float]; default=0.0

Fraction of the total area for the i-th lumped area default not supported…

area : float

Area of beam cross section

i1 / i2 : float; default=0.0

Area moment of inertia about plane 1/2 about the neutral axis

i12 : float; default=0.0

area product of inertia

j : float; default=0.0

Torsional moment of interia

nsm : float; default=0.0

Nonstructural mass per unit length

k1 / k2 : float; default=1.0

Shear stiffness factor K in K*A*G for plane 1/2

m1 / m2 : float; default=0.0

The (y,z) coordinates of center of gravity of nonstructural mass

n1 / n2 : float; default=0.0

The (y,z) coordinates of neutral axis

symopt : int; default=0

Symmetry option to input lumped areas for the beam cross section 0 < Integer < 5

comment : str; default=’‘

a comment for the card

MassPerLength(self)[source]
Mids(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBCOMP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBCOMP'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

mid : int

material id

xxb : List[float]

The percentage locations along the beam [0., …, 1.]

so : List[str]

YES, YESA, NO

area : List[float]

area

i1, i2, i12, j : List[float]

moments of inertia

nsm : List[float]

nonstructural mass per unit length

c1/c2, d1/d2, e1/e2, f1/f2 : List[float]; default=None -> [0.]*nxxb

the y/z locations of the stress recovery points c1 - point C.y c2 - point C.z

k1 / k2 : float; default=1.

Shear stiffness factor K in K*A*G for plane 1/2.

s1 / s2 : float; default=0.

Shear relief coefficient due to taper for plane 1/2.

nsia / nsia : float; default=0. / nsia

non structural mass moment of inertia per unit length about nsm center of gravity at Point A/B.

cwa / cwb : float; default=0. / cwa

warping coefficient for end A/B.

m1a / m2a : float; default=0. / 0.

y/z coordinate of center of gravity of nonstructural mass for end A.

m1b / m2b : float; default=m1a / m2a

y/z coordinate of center of gravity of nonstructural mass for end B.

n1a / n2a : float; default=0. / 0.

y/z coordinate of neutral axis for end A.

n1b / n2b : float; default=n1a / n2a

y/z coordinate of neutral axis for end B.

comment : str; default=’‘

a comment for the card

I1_I2_I12(self)[source]
MassPerLength(self)[source]

mass = L*(Area*rho+nsm) mass/L = Area*rho+nsm

classmethod _init_from_empty()[source]
_interpolate_sections(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

cwa = None

warping coefficient for end A.

cwb = None

warping coefficient for end B.

get_optimization_value(self, name_str)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self, name_str, value)[source]
type = 'PBEAM'
uncross_reference(self)[source]

Removes cross-reference links

update_by_pname_fid(self, pname_fid, value)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, is_double=False)[source]
class pyNastran.bdf.cards.properties.beam.PBEAML(pid, mid, beam_type, xxb, dims, so=None, nsm=None, group='MSCBML0', comment='')[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:
pid : int

property id

mid : int

material id

beam_type : str

the section profile

xxb : List[float]

The percentage locations along the beam [0., …, 1.]

dims : List[dim]
dim : List[float]

The dimensions for each section

so : List[str]; default=None

YES, YESA, NO None : [0.] * len(xxb)

nsm : List[float]; default=None

nonstructural mass per unit length None : [0.] * len(xxb)

group : str; default=’MSCBML0’

this parameter can lead to a very broken deck with a very bad error message; don’t touch it!

comment : str; default=’‘

a comment for the card

Area(self)[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(self)[source]

gets I11

I12(self)[source]
I22(self)[source]

gets I22

J(self)[source]

gets J

MassPerLength(self)[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\]
Type

gets Type

_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

beam_type = None

Section Type (e.g. ‘ROD’, ‘TUBE’, ‘I’, ‘H’)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]

helper method for MassPerLength a*rho + nsm

mid = None

Material ID

pid = None

Property ID

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBEAML'
uncross_reference(self)[source]

Removes cross-reference links

update_by_pname_fid(self, 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(self)[source]

card checking method that should be overwritten

verify(self, model, isubcase)[source]
write_card(self, size=8, is_double=False)[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

Area(self)[source]

Gets the area \(A\) of the CBEAM.

I11(self)[source]

gets I11

I22(self)[source]

gets I22

J(self)[source]

gets J

MassPerLength(self)[source]

Gets the mass per length \(\frac{m}{L}\) of the CBEAM.

\[\frac{m}{L} = A \rho + nsm\]
Nsm(self)[source]

Gets the non-structural mass \(nsm\) of the CBEAM.

_finalize_hdf5(self, 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:
card : List[str]

this card is special and is not a BDFCard like other cards

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid = None

Material ID

outp_id
pid = None

Property ID

plot(self, model, figure_id=1, show=False)[source]

Plots the beam section

Parameters:
model : BDF()

the BDF object

figure_id : int; default=1

the figure id

show : bool; default=False

show the figure when done

raw_fields(self)[source]

not done…

repr_fields(self)[source]

not done…

type = 'PBMSECT'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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_fid : int

for a PBEAM this should be between [-5, -167] the negative values correspond to the numbers in the MPT OP2 table

Returns:
pname_fid : str

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

cross_reference(self, model)[source]
type = 'BushingProperty'
uncross_reference(self)[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:
pid : int

property id

k : List[float]

Nominal stiffness values in directions 1 through 6. len(k) = 6

b : List[float]

Nominal damping coefficients in direction 1 through 6 in units of force per unit velocity len(b) = 6

ge : List[float]

Nominal structural damping constant in directions 1 through 6. len(ge) = 6

rcv : List[float]; default=None -> (None, None, None, None)

[sa, st, ea, et] = rcv length(mass_fields) = 4

mass : float; default=None

lumped mass of the CBUSH This is an MSC only parameter.

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBUSH'
update_by_pname_fid(self, name, value)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.properties.bush.PBUSH1D(pid, k=0.0, c=0.0, m=0.0, sa=0.0, se=0.0, optional_vars=None, comment='')[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:
pid : int

property id

k : float

stiffness

c : float

Viscous damping

m : float

mass

sa : float

Stress recovery coefficient [1/area].

se : float

Strain recovery coefficient [1/length].

optional_vars : dict[name]
name : str

SHOCKA, SPRING, DAMPER, GENER

values : List[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/EXPVC : int

Exponent of velocity EXPV for tension v > 0 (or compression v < 0).

IDTS : int

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/IDECS : int

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/IDECSD : int

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

TYPE : int

the type of the result; {TABLE, EQUAT}

IDT/IDC : int

tension/compression table/equation

IDTDU/IDCDU : int

du/dt tension/compression table/eq

IDTDV/IDCDV : int

dv/dt tension/compression table/eq

_damper_fields(self)[source]
_gener_fields(self)[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(self)[source]
_spring_fields(self)[source]
classmethod add_card(card, comment='')[source]

Adds a PBUSH1D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

pid = None

Property ID

pname_fid_map = {'C': 'c', 'K': 'k', 'M': 'm'}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PBUSH1D'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.properties.bush.PBUSH2D(card=None, comment='')[source]

Bases: pyNastran.bdf.cards.properties.bush.BushingProperty

type = 'PBUSH2D'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PBUSHT card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'PBUSHT'
update_by_pname_fid(self, name, value)[source]
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

cross_reference(self, model)[source]
uncross_reference(self)[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            
B(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a PDAMP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

icard : int; default=0

the index of the card that’s being parsed

comment : str; 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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PDAMP'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]

returns the material ID of an element

Returns:
mid : int

the Material ID

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PDAMP5 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; 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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PDAMP5'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.properties.damper.PDAMPT(pid, tbid, comment='')[source]

Bases: pyNastran.bdf.cards.properties.damper.DamperProperty

Tbid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PDAMPT card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

pid = None

Property ID

pname_fid_map = {}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id for a CVISC

ce : float

Viscous damping values for extension in units of force per unit velocity

cr : float

Viscous damping values for rotation in units of moment per unit velocity.

comment : str; 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:
card : BDFCard()

a BDFCard object

icard : int; default=0

the index of the card that’s being parsed

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
pname_fid_map = {'CE1': 'ce'}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PVISC'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Case control NSM id

nsm_type : str

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

}

value : float

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

ids : List[int]

property ids or element ids depending on nsm_type

comment : str; default=’‘

a comment for the card

Type

gets the nsm_type

classmethod add_card(card, comment='')[source]

Adds a NSM1/NSML1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

the NSM Case Control value

sets : List[int]

the NSM, NSM1, NSML, NSML1 values

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

nsm_ids

gets the nonstructural-mass ids

raw_fields(self)[source]
safe_cross_reference(self, model, debug=True)[source]
type = 'NSMADD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
sid : int

Case control NSM id

nsm_type : str

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_eid : int

property id or element id depending on nsm_type

value : float

the non-structural pass per unit length/area

comment : str; 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:
sid : int

Case control NSM id

nsm_type : str

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

}

value : float

the non-structural pass per unit length/area

ids : List[int]

property ids or element ids depending on nsm_type

comment : str; 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:
sid : int

Case control NSM id

nsm_type : str

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_eid : int

property id or element id depending on nsm_type

value : float

the non-structural pass per unit length/area

comment : str; default=’‘

a comment for the card

Type

gets the nsm_type

classmethod add_card(card, icard=0, comment='')[source]

Adds an NSM card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

icard : int; default=0

the index of the card that’s being parsed

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

Property id used by a CMASS1/CMASS3 card

mass : float

the mass to apply

comment : str; default=’‘

a comment for the card

Mass(self)[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:
card : BDFCard()

a BDFCard object

icard : int; default=0

the index of the card that’s being parsed

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
pname_fid_map = {3: 'mass'}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PMASS'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

Mid(self)[source]

returns the material ID of an element

Returns:
mid : int

the Material ID

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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 PAST card

Parameters:
pid : int

property id

d : int

diameter of the fastener

kt1, kt2, kt3 : float

stiffness values in directions 1-3

mcid : int; default=01

specifies the element stiffness coordinate system

mflag : int; default=0

0-absolute; 1-relative

kr1, kr2, kr3 : float; default=0.0

rotational stiffness values in directions 1-3

mass : float; default=0.0

lumped mass of the fastener

ge : float; default=0.0

structural damping

comment : str; default=’‘

a comment for the card

Mass(self)[source]
Mcid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PFAST card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PFAST'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id for a CGAP

u0 : float; default=0.

Initial gap opening

f0 : float; default=0.

Preload

ka : float; default=1.e8

Axial stiffness for the closed gap

kb : float; default=None -> 1e-14 * ka

Axial stiffness for the open gap

mu1 : float; 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

kt : float; default=None -> mu1*ka

Transverse stiffness when the gap is closed

mu2 : float; 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

tmax : float; default=0.

Maximum allowable penetration used in the adjustment of penalty values. The positive value activates the penalty value adjustment

mar : float; default=100.

Maximum allowable adjustment ratio for adaptive penalty values KA and KT

trmin : float; default=0.001

Fraction of TMAX defining the lower bound for the allowable penetration

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PGAP'
u0 = None

initial gap opening

uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PRAC2D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PRAC2D'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[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.

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PRAC3D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PRAC3D'
uncross_reference(self)[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:
pid : int

property id

mid : int

material id

A : float

area

J : float; default=0.

polar moment of inertia

c : float; default=0.

stress factor

nsm : float; default=0.

nonstructural mass per unit length

comment : str; default=’‘

a comment for the card

Area(self)[source]
C(self)[source]
E(self)[source]
G(self)[source]
J(self)[source]
MassPerLength(self)[source]

Gets the mass per length \(\frac{m}{L}\) of the CBEAM.

\[\frac{m}{L} = A \rho + nsm\]
Nsm(self)[source]
Rho(self)[source]
classmethod add_card(card, comment='')[source]

Adds a PROD card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'PROD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

write_card_16(self, 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:
pid : int

property id

mid : int

material id

OD1 : float

outer diameter at End A

t : float; default=None -> OD1/2.

thickness

nsm : float; default=0.

non-structural mass per unit length

OD2 : float; default=None -> OD1

outer diameter at End B

comment : str; default=’‘

a comment for the card

Area(self)[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(self)[source]
G(self)[source]
J(self)[source]
MassPerLength(self)[source]

Gets the mass per length \(\frac{m}{L}\) of the CTUBE.

\[\frac{m}{L} = (A \rho) nsm\]
Nsm(self)[source]

Gets the non-structural mass \(nsm\) of the CTUBE.

Rho(self)[source]
Gets the density :math:`

ho` of the CTUBE.

_area1(self)[source]

Gets the Area of Section 1 of the CTUBE.

_area2(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

type = 'PTUBE'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
MassPerArea(self, iply='all', method='nplies', tflag=1, tscales=None)[source]
MassPerArea_structure(self)[source]
Material(self, iply)[source]

Gets the material of the \(i^{th}\) ply (not the ID unless it is not cross-referenced).

Parameters:
iply : int

the ply ID (starts from 0)

Mid(self, iply)[source]

Gets the Material ID of the \(i^{th}\) ply.

Parameters:
iply : int/str; default=’all’

the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

Returns:
material_id : int

the material id of the ith ply

Mids(self)[source]
Nsm(self)[source]
Rho(self, iply)[source]
TRef
Theta(self, iply)[source]
Thickness(self, iply='all', tflag=1, tscales=None)[source]
_adjust_ply_id(self, iply)[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:
iply : int

the ply ID

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(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_density(self, iply)[source]

Gets the density of the \(i^{th}\) ply

Parameters:
iply : int

the ply ID (starts from 0)

get_mass_per_area(self, iply='all', method='nplies')[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:
iply : str/int; default=’all’

str : the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

method : str

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(self, rhos, iply='all', method='nplies')[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:
rhos : List[float]

the densities of each ply

iply : str/int; default=’all’

the mass per area of the \(i^{th}\) ply

method : str

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(self, rhos)[source]

Gets the Mass/Area for the property structure only (doesn’t consider nsm).

\[\frac{m}{A} = \sum(\rho t)\]

where \(nsm_i\) is the non-structural mass of the \(i^{th}\) ply

Parameters:
rhos : List[float]

the densities of each ply

get_material_id(self, iply)[source]
get_material_ids(self)[source]
get_nonstructural_mass(self)[source]

Gets the non-structural mass \(i^{th}\) ply

get_sout(self, iply)[source]

Gets the the flag identifying stress/strain outpur of the \(i^{th}\) ply (not the ID). default=’NO’.

Parameters:
iply : int

the ply ID (starts from 0)

get_theta(self, iply)[source]

Gets the ply angle of the \(i^{th}\) ply (not the ID)

Parameters:
iply : int

the ply ID (starts from 0)

get_thetas(self)[source]
get_thickness(self, iply='all')[source]

Gets the thickness of the \(i^{th}\) ply.

Parameters:
iply : int/str; default=’all’

the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

Returns:
thickness : float

the thickness of the ply or plies

get_thicknesses(self)[source]
get_z_locations(self)[source]

Gets the z locations for the various plies.

Parameters:
iply : int

the ply ID (starts from 0)

Assume there are 2 plies, each of 1.0 thick, starting from :math:`z=0`.
>>> pcomp.get_z_locations()
[0., 1., 2.]
is_symmetrical(self)[source]

Is the laminate symmetrical?

Returns:
is_symmetrical : bool

is the SYM flag active?

material_ids

Gets the material IDs of all the plies

Returns:
mids : MATx

the material IDs

nplies

Gets the number of plies including the core.

if Lam=SYM:
  returns nplies * 2   (even)
else:
  returns nplies
sout(self, iply)[source]
uncross_reference(self)[source]

Removes cross-reference links

class pyNastran.bdf.cards.properties.shell.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='')[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

pid : int
property id
mids : List[int, …, int]
material ids for each ply
thicknesses : List[float, …, float]
thicknesses for each ply
thetas : List[float, …, float]; default=None
ply angle None : [0.] * nplies
souts : List[str, …, str]; default=None
should the stress? be printed; {YES, NO} None : [NO] * nplies
nsm : float; default=0.
nonstructural mass per unit area
sb : float; default=0.
Allowable shear stress of the bonding material. Used by the failure theory
ft : str; default=None
failure theory; {HILL, HOFF, TSAI, STRN, None}
tref : float; default=0.
reference temperature
ge : float; default=0.
structural damping
lam : str; default=None
symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric
z0 : float; default=None
Distance from the reference plane to the bottom surface None : -1/2 * total_thickness
comment : str; default=’‘
a comment for the card
classmethod _init_from_empty()[source]
_properties = ['_field_map', 'plies', 'nplies', 'material_ids']
classmethod add_card(card, comment='')[source]

Adds a PCOMP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

ft = None

Failure Theory [‘HILL’, ‘HOFF’, ‘TSAI’, ‘STRN’, None]

get_ABD_matrices(self, theta_offset=0.0)[source]

Gets the ABD matrix

Parameters:
theta_offset : float

rotates the ABD matrix; measured in degrees

get_Qbar_matrix(self, mid_ref, theta)[source]

theta must be in radians

get_Sbar_matrix(self, mid_ref, theta)[source]

theta must be in radians

get_z0_z1_zmean(self)[source]
lam = None

symmetric flag - default = No Symmetry (=None)

nsm = None

Non-Structural Mass per unit Area

pid = None

Property ID

plies
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

tref = None

Reference Temperature (default=0.0)

type = 'PCOMP'
update_by_pname_fid(self, pname_fid, value)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.properties.shell.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='')[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:
pid : int

property id

global_ply_ids : List[int]

the ply id

mids : List[int, …, int]

material ids for each ply

thicknesses : List[float, …, float]

thicknesses for each ply

thetas : List[float, …, float]; default=None

ply angle None : [0.] * nplies

souts : List[str, …, str]; default=None

should the stress? be printed; {YES, NO} None : [NO] * nplies

nsm : float; default=0.

nonstructural mass per unit area

sb : float; default=0.

Allowable shear stress of the bonding material. Used by the failure theory

ft : str; default=None

failure theory; {HILL, HOFF, TSAI, STRN, None}

tref : float; default=0.

reference temperature

ge : float; default=0.

structural damping

lam : str; default=None

symmetric flag; {SYM, MEM, BEND, SMEAR, SMCORE, None} None : not symmmetric

z0 : float; default=None

Distance from the reference plane to the bottom surface None : -1/2 * total_thickness

comment : str; default=’‘

a comment for the card

GlobalPlyID(self, iply)[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, comment='')[source]

Adds a PCOMPG card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

ft = None

Failure Theory

[‘HILL’, ‘HOFF’, ‘TSAI’, ‘STRN’, None]

lam = None

symmetric flag - default = No Symmetry (NO)

nsm = None

Non-Structural Mass per unit Area

pid = None

Property ID

plies
pname_fid_map = {}
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

tref = None

Reference Temperature (default=0.0)

type = 'PCOMPG'
update_by_pname_fid(self, pname_fid, value)[source]
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

mid : int

material id; MATHP / MATHE

cid : int; default=0

???

stress_strain_output_location : str; default=’GRID’

???

comment : str; default=’‘

a comment for the card

Cid(self)[source]
Mid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

pid = None

Property ID

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PLPLANE'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self, tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid(self)[source]

returns the material id

Thickness(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

pid = None

Property ID

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PPLANE'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PSHEAR(pid, mid, t, nsm=0.0, f1=0.0, f2=0.0, comment='')[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:
pid : int

property id

mid : int

material id

t : float

shear panel thickness

nsm : float; default=0.

nonstructural mass per unit length

f1 : float; default=0.0

Effectiveness factor for extensional stiffness along edges 1-2 and 3-4

f2 : float; default=0.0

Effectiveness factor for extensional stiffness along edges 2-3 and 1-4

comment : str; default=’‘

a comment for the card

MassPerArea(self, tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid(self)[source]

returns the material id

Rho(self)[source]

returns the material density

Thickness(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

pname_fid_map = {4: 't', 'T': 't'}
raw_fields(self)[source]
type = 'PSHEAR'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

class pyNastran.bdf.cards.properties.shell.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='')[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:
pid : int

property id

mid1 : int; default=None

defines membrane material defines element density (unless blank)

mid2 : int; default=None

defines bending material defines element density if mid1=None

mid3 : int; default=None

defines transverse shear material (only defined if mid2 > 0)

mid4 : int; default=None

defines membrane-bending coupling material (only defined if mid1 > 0 and mid2 > 0; can’t be mid1/mid2)

twelveIt3 : float; 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.

nsm : float; default=0.0

non-structural mass per unit area

z1 / z2 : float; 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

comment : str; default=’‘

a comment for the card

MassPerArea(self, tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

MassPerArea_no_xref(self, model, tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

MassPerArea_structure(self)[source]

Calculates mass per area without considering non-structural mass.

\[\]

rac{m}{A} = nsm + ho t

Mid(self)[source]

returns the material id used for mass

Mid1(self)[source]

returns the extension material id

Mid2(self)[source]

returns the bending material id

Mid3(self)[source]
Mid4(self)[source]
Nsm(self)[source]

returns the non-structural mass

Rho(self)[source]

returns the material density

Thickness(self, tflag=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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

get_ABD_matrices(self, theta_offset=0.0)[source]

Gets the ABD matrix

Parameters:
theta_offset : float

rotates the ABD matrix; measured in degrees

get_Qbar_matrix(self, mid_ref, theta=0.0)[source]

theta must be in radians

get_Sbar_matrix(self, mid_ref, theta=0.0)[source]

theta must be in radians

get_z_locations(self)[source]

returns the locations of the bottom and top surface of the shell

material_ids

returns the material ids

materials(self)[source]

returns the material objects referenced by the shell

mid2 = None

Material identification number for bending -1 for plane strin

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

pyNastran.bdf.cards.properties.shell.get_2d_plate_transform(theta)[source]

theta must be in radians

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

Mid(self)[source]

returns the material ID of an element

Returns:
mid : int

the Material ID

Mids(self)[source]
Rho(self)[source]

Returns the density

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PCOMPS card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
material_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PCOMPS'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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:
pid : int

property id

mid : int

material id

stress_strain : str

Location of stress and strain output valid types = {GRID, GAUSS}

ge : float; default=0.

damping coefficient

comment : str; default=’‘

a comment for the card

Rho(self)[source]

Returns the density

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PLSOLID card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

mid = None

Material ID

pid = None

Property ID

raw_fields(self)[source]
stress_strain = None

Location of stress and strain output

type = 'PLSOLID'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

mid : int

material id

cordm : int; default=0

material coordinate system

integ : int; default=None

None-varies depending on element type 0, ‘BUBBLE’ 1, ‘GAUSS’ 2, ‘TWO’ 3, ‘THREE’ REDUCED FULL

stress : int/str; default=None

None/GRID, 1-GAUSS

isop : int/str; default=None

0-REDUCED 1-FULL

fctn : str; default=’SMECH’

PFLUID/SMECH

comment : str; default=’‘

a comment for the card

E(self)[source]
G(self)[source]
Nu(self)[source]
Rho(self)[source]

Returns the density

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PSOLID card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

cross reference method for a PSOLID

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

materials(self)[source]
mid = None

Material ID

pid = None

Property ID

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PSOLID'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
pid : int

property id

k : float

spring stiffness

ge : int; default=0.0

damping coefficient

s : float; default=0.0

stress coefficient

comment : str; default=’‘

a comment for the card

K(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a PELAS card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

icard : int; default=0

the index of the PELAS card that’s being parsed must be 0 or 1

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

s = None

Stress coefficient. (Real)

type = 'PELAS'
uncross_reference(self)[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:
pid : int

property id

tkid : float

TABLEDx that defines k vs. frequency

tgeid : int; default=0

TABLEDx that defines ge vs. frequency

s : float; default=0.

TABLEDx that defines force vs. displacement

comment : str; default=’‘

a comment for the card

Pid(self)[source]

returns the property ID of an property

Returns:
pid : int

the Property ID

Tgeid(self)[source]

Returns the table ID for nondimensional structural damping coefficient vs. frequency (c/c0 vs freq)

Tkid(self)[source]

Returns the table ID for force per unit displacement vs frequency (k=F/d vs freq)

Tknid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

pid = None

Property identification number. (Integer > 0)

pname_fid_map = {'TKID': 'tknid'}
raw_fields(self)[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(self, model)[source]
class pyNastran.bdf.cards.properties.springs.SpringProperty[source]

Bases: pyNastran.bdf.cards.base_card.Property

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load set id number (referenced by DLOAD)

excite_id : int

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

rho : float

Density of the fluid

b : float

Bulk modulus of the fluid

delay : int; default=0

Time delay, τ.

dphase : int / float; default=0

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

power : int; 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.

int : TABLEDi entry that defines P(f) for all degrees of

freedom in EXCITEID entry.

comment : str; default=’‘

a comment for the card

DPhase(self)[source]
Delay(self)[source]
Power(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a ACSRCE card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_load_at_freq(self, freq)[source]
..math ::
C = sqrt(B ⁄ ρ) Source_strength = {A} * 1/(2πf) * sqrt( 8πC P(f) / ρ) ^ (ei(θ + 2πfτ))
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'ACSRCE'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Load set identification number. See Remarks 1. and 4. (Integer > 0)

scale : float

Scale factor. See Remarks 2. and 8. (Real)

Si : List[float]

Scale factors. See Remarks 2., 7. and 8. (Real)

load_ids : List[int]

Load set identification numbers of RLOAD1, RLOAD2, TLOAD1, TLOAD2, and ACSRCE entries. See Remarks 3 and 7. (Integer > 0)

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors, debug=True)[source]
type = 'DLOAD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

excite_id : int

node id where the load is applied

delay : int/float; default=None

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

dphase : int/float; default=None

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

tc : int/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

td : int/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

comment : str; default=’‘

a comment for the card

Tc(self)[source]
Td(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

delay_id
dphase_id
get_load_at_freq(self, freq, scale=1.0)[source]
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'RLOAD1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

excite_id : int

node id where the load is applied

delay : int/float; default=None

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

dphase : int/float; default=None

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

tb : int/float; default=0

TABLEDi id that defines B(f) for all degrees of freedom in EXCITEID entry

tc : int/float; default=0

TABLEDi id that defines C(f) for all degrees of freedom in EXCITEID entry

td : int/float; default=0

TABLEDi id that defines D(f) for all degrees of freedom in EXCITEID entry

tp : int/float; default=0

TABLEDi id that defines phi(f) for all degrees of freedom in EXCITEID entry

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

comment : str; default=’‘

a comment for the card

LoadID(self)[source]
Tb(self)[source]
Tp(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

delay_id
dphase_id
get_load_at_freq(self, freq, scale=1.0)[source]
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'RLOAD2'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.

1 2 3 4 5 6 7 8
TLOAD1 SID EXCITEID DELAY TYPE TID US0 VS0

MSC 2016.1

1 2 3 4 5 6
TLOAD1 SID EXCITEID DELAY TYPE TID

NX 11

Creates a TLOAD1 card, which defienes a time-dependent load based on a DTABLE.

Parameters:
sid : int

load id

excite_id : int

node id where the load is applied

tid : int

TABLEDi id that defines F(t) for all degrees of freedom in EXCITEID entry float : MSC not supported

delay : int/float; default=None

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

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

us0 : float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0 : float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

comment : str; default=’‘

a comment for the card

Tid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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)

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(self, time, scale=1.0)[source]
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, debug=True)[source]
sid = None

load ID

tid = None

Identification number of TABLEDi entry that gives F(t). (Integer > 0)

type = 'TLOAD1'
uncross_reference(self)[source]

Removes cross-reference links

us0 = None

Factor for initial displacements of the enforced degrees-of-freedom. (Real; Default = 0.0)

validate(self)[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.

1 2 3 4 5 6 7 8 9
TLOAD2 SID EXCITEID DELAY TYPE T1 T2 FREQ PHASE
  C B US0 VS0        

MSC 2016.1

1 2 3 4 5 6 7 8 9
TLOAD2 SID EXCITEID DELAY TYPE T1 T2 FREQ PHASE
  C B            

NX 11

Creates a TLOAD2 card, which defines a exponential time dependent load based on constants.

Parameters:
sid : int

load id

excite_id : int

node id where the load is applied

delay : int/float; default=None

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

Type : int/str; default=’LOAD’

the type of load 0/LOAD 1/DISP 2/VELO 3/ACCE 4, 5, 6, 7, 12, 13 - MSC only

T1 : float; default=0.

time constant (t1 > 0.0) times below this are ignored

T2 : float; default=None

time constant (t2 > t1) times above this are ignored

frequency : float; default=0.

Frequency in cycles per unit time.

phase : float; default=0.

Phase angle in degrees.

c : float; default=0.

Exponential coefficient.

b : float; default=0.

Growth coefficient.

us0 : float; default=0.

Factor for initial displacements of the enforced degrees-of-freedom MSC only

vs0 : float; default=0.

Factor for initial velocities of the enforced degrees-of-freedom MSC only

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

b = None

Growth coefficient. (Real; Default = 0.0)

c = None

Exponential coefficient. (Real; Default = 0.0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

delay_id
frequency = None

Frequency in cycles per unit time. (Real >= 0.0; Default = 0.0)

get_load_at_time(self, time, scale=1.0)[source]
get_loads(self)[source]
phase = None

Phase angle in degrees. (Real; Default = 0.0)

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, 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(self)[source]

Removes cross-reference links

us0 = None

Factor for initial displacements of the enforced degrees-of-freedom. (Real; Default = 0.0)

validate(self)[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(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
sid : int

darea id

nodes : List[int]

GRID, EPOINT, SPOINT id

components : List[int]

Component number. (0-6; 0-EPOINT/SPOINT; 1-6 GRID)

scales : List[float]

Scale (area) factor

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['node_ids']
add(self, darea)[source]
classmethod add_card(card, icard=0, comment='')[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

node_ids
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors, debug=True)[source]
type = 'DAREA'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

eid : int

CTUBE/CROD/CONROD/CBAR/CBEAM element id

deformation : float

the applied deformation

comment : str; default=’‘

a comment for the card

Eid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a DEFORM card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors, debug=True)[source]
type = 'DEFORM'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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.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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'LOADCYN'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
ACSRCE : If 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.
DAREA : Refer to RLOAD1, RLOAD2, TLOAD1, TLOAD2, or ACSRCE entries
for the formulas that define the scale factor Ai in dynamic analysis.

DPHASE :

SLOAD : In 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 LID : Load 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:
sid : int

loadset id; LOADSET points to this

excite_id : int

set id assigned to this static load vector

lid : int

load set id of a set of static load entries; LOAD in the Case Control

tid : int; default=None

temperature set id of a set of thermal load entries; TEMP(LOAD) in the Case Control

comment : str; default=’‘

a comment for the card

Lid(self)[source]
LoadID(self, lid)[source]
Tid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a LSEQ card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'LSEQ'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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

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:
sid : int

load id

scale : float

overall scale factor

scale_factors : List[float]

individual scale factors (corresponds to load_ids)

load_ids : List[int]

individual load_ids (corresponds to scale_factors)

comment : str; default=’‘

a comment for the card

LoadID(self, lid)[source]
classmethod add_card(card, comment='')[source]
get_load_ids(self)[source]

xref/non-xref way to get the load ids

get_loads(self)[source]

Note

requires a cross referenced load

scale = None

overall scale factor

sid = None

load ID

validate(self)[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:
sid : int

load set id

nid : int

grid point through which the rotation vector acts

scale : float

scale factor of the angular velocity in revolutions/time

r123 : List[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).

cid : int; default=0

Coordinate system defining the components of the rotation vector.

method : int; default=1

Method used to compute centrifugal forces due to angular velocity.

racc : int; default=0.0

Scale factor of the angular acceleration in revolutions per unit time squared.

mb : int; 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.

idrf : int; 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.

comment : str; default=’‘

a comment for the card

Cid(self)[source]
Nid(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_id']
classmethod add_card(card, comment='')[source]

Adds a RFORCE card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_id
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'RFORCE'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load set id

nid : int

grid point through which the rotation vector acts

scale : float

scale factor of the angular velocity in revolutions/time

r123 : List[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).

racc : int; default=0.0

Scale factor of the angular acceleration in revolutions per unit time squared.

mb : int; 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_id : int

Group identification number. The GROUP entry referenced in the GROUPID field selects the grid points to which the load is applied.

cid : int; default=0

Coordinate system defining the components of the rotation vector.

method : int; default=2

Method used to compute centrifugal forces due to angular velocity.

comment : str; default=’‘

a comment for the card

Cid(self)[source]
Nid(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_id']
classmethod add_card(card, comment='')[source]

Adds a RFORCE1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_id
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
type = 'RFORCE1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

nodes : int; List[int]

the GRID/SPOINT ids

mags : float; List[float]

the load magnitude

comment : str; default=’‘

a comment for the card

Nid(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]

Todo

not done

node_ids

get the node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

load ID

type = 'SLOAD'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

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:
conid : int

constraint id

nodes : List[int]

GRID/SPOINT ids

components : List[str]

the degree of freedoms to constrain (e.g., ‘1’, ‘123’)

enforced : List[float]

the constrained value for the given node (typically 0.0)

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

constraints
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_ids

get the node ids

raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors, debug=True)[source]
type = 'SPCD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

random analysis set id defined by RANDOM in the case control deck

j : int

Subcase id of the excited load set

k : int

Subcase id of the applied load set k > j

x / y : float; default=0.0

Components of the complex number

tid : int; default=0

TABRNDi id that defines G(F)

comment : str; default=’‘

a comment for the card

Tid(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a RANDPS card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, 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(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

the string representation of the card

x = None

Components of the complex number. (Real)

class pyNastran.bdf.cards.loads.random_loads.RANDT1(sid, n, t0, tmax, comment='')[source]

Bases: pyNastran.bdf.cards.loads.random_loads.RandomLoad

Creates a RANDT1 card

Parameters:
sid : int

random analysis set id defined by RANDOM in the case control deck

n : int

???

t0 : int

???

tmax : float

???

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Random analysis set identification number. (Integer > 0) Defined by RANDOM in the Case Control Deck.

type = 'RANDT1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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
  • PLOADX1
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:
sid : int

load id

N : (3, ) float ndarray

the acceleration vector in the cid frame

direction : str

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

locs : List[float]

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

vals : List[float]

The load scale factor associated with location LOCi

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

Cid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cid = None

Coordinate system identification number. (Integer>0: Default=0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

direction = None

Component direction of acceleration variation. (Character; one of X,Y or Z)

get_loads(self)[source]
raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors, debug=True)[source]
sid = None

Load set identification number (Integer>0)

type = 'ACCEL'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

scale : float

scale factor for load

N : (3, ) float ndarray

the acceleration vector in the cid frame

direction : str

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

nodes : List[int]

the nodes to apply acceleration to

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

Cid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cid = None

Coordinate system identification number. (Integer>0: Default=0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_ids
nodes = None

nodes to apply the acceleration to

raw_fields(self)[source]
safe_cross_reference(self, model, xref_errors)[source]
scale = None

Acceleration vector scale factor. (Real)

sid = None

Load set identification number (Integer>0)

type = 'ACCEL1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

xyz : (3, ) float ndarray

the load direction in the cid frame

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

type = 'FORCE'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

n1 / n2 : int / int

defines the load direction n = n2 - n1

comment : str; 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
_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(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a GMLOAD card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'GMLOAD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
sid : int

load id

scale : float

scale factor for load

N : (3, ) float ndarray

the acceleration vector in the cid frame

cid : int; default=0

the coordinate system for the load

mb : int; default=0

???

comment : str; default=’‘

a comment for the card

Cid(self)[source]
GravityVector(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cid = None

Coordinate system identification number.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors, debug=True)[source]
scale = None

scale factor

sid = None

Set identification number

type = 'GRAV'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

scale : float

overall scale factor

scale_factors : List[float]

individual scale factors (corresponds to load_ids)

load_ids : List[int]

individual load_ids (corresponds to scale_factors)

comment : str; default=’‘

a comment for the card

.. note:: MSC can handle self-referencing loads, NX cannot
classmethod _init_from_empty()[source]
cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_load_types(self)[source]

Note

requires a cross referenced load

get_reduced_loads(self, 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_card : bool; default=False

Nastran requires that LOAD cards do not reference other load cards This feature can be enabled.

filter_zero_scale_factors : bool; 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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors, debug=True)[source]
type = 'LOAD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

xyz : (3, ) float ndarray

the load direction in the cid frame

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

Cid(self)[source]
classmethod add_card(card, comment='')[source]

Adds a FORCE/MOMENT card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, loads)[source]

exports the loads in a vectorized way

get_loads(self)[source]
node_id
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors, debug=True)[source]
scaled_vector
to_global(self)[source]
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

n1 / n2 : int / int

defines the load direction n = n2 - n1

comment : str; default=’‘

a comment for the card

G1(self)[source]
G2(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_id
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, safe_coord, debug=True)[source]

Todo

cross reference and fix repr function

scaled_vector
to_global(self)[source]
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

g1 / g2 / g3 / g4 : int / int / int / int

defines the load direction n = (g2 - g1) x (g4 - g3)

comment : str; default=’‘

a comment for the card

G1(self)[source]
G2(self)[source]
G3(self)[source]
G4(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_id
node_ids
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, safe_coord, debug=True)[source]

Todo

cross reference and fix repr function

scaled_vector
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

xyz : (3, ) float ndarray

the load direction in the cid frame

cid : int; default=0

the coordinate system for the load

comment : str; default=’‘

a comment for the card

node_id
node_ids

all the nodes referenced by the load

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'MOMENT'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

node : int

the node to apply the load to

mag : float

the load’s magnitude

n1 / n2 : int / int

defines the load direction n = n2 - n1

comment : str; 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
_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:
sid : int

load id

pressure : float

the pressure to apply

nodes : List[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

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, safe_coord)[source]
type = 'PLOAD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
sid : int

load id

eid : int

element to apply the load to

load_type : str

type of load that’s applied valid_types = {FX, FY, FZ, FXE, FYE, FZE,

MX, MY, MZ, MXE, MYE, MZE}

scale : str

Determines scale factor for X1, X2. {LE, FR, LEPR, FRPR}

x1 / x2 : float / float

the starting/end position for the load application the default for x2 is x1

p1 / p2 : float / float

the magnitude of the load at x1 and x2 the default for p2 is p1

comment : str; default=’‘

a comment for the card

Point Load : x1 == x2
Distributed Load : x1 != x2
Eid(self)[source]
Type
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PLOAD1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, safe_coord)[source]
type = 'PLOAD1'
uncross_reference(self)[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(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.loads.static_loads.PLOAD2(sid, pressure, eids, comment='')[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:
sid : int

load id

pressure : float

the pressure to apply to the elements

eids : List[int]

the elements to apply pressure to n < 6 or a continouus monotonic list of elements (e.g., [1, 2, …, 1000])

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a PLOAD2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

element_ids
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, safe_coord)[source]
type = 'PLOAD2'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
sid : int

the load id

eids : List[int, …]

shells : the range of element ids; must be sequential solids : must be length 1

pressures : List[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

g1 : int/None

only used for solid elements

g34 : int / None

only used for solid elements

cid : int; 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_line : str; default=’SURF’

SURF : surface load LINE : line load (only defined for QUADR, TRIAR) not supported

line_load_dir : str; default=’NORM’

direction of the line load (see surf_or_line); {X, Y, Z, TANG, NORM} not supported

comment : str; default=’‘

a comment for the card

TODO: fix the way “pressures” works
Cid(self)[source]

gets the coordinate system object

G1(self)[source]
G34(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cid = None

Coordinate system identification number. See Remark 2. (Integer >= 0;Default=0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

element_ids
g1 = None

used for solid element only

g34 = None

g3/g4 - different depending on CHEXA/CPENTA or CTETRA

get_element_ids(self, eid=None)[source]
get_loads(self)[source]
node_ids

get the node ids

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors, debug=True)[source]
type = 'PLOAD4'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

class pyNastran.bdf.cards.loads.static_loads.PLOADX1(sid, eid, pa, nids, pb=None, theta=0.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Pressure Load on Axisymmetric Element

Defines surface traction to be used with the CQUADX, CTRIAX, and CTRIAX6 axisymmetric element.

1 2 3 4 5 6 7 8
PLOADX1 SID EID PA PB GA GB THETA

Creates a PLOADX1 card, which defines surface traction for axisymmetric elements.

Parameters:
sid : int

load id

eid : int

element id (CQUADX, CTRIAX, or CTRIAX6)

nids : List[int, int]

Corner grid points. GA and GB are any two adjacent corner grid points of the element

pa / pb : float / None

Surface traction at grid point GA or GB pb : default is None -> pa

theta : float; default=0.0

Angle between surface traction and inward normal to the line segment.

comment : str; default=’‘

a comment for the card

Eid(self)[source]
Ga(self)[source]
Gb(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids', 'nodes']
classmethod add_card(card, comment='')[source]

Adds a PLOADX1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

get_loads(self)[source]
node_ids
nodes
nodes_ref
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, safe_coord)[source]
type = 'PLOADX1'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; default=8

the size of the card (8/16)

pyNastran.bdf.cards.loads.static_loads.normalize(self, msg='')[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, normal, cid)[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(self)[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QBDY1 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

element_ids
get_loads(self)[source]
nQFluxTerms(self)[source]
qflux = None

Heat flux into element (FLOAT)

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QBDY1'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a QBDY2 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Identification number of an CHBDYj element. (Integer > 0)

get_loads(self)[source]
nQFluxTerms(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QBDY2'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Load set identification number. (Integer > 0)

q0 : float; default=None

Magnitude of thermal flux vector into face

control_id : int; default=0

Control point

eids : List[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

comment : str; default=’‘

a comment for the card

Eids(self)[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QBDY3 card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cntrlnd = None

Control point for thermal flux load. (Integer > 0; Default = 0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eids = None

CHBDYj element identification numbers

element_ids
get_loads(self)[source]
q0 = None

Heat flux into element

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QBDY3'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

load id

flag : str

valid_flags = {POINT, LINE, REV, AREA3, AREA4, AREA6, AREA8}

q0 : float

Magnitude of thermal flux into face. Q0 is positive for heat into the surface

af : float; default=None

Area factor depends on type

grids : List[int]

Grid point identification of connected grid points

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

af = None

Area factor depends on type. (Real > 0.0 or blank)

cross_reference(self, model)[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(self)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QHBDY'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Load set identification number. (Integer > 0)

q0 : float; default=None

Magnitude of thermal flux vector into face

t_source : float; default=None

Temperature of the radiant source

ce : int; default=0

Coordinate system identification number for thermal vector flux

vector_tableds : List[int/float, int/float, int/float]
vector : float; default=None

directional cosines in coordinate system CE) of the thermal vector flux None : [0.0, 0.0, 0.0]

tabled : int

TABLEDi entry identification numbers defining the components as a function of time

control_id : int; default=0

Control point

eids : List[int] or THRU

Element identification number of a CHBDYE, CHBDYG, or CHBDYP entry

comment : str; default=’‘

a comment for the card

Eids(self)[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QVECT card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

element_ids
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QVECT'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
classmethod _init_from_empty()[source]
_properties = ['element_ids']
classmethod add_card(card, comment='')[source]

Adds a QVOL card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

element_ids
get_loads(self)[source]
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
sid = None

Load set identification number. (Integer > 0)

type = 'QVOL'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Load set identification number

temperatures : dict[nid]
nid : int

node id

temperature : float

the nodal temperature

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
add(self, temp_obj)[source]
classmethod add_card(card, comment='')[source]

Adds a TEMP card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
classmethod export_to_hdf5(h5_file, model, loads)[source]

exports the loads in a vectorized way

get_loads(self)[source]
raw_fields(self)[source]

Writes the TEMP card

repr_fields(self)[source]

Writes the TEMP card

safe_cross_reference(self, model, 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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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:
sid : int

Load set identification number. (Integer > 0)

temperature : float

default temperature

comment : str; default=’‘

a comment for the card

classmethod _init_from_empty()[source]
add(self, tempd_obj)[source]
classmethod add_card(card, icard=0, comment='')[source]

Adds a TEMPD card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

icard : int; default=0

sid to be parsed

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]
raw_fields(self)[source]

Writes the TEMPD card

safe_cross_reference(self, model, xref_errors)[source]
type = 'TEMPD'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]

Writes the TEMP card

type = 'TEMPP1'
write_card(self, size=8, is_double=False)[source]

Writes the card with the specified width and precision

Parameters:
size : int (default=8)

size of the field; {8, 16}

is_double : bool (default=False)

is this card double precision

Returns:
msg : str

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(self)[source]
classmethod add_card(card, comment='')[source]

Adds a RADBC card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cntrlnd = None

Control point for thermal flux load. (Integer > 0; Default = 0)

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'RADBC'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'RADCAV'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'RADCAV'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

radmid = None

Material identification number

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'RADM'
validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

raw_fields(self)[source]
type = 'RADMTX'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
iview : int

Identification number

icavity : int

Cavity identification number for grouping the radiant exchange faces of CHBDYi elements

shade : str; 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 / ngamma : int; default=1 / 1

Subelement mesh size in the beta/gamma direction. (Integer > 0)

dislin : float; default=0.0

The displacement of a surface perpendicular to the surface

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a VIEW card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

iview = None

Material identification number

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'VIEW'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
icavity : int

Radiant cavity identification number on RADCAV entry. (Integer > 0)

gitb : int; 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)

gips : int; 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)

cier : int; default=4

Discretization level used in the semi-analytic contour integration method. (1 < Integer < 20)

error_tol : float; default=0.1

Error estimate above which a corrected view factor is calculated using the semi-analytic contour integration method. (Real > 0.0)

zero_tol : float; default=1e-10

Assumed level of calculation below which the numbers are considered to be zero. (Real > 0.0)

warp_tol : float; default=0.01

Assumed degree of warpage above which the actual value of will be calculated. (0.0 < Real < 1.0)

rad_check : int; default=3

Type of diagnostic output desired for the radiation exchange surfaces.

comment : str; default=’‘

a comment for the card

classmethod add_card(card, comment='')[source]

Adds a VIEW3D card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

icavity = None

Material identification number

raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'VIEW3D'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
eid : int

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

comment : str; default=’‘

a comment for the card

Eid(self)[source]
Eid2(self)[source]
Pid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[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(self)[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

node_ids
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(self)[source]
repr_fields(self)[source]

Todo

is this done

safe_cross_reference(self, model, 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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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(self)[source]
classmethod _init_from_empty()[source]
_properties = ['node_ids']
classmethod add_card(card, comment='')[source]

Adds a CHBDYG card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

eid = None

Surface element ID

get_edge_ids(self)[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

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
surface_type = None

Surface type

type = 'CHBDYG'
uncross_reference(self)[source]

Removes cross-reference links

validate(self)[source]

card checking method that should be overwritten

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
eid : int

Surface element ID

pid : int

PHBDY property entry identification numbers. (Integer > 0)

surface_type : str

Surface type Must be {POINT, LINE, ELCYL, FTUBE, TUBE}

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.

g1 / g2 : int

Grid point identification numbers of grids bounding the surface

g0 : int; default=0

Orientation grid point

rad_mid_front : int

RADM identification number for front face of surface element

rad_mid_back : int

RADM identification number for back face of surface element.

gmid : int

Grid point identification number of a midside node if it is used with the line type surface element.

ce : int; default=0

Coordinate system for defining orientation vector

e1 / e2 / e3 : float; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1.

comment : str; default=’‘

a comment for the card

Ce(self)[source]

gets the coordinate system, CE

Eid(self)[source]
Pid(self)[source]
Type
_finalize_hdf5(self, 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

ce = None

Coordinate system for defining orientation vector. (Integer > 0; Default = 0

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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.

node_ids
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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

safe_cross_reference(self, model, xref_errors)[source]
type = 'CHBDYP'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
eid : int

element id

pconid : int

Convection property ID

mid : int

Material ID

ta : List[int]

Ambient points used for convection 0’s are allowed for TA2 and higher

film_node : int; default=0

Point for film convection fluid property temperature

cntrlnd : int; default=0

Control point for free convection boundary condition

comment : str; default=’‘

a comment for the card

Eid(self)[source]
TA(self, i=None)[source]
classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a CONV card from BDF.add_card(...)

Parameters:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cntrlnd = None

Control point for free convection boundary condition.

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'CONV'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
eid : int

element id (CHBDYP)

pconid : int

property ID (PCONVM)

mid : int

Material ID

ta1 : int

ambient point for convection

ta2 : int; default=None

None : ta1 ambient point for convection

film_node : int; default=0
cntmdot : int; default=0

control point used for controlling mass flow 0/blank is only allowed when mdot > 0

mdot : float; 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

comment : str; default=’‘

a comment for the card

Eid(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

cross_reference(self, model)[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
model : BDF()

the BDF object

film_node_id
pconvm_id
raw_fields(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'CONVM'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
pconid : int

Convection property ID

mid : int

Material ID

form : int; default=0

Type of formula used for free convection Must be {0, 1, 10, 11, 20, or 21}

expf : float; default=0.0

Free convection exponent as implemented within the context of the particular form that is chosen

ftype : int; default=0

Formula type for various configurations of free convection

tid : int; default=None

Identification number of a TABLEHT entry that specifies the two variable tabular function of the free convection heat transfer coefficient

chlen : float; default=None

Characteristic length

gidin : int; default=None

Grid ID of the referenced inlet point

ce : int; default=0

Coordinate system for defining orientation vector.

e1 / e2 / e3 : List[float]; default=None

Components of the orientation vector in coordinate system CE. The origin of the orientation vector is grid point G1

comment : str; default=’‘

a comment for the card

Ce(self)[source]

gets the coordinate system, CE

Gidin(self)[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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

ce = None

Coordinate system for defining orientation vector. (Integer > 0;Default = 0

chlen = None

Characteristic length

cross_reference(self, model)[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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[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(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
pconid : int

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

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PCONVM'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
eid : int

element id

pid : int

property id

af : int

Area factor of the surface used only for CHBDYP element Must be {POINT, LINE, TUBE, ELCYL} TUBE : constant thickness of hollow tube

d1, d2 : float; default=None

Diameters associated with the surface Used with CHBDYP [ELCYL, TUBE, FTUBE] surface elements

comment : str; 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:
card : BDFCard()

a BDFCard object

comment : str; 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(self)[source]
repr_fields(self)[source]

Gets the fields in their simplified form

Returns:
fields : List[varies]

the fields that define the card

type = 'PHBDY'
uncross_reference(self)[source]

Removes cross-reference links

write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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:
card : BDFCard()

a BDFCard object

comment : str; default=’‘

a comment for the card

eid
raw_fields(self)[source]
type = 'TEMPBC'
write_card(self, size=8, is_double=False)[source]

The writer method used by BDF.write_card()

Parameters:
size : int; 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(self, model)[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 and far less error prone for a user

That said, there are still a few bugs.

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, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.components_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : str, None

the default value for the field (default=None)

Returns:
components : str

a string of the dofs ‘0’ or ‘123456’ (not all are required)

pyNastran.bdf.bdf_interface.assign_type.double(card, ifield, fieldname)[source]

Converts a field into a double

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

Returns:
value : float

the value from the desired field

pyNastran.bdf.bdf_interface.assign_type.double_or_blank(card, ifield, fieldname, default=None)[source]

Gets a double/blank value

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : double, None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.double_or_string(card, ifield, fieldname)[source]

Converts a field into a double or a string

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

pyNastran.bdf.bdf_interface.assign_type.double_string_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : double, None

the default value for the field (default=None)

Returns:
value : float / str / None

the typed value

raises SyntaxError:
 if there is an invalid type ..
pyNastran.bdf.bdf_interface.assign_type.exact_string_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : str, None

the default value for the field (default=None)

Returns:
value : varies

the value of the field

pyNastran.bdf.bdf_interface.assign_type.fields(func, card, fieldname, i, j=None)[source]

Todo

improve fieldname

pyNastran.bdf.bdf_interface.assign_type.integer(card, ifield, fieldname)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

pyNastran.bdf.bdf_interface.assign_type.integer_double_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : int / float / None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.integer_double_or_string(card, ifield, fieldname)[source]

Converts a field into an integer, double or a string

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

Returns:
value : varies

the value of the field

pyNastran.bdf.bdf_interface.assign_type.integer_double_string_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : int, float, str, None (default=None)

the default value for the field

Returns:
value : int, float, str, None

the field value

pyNastran.bdf.bdf_interface.assign_type.integer_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : int, None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.integer_or_double(card, ifield, fieldname)[source]

Converts a field into an integer or double

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

Returns:
value : int/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, ifield, fieldname)[source]

Converts a field into an integer or string

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : int / str

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.integer_string_or_blank(card, ifield, fieldname, default=None)[source]

Converts a field into an integer, string or sets the default using a blank value

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : int, str, None

the default value for the field (default=None)

pyNastran.bdf.bdf_interface.assign_type.interpret_value(value_raw, card='')[source]

Converts a value from nastran format into python format.

Parameters:
raw_value : str

a string representation of a value

card : str

???

Returns:
value : varies

the Nastran reprentation of the value

pyNastran.bdf.bdf_interface.assign_type.loose_string_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : str, None

the default value for the field (default=None)

Returns:
value : varies

the value of the field

pyNastran.bdf.bdf_interface.assign_type.modal_components(card, ifield, fieldname)[source]

Gets the modal components (allows a -1 value); used by TIC

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

pyNastran.bdf.bdf_interface.assign_type.modal_components_or_blank(card, ifield, fieldname, default=None)[source]

Gets the modal components (allows a -1 value); used by TIC

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

pyNastran.bdf.bdf_interface.assign_type.parse_components(card, ifield, fieldname)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

Returns:
components : str

a string of the dofs ‘0’ or ‘123456’ (not all are required)

pyNastran.bdf.bdf_interface.assign_type.string(card, ifield, fieldname)[source]

Converts a field into a string

Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

Returns:
value : str

the value of the field

pyNastran.bdf.bdf_interface.assign_type.string_or_blank(card, ifield, fieldname, default=None)[source]
Parameters:
card : BDFCard()

BDF card as a list

ifield : int

field number

fieldname : str

name of field

default : str, None

the default value for the field (default=None)

Returns:
value : varies

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, has_none=True)[source]

Bases: object

A BDFCard is a list that has a default value of None for fields out of range.

Parameters:
card : List[str]

the split values for the card

has_none : bool; 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(self, i, default=None)[source]

Gets the ith field on the card

Parameters:
i : int

the ith field on the card (following list notation)

default : int/float/str/None

the default value for the field

Returns:
value : int/float/str/None

the value on the ith field

fields(self, i=0, j=None, defaults=None)[source]

Gets multiple fields on the card

Parameters:
i : int > 0

the ith field on the card (following list notation)

j : int / None

int : the jth field on the card None : last field on the card

defaults : List[int/float/str]

the default value for the field (as a list) len(defaults)=i-j-1

Returns:
values : List[varies]

int/float/str the values on the ith-jth fields

index(value)[source]
pop()[source]
write_card(self, size=8, is_double=False)[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_MPCx_node_ids( mpc_id, stop_on_failure=True)
    • get_MPCx_node_ids_c1( mpc_id, stop_on_failure=True)
    • get_load_arrays(self, subcase_id, nid_map, eid_map, node_ids, normals)
    • get_pressure_array(self, load_case, eids)
    • 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_rigid_elements_with_node_ids(self, node_ids)
    • get_dependent_nid_to_components(self, mpc_id=None)
    • 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)
    • get_mpcs(self, mpc_id)
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

get_MPCx_node_ids(self, mpc_id, consider_mpcadd=True, stop_on_failure=True)[source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids(...)

get_MPCx_node_ids_c1(self, mpc_id, consider_mpcadd=True, stop_on_failure=True)[source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpc_node_ids_c1(...)

get_SPCx_node_ids(self, spc_id, consider_spcadd=True, stop_on_failure=True)[source]

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters:
spc_id : int

the SPC id

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
node_ids : List[int]

the constrained associated node ids

get_SPCx_node_ids_c1(self, spc_id, stop_on_failure=True)[source]

Get the SPC/SPCADD/SPC1/SPCAX IDs.

Parameters:
spc_id : int

the SPC id

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
node_ids_c1 : Dict[component] = node_ids
component : str

the DOF to constrain

node_ids : List[int]

the constrained node ids

get_card_ids_by_card_types(self, card_types=None, reset_type_to_slot_map=False, stop_on_missing_card=False, combine=False)[source]
Parameters:
card_types : str / List[str] / default=None

the list of keys to consider (list of strings; string) None : all cards

reset_type_to_slot_map : bool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_card : bool

crashes if you request a card and it doesn’t exist

combine : bool; 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(self, card_types, reset_type_to_slot_map=False, stop_on_missing_card=False)[source]
Parameters:
card_types : List[str]

the list of keys to consider

reset_type_to_slot_map : bool

should the mapping dictionary be rebuilt (default=False); set to True if you added cards

stop_on_missing_card : bool

crashes if you request a card and it doesn’t exist

Returns:
out_dict : dict[str] = List[BDFCard()]

the key=card_type, value=the card object

get_dependent_nid_to_components(self, 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(self, pids=None, stop_if_no_eids=True, msg='')[source]

Gets all the element IDs with a specific property ID.

Parameters:
pids : List[int] / int

list of property ID

stop_if_no_eids : bool; default=True

prevents crashing if there are no elements setting this to False really doesn’t make sense for non-DMIG models

Returns:
element_ids : dict[pid] = List[eid]

dictionary of lists by property pid : int

property id

eid : int

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(self, pids=None)[source]

Gets all the element IDs with a specific property ID.

Parameters:
pids : List[int]; default=None -> all

list of property ID

Returns:
element_ids : List[int]

the element ids

For example, we want to get all the element ids with pids=[1, 2, 3]
get_element_nodes_by_element_type(self, dtype='int32', solids=None)[source]

see get_elements_properties_nodes_by_element_type

get_elements_nodes_by_property_type(self, dtype='int32', save_element_types=False)[source]

Gets a dictionary of (etype, pid) to [eids, node_ids]

Parameters:
dtype : str; default=’int32’

the type of the integers

save_element_types : bool; default=False

adds the etype_to_eids_pids_nids output

Returns:
etype_pid_to_eids_nids : dict[(etype, pid)]
etype : str

the element type

pid : int

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_nids : dict[etype]

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(self, dtype='int32', solids=None, stop_if_no_eids=True)[source]

Gets a dictionary of element type to [eids, pids, node_ids]

Parameters:
dtype : str; default=’int32’

the type of the integers

solids : dict[etype]
etype : str

the element type should only be CTETRA, CHEXA, CPENTA, CPYRAM

value : varies
(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_nids : dict[etype]
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_load_arrays(self, subcase_id, eid_map, node_ids, normals, nid_map=None)[source]

see pyNastran.bdf.mesh_utils.forces_moments.get_load_arrays(...)

get_material_id_to_property_ids_map(self, msg='')[source]

Returns a dictionary that maps a material ID to a list of properties

Returns:
mid_to_pids_map : dict[int] = int

the mapping

msg : str; default=’‘

a message added to the error message

get_mklist(self)[source]

gets the MKLIST vector from MKAERO1/MKAERO2

get_mpcs(self, mpc_id, consider_mpcadd=True, stop_on_failure=True)[source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_mpcs(...)

get_nid_map(self, sort_ids=True)[source]

Maps the GRID/SPOINT/EPOINT ids to a sorted/unsorted order.

Parameters:
sort_ids : bool; default=True

sort the ids

Returns:
nid_map : Dict[nid]
nid : int

the GRID/SPOINT/EPOINT id

i : int

the index

..note :: GRIDs, SPOINTs, & EPOINTs are stored in separate slots,

so they are unorganized.

get_node_id_to_element_ids_map(self)[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(self)[source]

Returns a dictionary that maps node IDs to a list of elements.

Returns:
nid_to_elements_map : Dict[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(self, eids, msg='')[source]

Get the node IDs associated with a list of element IDs

Parameters:
eids : List[int]

list of element ID

msg : str

An additional message to print out if an element is not found

Returns:
node_ids : Set[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(self, pids=None, etypes=None, idtype='int32', msg='')[source]

a work in progress

Parameters:
pids : List[int]

list of property ID

etypes : List[str]

element types to consider

Returns:
pid_to_eids_ieids_map : dict[(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
nelements : int

the number of elements in the property type

nnodes : int

varies based on the element type

get_pressure_array(self, load_case_id, eids, stop_on_failure=True)[source]

see pyNastran.bdf.mesh_utils.forces_moments.get_pressure_array(...)

get_property_id_to_element_ids_map(self, msg='')[source]

Returns a dictionary that maps a property ID to a list of elements.

Returns:
pid_to_eids_map : Dict[pid]=List[eid]

property id to a list of elements

msg : str; default=’‘

a message added to the error message

get_reduced_dloads(self, dload_id, scale=1.0, consider_dload_combinations=True, skip_scale_factor0=False, msg='')[source]

Accounts for scale factors.

Parameters:
dload_id : int

the desired DLOAD id

consider_dload_combinations : bool; default=True

look at the DLOAD card

scale : float; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0 : bool; default=False

Skip loads with scale factor=0.0. Nastran does not do this. Nastran will fail if referenced loads do not exist.

msg : str

debug message

Returns:
dloads : List[loads]

a series of dload objects

scale_factors : List[float]

the associated scale factors

Warning

assumes xref=True ..

get_reduced_loads(self, load_case_id, scale=1.0, consider_load_combinations=True, skip_scale_factor0=False, stop_on_failure=True, msg='')[source]

Accounts for scale factors.

Parameters:
load_case_id : int

the desired LOAD id

consider_load_combinations : bool; default=True

look at the LOAD card

scale : float; default=1.0

additional scale factor on top of the existing LOADs

skip_scale_factor0 : bool; 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_failure : bool; default=True

errors if parsing something new

msg : str

debug message

Returns:
loads : List[loads]

a series of load objects

scale_factors : List[float]

the associated scale factors

is_grav : bool

is there a gravity card

Warning

assumes xref=True ..

get_reduced_mpcs(self, mpc_id, consider_mpcadd=False, stop_on_failure=True)[source]

Get all traced MPCs that are part of a set

Parameters:
mpc_id : int

the MPC id

consider_mpcadd : bool

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

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
mpcs : List[MPC]

the various MPCs

get_reduced_nsms(self, nsm_id, consider_nsmadd=True, stop_on_failure=True)[source]

Get all traced NSMs that are part of a set

Parameters:
nsm_id : int

the NSM id

consider_nsmadd : bool

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

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
mpcs : List[NSM]

the various NSMs

get_reduced_spcs(self, spc_id, consider_spcadd=True, stop_on_failure=True)[source]

Get all traced SPCs that are part of a set

Parameters:
spc_id : int

the SPC id

consider_spcadd : bool

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

stop_on_failure : bool; default=True

errors if parsing something new

Returns:
spcs : List[SPC]

the various SPCs

get_rigid_elements_with_node_ids(self, node_ids)[source]

see pyNastran.bdf.mesh_utils.mpc_dependency.get_rigid_elements_with_node_ids(...)

get_rslot_map(self, reset_type_to_slot_map=False)[source]

gets the rslot_map

get_spcs(self, spc_id, consider_nodes=False, stop_on_failure=True)[source]

Gets the SPCs in a semi-usable form.

Parameters:
spc_id : int

the desired SPC ID

consider_nodes : bool; default=False

True : consider the GRID card PS field False: consider the GRID card PS field

Returns:
nids : List[int]

the constrained nodes

comps : List[str]

the components that are constrained on each node

Considers:
  • SPC
  • SPC1
  • SPCADD
  • GRID
Doesn’t consider:
  • non-zero enforced value on SPC
  • GMSPC
nid_map

Gets the GRID/SPOINT/EPOINT ids to a sorted order.

Parameters:
sort_ids : bool; default=True

sort the ids

Returns:
nid_map : Dict[nid]
nid : int

the GRID/SPOINT/EPOINT id

i : int

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(self)[source]

helper method for get_rslot_map

get_methods Module
Inheritance diagram of pyNastran.bdf.bdf_interface.get_methods

defines various methods to access low level BDF data

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, include_dir='', is_windows=None)[source]

Parses an INCLUDE file split into multiple lines (as a list).

Parameters:
card_lines : List[str]

the list of lines in the include card (all the lines!)

include_dir : str; default=’‘

the include directory

Returns:
filename : str

the INCLUDE filename

pyNastran.bdf.bdf_interface.include_file.split_filename_into_tokens(include_dir, filename, is_windows)[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, dumplines, encoding, nastran_format='msc', consider_superelements=True, log=None, debug=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_includes : bool

should include files be read

dumplines : bool

Writes ‘pyNastran_dump.bdf’ up to some failed line index

encoding : str

the character encoding (e.g., utf8, latin1, cp1252)

nastran_format : str; default=’msc’

‘zona’ has a special read method {msc, nx, zona}

consider_superelements : bool; default=True

parse ‘begin super=2’

log : logger(); default=None

a logger for printing INCLUDE files that are loadaed

debug : bool; default=False

used when testing; for the logger

get_lines(self, bdf_filename, punch=False, make_ilines=True)[source]

Opens the bdf and extracts the lines by group

Parameters:
bdf_filename : str

the main bdf_filename

punch : bool; default=False

is this a punch file True : no executive/case control decks False : executive/case control decks exist

make_ilines : bool; default=True

flag for bulk_data_ilines

Returns:
system_lines : List[str]

the system control lines (typically empty; used for alters)

executive_control_lines : List[str]

the executive control lines (stores SOL 101)

case_control_lines : List[str]

the case control lines (stores subcases)

bulk_data_lines : List[str]

the bulk data lines (stores geometry, boundary conditions, loads, etc.)

bulk_data_ilines : None / (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(self, bdf_filename)[source]

Opens the bdf and extracts the lines

Parameters:
bdf_filename : str / StringIO

the main bdf_filename

Returns:
lines : List[str]

all the lines packed into a single line stream

lines_to_deck_lines(self, lines, make_ilines=True)[source]

Merges the includes into the main deck.

Parameters:
lines : List[str]

the lines from the main BDF

make_ilines : bool; default=True

flag for ilines

Returns:
active_lines : List[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, ifield)[source]

helper for replication

pyNastran.bdf.bdf_interface.replication.float_replication(field, old_field)[source]

*4., *(11.5)

pyNastran.bdf.bdf_interface.replication.get_nrepeats(field, old_card, new_card)[source]

=4, =(11)

pyNastran.bdf.bdf_interface.replication.int_replication(field, old_field)[source]

*4, *(11)

pyNastran.bdf.bdf_interface.replication.repeat_cards(old_card, new_card)[source]

helper for replication

pyNastran.bdf.bdf_interface.replication.to_fields_replication(card_lines)[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:
lines : List[str]

the lines of the BDF card object

Returns:
fields : List[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, msg)[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats._constraint_stats(model, msg)[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats._nsm_stats(model, msg)[source]

helper for get_bdf_stats(...)

pyNastran.bdf.bdf_interface.stats.get_bdf_stats(model, return_type='string', word='')[source]

Print statistics for the BDF

Parameters:
return_type : str (default=’string’)
the output type (‘list’, ‘string’)

‘list’ : list of strings ‘string’ : single, joined string

word : str; default=’‘

model flag

Returns:
return_data : str, 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.ACCELERATION(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

ACCELERATION=5 ACCELERATION(REAL)=ALL ACCELERATION(SORT2, PUNCH, REAL)=ALL

allow_ints = True
allowed_keys = {'ABS', 'ATOC', 'CRMS', 'IMAG', 'NOPRINT', 'PHASE', 'PLOT', 'PRINT', 'PSDF', 'PUNCH', 'RALL', 'REAL', 'REL', 'RMS', 'RPRINT', 'RPUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'ACCE'
type = 'ACCELERATION'
class pyNastran.bdf.bdf_interface.subcase_cards.ADACT(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL', 'NONE'}
type = 'ADACT'
class pyNastran.bdf.bdf_interface.subcase_cards.AEROF(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL'}
type = 'AEROF'
class pyNastran.bdf.bdf_interface.subcase_cards.AESYMXY(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.StringCard

allowed_values = ['SYMMETRIC', 'ANTISYMMETRIC', 'ASYMMTRIC']
type = 'AESYMXY'
class pyNastran.bdf.bdf_interface.subcase_cards.AESYMXZ(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.StringCard

allowed_values = ['SYMMETRIC', 'ANTISYMMETRIC', 'ASYMMTRIC']
type = 'AESYMXZ'
class pyNastran.bdf.bdf_interface.subcase_cards.APRES(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL'}
type = 'APRES'
class pyNastran.bdf.bdf_interface.subcase_cards.AUXMODEL(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'AUXMODEL'
class pyNastran.bdf.bdf_interface.subcase_cards.AXISYMMETRIC(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.StringCard

allowed_values = ['SINE', 'COSINE', 'FLUID']
type = 'AXISYMMETRIC'
class pyNastran.bdf.bdf_interface.subcase_cards.BC(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'BC'
class pyNastran.bdf.bdf_interface.subcase_cards.BCSET(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'BCSET'
class pyNastran.bdf.bdf_interface.subcase_cards.BGSET(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'BGSET'
class pyNastran.bdf.bdf_interface.subcase_cards.BOLTLD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'BOLTLD'
class pyNastran.bdf.bdf_interface.subcase_cards.CLOAD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'CLOAD'
class pyNastran.bdf.bdf_interface.subcase_cards.CMETHOD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'CMETHOD'
class pyNastran.bdf.bdf_interface.subcase_cards.CSSCHD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'CSSCHD'
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:
key : str

the name of the card

value : List[str]

the options

value : str

the response value

_parse(self, key_value, options)[source]
_parse_set(self, key_value, options)[source]

SET=(G,N,N+AUTOSPC,F,A)

classmethod add_from_case_control(line, line_upper, lines, i)[source]

add method used by the CaseControl class

allow_ints = False
allowed_keys = {}
allowed_strings = {}
allowed_values = {}
duplicate_names = {}
export_to_hdf5(self, hdf5_file, encoding)[source]
type = 'CheckCard'
write(self, spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.DEFORM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DEFORM'
class pyNastran.bdf.bdf_interface.subcase_cards.DESGLB(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DESGLB'
class pyNastran.bdf.bdf_interface.subcase_cards.DESSUB(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DESSUB'
class pyNastran.bdf.bdf_interface.subcase_cards.DISPLACEMENT(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

DISPLACEMENT=5 DISPLACEMENT(REAL)=ALL DISPLACEMENT(SORT2, PUNCH, REAL)=ALL

allow_ints = True
allowed_keys = {'ABS', 'ATOC', 'CRMS', 'IMAG', 'NOPRINT', 'PHASE', 'PLOT', 'PRINT', 'PSDF', 'PUNCH', 'RALL', 'REAL', 'REL', 'RMS', 'RPRINT', 'RPUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'DISP'
type = 'DISPLACEMENT'
class pyNastran.bdf.bdf_interface.subcase_cards.DIVERG(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DIVERG'
class pyNastran.bdf.bdf_interface.subcase_cards.DLOAD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DLOAD'
class pyNastran.bdf.bdf_interface.subcase_cards.DRSPAN(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DRSPAN'
class pyNastran.bdf.bdf_interface.subcase_cards.DSYM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.StringCard

allowed_values = ['S', 'A', 'SS', 'SA', 'AS', 'AA']
type = 'DSYM'
class pyNastran.bdf.bdf_interface.subcase_cards.DTEMP(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'DTEMP'
class pyNastran.bdf.bdf_interface.subcase_cards.EBDSET(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'EBDSET'
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(self, hdf5_file, encoding)[source]
type = 'EXTSEOUT'
write(self, spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.FMETHOD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'FMETHOD'
class pyNastran.bdf.bdf_interface.subcase_cards.FREQUENCY(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'FREQUENCY'
class pyNastran.bdf.bdf_interface.subcase_cards.GPRSORT(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL'}
type = 'GPRSORT'
class pyNastran.bdf.bdf_interface.subcase_cards.GPSDCON(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL'}
type = 'GPSDCON'
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

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)}
type = 'GROUNDCHECK'
class pyNastran.bdf.bdf_interface.subcase_cards.GUST(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'GUST'
class pyNastran.bdf.bdf_interface.subcase_cards.HARMONICS(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

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:
value : int

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:
line : str

the line of the card

line_upper : str

unused

lines : List[str]

unused

i : int

unused

type = 'IntCard'
write(self, 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:
value : int/str

the value for the card

allowed_strings = {}
type = 'IntStrCard'
class pyNastran.bdf.bdf_interface.subcase_cards.LINE(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'LINE'
class pyNastran.bdf.bdf_interface.subcase_cards.LOAD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'LOAD'
class pyNastran.bdf.bdf_interface.subcase_cards.LOADSET(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'LOADSET'
class pyNastran.bdf.bdf_interface.subcase_cards.MAXLINES(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'MAXLINES'
class pyNastran.bdf.bdf_interface.subcase_cards.MFLUID(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'MFLUID'
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

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.MODES(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'MODES'
class pyNastran.bdf.bdf_interface.subcase_cards.MODTRAK(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'MODTRAK'
class pyNastran.bdf.bdf_interface.subcase_cards.MPC(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'MPC'
class pyNastran.bdf.bdf_interface.subcase_cards.MPCFORCES(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

MPCFORCES=5 MPCFORCES(REAL)=ALL MPCFORCES(SORT2, PUNCH, REAL)=ALL

allow_ints = True
allowed_keys = {'ABS', 'ATOC', 'CRMS', 'IMAG', 'NOPRINT', 'PHASE', 'PLOT', 'PRINT', 'PSDF', 'PUNCH', 'RALL', 'REAL', 'REL', 'RMS', 'RPRINT', 'RPUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'MPCF'
type = 'MPCFORCES'
class pyNastran.bdf.bdf_interface.subcase_cards.NLCNTL(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'NLCNTL'
class pyNastran.bdf.bdf_interface.subcase_cards.NLLOAD(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

NLLOAD(PRINT, PUNCH)=ALL NLLOAD(PRINT, PUNCH)=N NLLOAD(PRINT, PUNCH)=NONE

allow_ints = True
allowed_keys = {'PRINT', 'PUNCH'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'NLLOAD'
type = 'NLLOAD'
class pyNastran.bdf.bdf_interface.subcase_cards.NLPARM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'NLPARM'
class pyNastran.bdf.bdf_interface.subcase_cards.NLSTRESS(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

NLSTRESS=5 NLSTRESS (SORT1,PRINT,PUNCH,PHASE)=15 NLSTRESS(PLOT)=ALL

allow_ints = True
allowed_keys = {'PLOT', 'PRINT', 'PUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'NLSTRESS'
type = 'NLSTRESS'
class pyNastran.bdf.bdf_interface.subcase_cards.NONLINEAR(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'NONLINEAR'
class pyNastran.bdf.bdf_interface.subcase_cards.NSM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'NSM'
class pyNastran.bdf.bdf_interface.subcase_cards.OFREQUENCY(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL'}
type = 'OFREQUENCY'
class pyNastran.bdf.bdf_interface.subcase_cards.OLOAD(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

OLOAD=ALL OLOAD(SORT1,PHASE)=5

allow_ints = True
allowed_keys = {'ATOC', 'CRMS', 'IMAG', 'NORPRINT', 'PHASE', 'PLOT', 'PRINT', 'PSDF', 'PUNCH', 'RALL', 'REAL', 'RMS', 'RPRINT', 'RPUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'OLOAD'
type = 'OLOAD'
class pyNastran.bdf.bdf_interface.subcase_cards.OMODES(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntStrCard

allowed_strings = {'ALL'}
type = 'OMODES'
class pyNastran.bdf.bdf_interface.subcase_cards.OPRESS(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

OPRESS=ALL OPRESS(PRINT,PUNCH)=17

allow_ints = True
allowed_keys = {'PRINT', 'PUNCH'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'OPRESS'
type = 'OPRESS'
class pyNastran.bdf.bdf_interface.subcase_cards.OTEMP(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

OTEMP=ALL OTEMP(PRINT,PUNCH)=17

allow_ints = True
allowed_keys = {'PRINT', 'PUNCH'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'OTEMP'
type = 'OTEMP'
class pyNastran.bdf.bdf_interface.subcase_cards.OUTRCV(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'OUTRCV'
class pyNastran.bdf.bdf_interface.subcase_cards.PARTN(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'PARTN'
class pyNastran.bdf.bdf_interface.subcase_cards.REPCASE(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'REPCASE'
class pyNastran.bdf.bdf_interface.subcase_cards.RSMETHOD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'RSMETHOD'
class pyNastran.bdf.bdf_interface.subcase_cards.SEFINAL(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'SEFINAL'
class pyNastran.bdf.bdf_interface.subcase_cards.SEQDEP(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.StringCard

allowed_values = ['YES', 'NO']
type = 'SEQDEP'
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

key

temporary method to emulate the old key attribute

type = 'SET'
write(self, 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.SMETHOD(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'SMETHOD'
class pyNastran.bdf.bdf_interface.subcase_cards.SPC(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'SPC'
class pyNastran.bdf.bdf_interface.subcase_cards.SPCFORCES(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

SPCFORCES=5 SPCFORCES(REAL)=ALL SPCFORCES(SORT2, PUNCH, REAL)=ALL

allow_ints = True
allowed_keys = {'ABS', 'ATOC', 'CRMS', 'IMAG', 'NOPRINT', 'PHASE', 'PLOT', 'PRINT', 'PSDF', 'PUNCH', 'RALL', 'REAL', 'REL', 'RMS', 'RPRINT', 'RPUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'SPCF'
type = 'SPCFORCES'
class pyNastran.bdf.bdf_interface.subcase_cards.SUPORT1(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'SUPORT1'
class pyNastran.bdf.bdf_interface.subcase_cards.SYM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'SYM'
class pyNastran.bdf.bdf_interface.subcase_cards.SYMCOM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'SYMCOM'
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 = []
type = 'StringCard'
validate(self)[source]
write(self, spaces)[source]
class pyNastran.bdf.bdf_interface.subcase_cards.TRIM(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'TRIM'
class pyNastran.bdf.bdf_interface.subcase_cards.TSTEP(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'TSTEP'
class pyNastran.bdf.bdf_interface.subcase_cards.TSTEPNL(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'TSTEPNL'
class pyNastran.bdf.bdf_interface.subcase_cards.TSTRU(value)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.IntCard

type = 'TSTRU'
class pyNastran.bdf.bdf_interface.subcase_cards.VELOCITY(key, value, options)[source]

Bases: pyNastran.bdf.bdf_interface.subcase_cards.CheckCard

VELOCITY=5 VELOCITY(REAL)=ALL VELOCITY(SORT2, PUNCH, REAL)=ALL

allow_ints = True
allowed_keys = {'ABS', 'ATOC', 'CRMS', 'IMAG', 'NOPRINT', 'PHASE', 'PLOT', 'PRINT', 'PSDF', 'PUNCH', 'RALL', 'REAL', 'REL', 'RMS', 'RPRINT', 'RPUNCH', 'SORT1', 'SORT2'}
allowed_strings = {'ALL', 'NONE'}
allowed_values = {}
short_name = 'VELO'
type = 'VELOCITY'
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

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'])}
type = 'WEIGHTCHECK'
pyNastran.bdf.bdf_interface.subcase_cards.split_by_mixed_commas_parentheses(str_options)[source]

Excessively complicated function to split something excessively complicated. Thankfully, it only has one set of parentheses and no nested blocks.

Parameters:
str_options : str

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:
options : List[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_value : str???

???

Returns:
values : List[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, values, 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
Parameters:
values : List[int]

the Set values

options : int / str; default=’‘

the Set ID

spaces : str; default=’‘

indentation

Returns:
msg : str

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, options, value, spaces='')[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)[source]

helper for _validate_msg

pyNastran.bdf.bdf_interface.verify_validate._validate_dict(model, objects)[source]

helper method for validate_bdf

pyNastran.bdf.bdf_interface.verify_validate._validate_dict_list(model, objects_dict)[source]

helper method for validate_bdf

pyNastran.bdf.bdf_interface.verify_validate._validate_list(model, objects)[source]

helper method for validate_bdf

pyNastran.bdf.bdf_interface.verify_validate._validate_msg(card_obj)[source]

helper for _validate_traceback

pyNastran.bdf.bdf_interface.verify_validate._validate_traceback(model, obj, unused_error, ifailed, nmax_failed)[source]

helper method for validate_bdf to write a traceback

pyNastran.bdf.bdf_interface.verify_validate._verify_dict(dict_obj, xref)[source]

helper for verify_bdf

pyNastran.bdf.bdf_interface.verify_validate._verify_dict_list(dict_list, xref)[source]

helper for verify_bdf

pyNastran.bdf.bdf_interface.verify_validate.validate_bdf(model)[source]
pyNastran.bdf.bdf_interface.verify_validate.verify_bdf(model, xref)[source]
utils Module
Defines various utilities for BDF parsing including:
  • to_fields
pyNastran.bdf.bdf_interface.utils.expand_tabs(line)[source]

expands the tabs; breaks if you mix commas and tabs

pyNastran.bdf.bdf_interface.utils.fill_dmigs(model)[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)[source]

Extracts the solution from the executive control deck

pyNastran.bdf.bdf_interface.utils.print_filename(filename, relpath=True)[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:
filename : str

a filename string

Returns:
filename_string : str

a shortened representation of the filename

pyNastran.bdf.bdf_interface.utils.to_fields(card_lines, card_name)[source]

Converts a series of lines in a card into string versions of the field. Handles large, small, and CSV formatted cards.

Parameters:
lines : List[str]

the lines of the BDF card object

card_name : str

the card_name -> ‘GRID’

Returns:
fields : List[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(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the aero control surface cards

_write_aero_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the aero cards

_write_bdf_includes(self, out_filenames, bdf_files, relative_dirname=None, is_windows=True)[source]

Writes the INCLUDE files

Parameters:
out_filenames : dict[fname]

fname_in - the nominal bdf that was read fname_out - the bdf that will be written

relative_dirname : str; default=None -> os.curdir

A relative path to reference INCLUDEs. ‘’ : relative to the main bdf None : use the current directory path : absolute path

is_windows : bool; default=None
True/False : Windows 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(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Write the common outputs so none get missed…

Parameters:
bdf_file : file

the file object

size : int (default=8)

the field width

is_double : bool (default=False)

is this double precision

_write_constraints_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the constraint cards sorted by ID

_write_contact_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the contact cards sorted by ID

_write_coords_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the coordinate cards in a sorted order

_write_dloads_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the dload cards sorted by ID

_write_dmigs_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the DMIG cards

Parameters:
size : int

large field (16) or small field (8)

_write_dynamic_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the dynamic cards sorted by ID

_write_elements_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the elements in a sorted order

_write_flutter_file(self, bdf_files, size=8, is_double=False, write_aero_in_flutter=True, is_long_ids=None)[source]

Writes the flutter cards

_write_grids_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the GRID-type cards

_write_gust_file(self, bdf_files, size=8, is_double=False, write_aero_in_gust=True, is_long_ids=None)[source]

Writes the gust cards

_write_loads_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the load cards sorted by ID

_write_masses_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the mass cards sorted by ID

_write_materials_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the materials in a sorted order

_write_nodes_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the NODE-type cards

_write_nsm_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the nsm in a sorted order

_write_optimization_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the optimization cards sorted by ID

_write_params_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the PARAM cards

_write_properties_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the properties in a sorted order

_write_rejects_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the rejected (processed) cards and the rejected unprocessed cardlines

_write_rigid_elements_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the rigid elements in a sorted order

_write_sets_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the SETx cards sorted by ID

_write_static_aero_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the static aero cards

_write_superelements_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the Superelement cards

Parameters:
size : int

large field (16) or small field (8)

_write_tables_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the TABLEx cards sorted by ID

_write_thermal_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the thermal cards

_write_thermal_materials_file(self, bdf_files, size=8, is_double=False, is_long_ids=None)[source]

Writes the thermal materials in a sorted order

write_bdfs(self, out_filenames, relative_dirname=None, encoding=None, size=8, is_double=False, enddata=None, close=True, is_windows=None)[source]

Writes the BDF.

Parameters:
out_filename : varies; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

relative_dirname : str; default=None -> os.curdir

A relative path to reference INCLUDEs. ‘’ : relative to the main bdf None : use the current directory path : absolute path

encoding : str; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

size : int; {8, 16}

the field size

is_double : bool; default=False

False : small field True : large field

enddata : bool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

close : bool; default=True

should the output file be closed

is_windows : bool; default=None
True/False : Windows 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, node_set, nids, all_nids, nodes_xyz)[source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_final(nid_pairs, model, tol, node_set=None, debug=False)[source]

apply nodal equivalencing to model

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node(model, renumber_nodes=False)[source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node_set(model, node_set, renumber_nodes=False)[source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._get_tree(nodes_xyz, msg='')[source]

gets the kdtree

pyNastran.bdf.mesh_utils.bdf_equivalence._get_xyz_cid0(model, nids)[source]

gets xyz_cid0

pyNastran.bdf.mesh_utils.bdf_equivalence._nodes_xyz_nids_to_nid_pairs(nodes_xyz, nids, tol, log, inew, node_set=None, neq_max=4, debug=False)[source]

helper for equivalencing

pyNastran.bdf.mesh_utils.bdf_equivalence.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)[source]

Equivalences nodes; keeps the lower node id; creates two nodes with the same

Parameters:
bdf_filename : str / BDF

str : bdf file path BDF : a BDF model that is fully valid (see xref)

bdf_filename_out : str

a bdf_filename to write

tol : float

the spherical tolerance

renumber_nodes : bool

should the nodes be renumbered (default=False)

neq_max : int

the number of “close” points (default=4)

xref : bool

does the model need to be cross_referenced (default=True; only applies to model option)

node_set : List[int] / (n, ) ndarray; default=None

the list/array of nodes to consider (not supported with renumber_nodes=True)

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

remove_collapsed_elements : bool; default=False (unsupported)
True : 1D/2D/3D elements will not be collapsed;

CELASx/CDAMP/MPC/etc. are not considered

False : no elements will be removed

avoid_collapsed_elements : bool; default=False (unsupported)
True : only 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_collapse : bool; 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)

debug : bool

bdf debugging

log : logger(); default=None

bdf logging

Returns:
model : BDF()

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 stil 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, model2_renumber)[source]

apply cards from model2 to model if they don’t exist in model

pyNastran.bdf.mesh_utils.bdf_merge._assemble_mapper(mappers, mapper_0, data_members, mapper_renumber=None)[source]

Assemble final mappings from all original ids to the ids in the merged and possibly renumbered model.

Parameters:
mappers : List[mapper]
mapper : dict[key] : value
key : ???

???

value : ???

???

mapper_0 : mapper
key : ???

???

value : ???

???

data_members : List[str]
list of things to include in the mappers?
data_members = [

‘coords’, ‘nodes’, ‘elements’, ‘masses’, ‘properties’, ‘properties_mass’, ‘materials’, ‘sets’, ‘rigid_elements’, ‘mpcs’,

]

mapper_renumber : dict[key]: value; default=None
key : str

a BDF attribute

value : dict[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_all : List[mappers]

One mapper for each bdf_filename

pyNastran.bdf.mesh_utils.bdf_merge._dict_key_to_key(dictionary)[source]

creates a dummy map from the nominal key to the nominal key

pyNastran.bdf.mesh_utils.bdf_merge._dicts_key_to_key(dictionaries)[source]

creates a dummy map from the nominal key to the nominal key for multiple input dictionaries

pyNastran.bdf.mesh_utils.bdf_merge._get_mapper_0(model)[source]

Get the mapper for the first model.

Parameters:
model : BDF()

the bdf model object

Returns:
mapper : dict[key]: value
key : str

a BDF attribute

value : dict[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_renumber)[source]

Renumbers a mapper

Parameters:
mapper_0 : dict[key]: value
key : str

a BDF attribute

value : dict[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:
mapper : dict[map_type]
map_type : ???

???

sub_mapper : dict[key] : value
key : ???

???

value : ???

???

pyNastran.bdf.mesh_utils.bdf_merge.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)[source]

Merges multiple BDF into one file

Parameters:
bdf_filenames : List[str]

list of bdf filenames

bdf_filename_out : str / None

the output bdf filename (default=None; None -> no writing)

renumber : bool

should the bdf be renumbered (default=True)

encoding : str

the unicode encoding (default=None; system default)

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

cards_to_skip : List[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_deck : bool, optional, default

If true, don’t consider the case control deck while merging.

Returns:
model : BDF

Merged model.

mappers_all : List[mapper]
mapper : Dict[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_dict : dict[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:
model : BDF()

the BDF object

mapper : dict[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, bdf_filename_out, size=8, is_double=False, starting_id_dict=None, round_ids=False, cards_to_skip=None, log=None, debug=False)[source]

Renumbers a BDF

Parameters:
bdf_filename : str / 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_out : str / None

str : a bdf_filename to write None : don’t write the BDF

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

starting_id_dict : dict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

key : str

the key (e.g. eid, nid, cid, …)

starting_id : int, None

int : the value to start from None : don’t renumber this key

round_ids : bool; 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_skip : List[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:
model : BDF()

a renumbered BDF object corresponding to bdf_filename_out

mapper : Dict[bdf_attribute]

List of mapper dictionaries of original ids to merged bdf_attribute : str

a BDF attribute (e.g., ‘nodes’, ‘elements’)

old_id_to_new_id_dict : dict[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)[source]

Get the starting ids dictionary used for renumbering with ids greater than those in model.

Parameters:
model : BDF

BDF object to get maximum ids from.

Returns:
starting_id_dict : dict {str

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_filename : str / 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_out : str / None

str : a bdf_filename to write None : don’t write the BDF

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

starting_id_dict : dict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

key : str

the key (e.g. eid, nid, cid, …)

starting_id : int, None

int : the value to start from None : don’t renumber this key

cards_to_skip : List[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:
model : BDF()

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, eids_to_check=None, xyz_cid0=None, min_edge_length=0.0)[source]

A standard quad is a nice rectangle. If an edge is collapsed, it’s a triangle. Change the element type.

Parameters:
model : BDF()

a BDF model that has not had it’s properties/load xref’d, but is valid such that it could

eids : list; (default=None -> all CQUAD4s)

the subset of element ids to check

xyz_cid0 : (n, 3) ndarray

nodes in cid=0

min_edge_length : float; 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, xyz_scale, time_scale, weight_scale)[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, xyz_scale)[source]

Converts the spc/mpcs

Supports: SPC1, SPC, SPCAX Implicitly supports: MPC, MPCADD, SPCADD

pyNastran.bdf.mesh_utils.convert._convert_coordinates(model, xyz_scale)[source]

Converts the coordinate systems

Supports: CORD1x, CORD2x

pyNastran.bdf.mesh_utils.convert._convert_dconstr(model, dconstr, pressure_scale)[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, xyz_scale)[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_dvprel1(dvprel, xyz_scale, mass_scale, weight_scale)[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_elements(model, xyz_scale, time_scale, mass_scale, weight_scale)[source]

Converts the elements

Supports: CTRIA3, CTRIA6, CTRIAR, CQUAD4, CQUAD8, CQUADR,
CELAS2, CELAS4, CDAMP2, CDAMP4, CBUSH, CONROD, CBAR, CBEAM, GENEL, CONM2, CMASS4
Skips : CELAS1, 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, xyz_scale, time_scale, weight_scale, temperature_scale)[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, xyz_scale, mass_scale, weight_scale, temperature_scale)[source]

Converts the materials

Supports: MAT1, MAT2, MAT3, MAT8, MAT9, MAT10, MAT11

pyNastran.bdf.mesh_utils.convert._convert_nodes(model, xyz_scale)[source]

Converts the nodes

Supports: GRID

pyNastran.bdf.mesh_utils.convert._convert_optimization(model, xyz_scale, mass_scale, weight_scale)[source]

Converts the optimization objects

Limited Support: DESVAR, DCONSTR, DVCREL1, DVPREL1

pyNastran.bdf.mesh_utils.convert._convert_pbar(prop, xyz_scale, area_scale, area_moi_scale, nsm_bar_scale)[source]

converts a PBAR

pyNastran.bdf.mesh_utils.convert._convert_pbeam(prop, xyz_scale, area_scale, area_moi_scale, nsm_bar_scale)[source]

converts a PBEAM

pyNastran.bdf.mesh_utils.convert._convert_pbeam3(prop, xyz_scale, area_scale, area_moi_scale, nsm_bar_scale)[source]

converts a PBEAM3

pyNastran.bdf.mesh_utils.convert._convert_pbush(prop, velocity_scale, mass_scale, stiffness_scale)[source]
pyNastran.bdf.mesh_utils.convert._convert_pbush1d(model, prop, xyz_scale, area_scale, mass_scale, damping_scale, stiffness_scale)[source]
pyNastran.bdf.mesh_utils.convert._convert_properties(model, xyz_scale, time_scale, mass_scale, weight_scale, temperature_scale)[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, velocity_scale, accel_scale, force_scale)[source]

LOAD asssumes force

pyNastran.bdf.mesh_utils.convert._scale_caero(caero, xyz_scale, xyz_aefacts)[source]
pyNastran.bdf.mesh_utils.convert._scale_term(name, coeffs, terms, scales)[source]
pyNastran.bdf.mesh_utils.convert._set_wtmass(model, gravity_scale)[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, terms, quiet=False)[source]

determines the mass, length, time scaling factors

pyNastran.bdf.mesh_utils.convert.convert(model, units_to, units=None)[source]

Converts a model from a set of defined units

Parameters:
model : BDF

cross references the model (default=True)

units_to : List[str]

[length, mass, time] length = {in, ft, m, cm, mm} mass = {g, kg, Mg, lbm, slug, slinch} time = {s}

units : list

overwrites model.units

pyNastran.bdf.mesh_utils.convert.convert_length(length_from, length_to)[source]

Determines the length scale factor

We crate a gravity_scale_length for any non-standard unit (ft, m)

pyNastran.bdf.mesh_utils.convert.convert_mass(mass_from, mass_to, log)[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, terms, scales, bdf_filename_out=None, encoding=None, log=None, debug=True)[source]

Scales a BDF based on factors for 3 of the 6 independent terms

Parameters:
bdf_filename : str / BDF()

a BDF filename

terms : List[str]; length=3

the names {M, L, T, F, P, V} mass, length, time, force, pressure, velocity

scales : List[float]; length=3

the scaling factors

bdf_filename_out : str; default=None

a BDF filename to write

Returns:
model : BDF()

the scaled BDF

pyNastran.bdf.mesh_utils.convert.scale_model(model, xyz_scale, mass_scale, time_scale, weight_scale, gravity_scale, convert_nodes=True, convert_elements=True, convert_properties=True, convert_materials=True, convert_aero=True, convert_constraints=True, convert_loads=True, convert_optimization=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, min_theta=0.1, max_theta=175.0, max_skew=70.0, max_aspect_ratio=100.0, max_taper_ratio=4.0)[source]

Removes bad CQUAD4/CTRIA3 elements

Parameters:
model : BDF ()

this should be equivalenced

min_theta : float; default=0.1

the maximum interior angle (degrees)

max_theta : float; default=175.

the maximum interior angle (degrees)

max_skew : float; default=70.

the maximum skew angle (degrees)

max_aspect_ratio : float; default=100.

the max aspect ratio

taper_ratio : float; 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:
model : BDF()

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_map : Dict[nid]->index; default=None

a mapper dictionary

Returns:
quality : Dict[name]

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

values : The 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, xyz_cid0, nid_map, min_theta=0.1, max_theta=175.0, max_skew=70.0, max_aspect_ratio=100.0, max_taper_ratio=4.0)[source]

Get the bad shell elements

Parameters:
model : BDF()

the model object

xyz_cid0 : (N, 3) float ndarray

the xyz coordinates in cid=0

nid_map : dict[nid]
nid : int

the node id

index : int

the index of the node id in xyz_cid0

min_theta : float; default=0.1

the maximum interior angle (degrees)

max_theta : float; default=175.

the maximum interior angle (degrees)

max_skew : float; default=70.

the maximum skew angle (degrees)

max_aspect_ratio : float; default=100.

the max aspect ratio

taper_ratio : float; default=4.0

the taper ratio; applies to CQUAD4s only

Returns:
eids_failed : List[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

export_mcids Module
Defines:
  • nodes, bars = export_mcids(bdf_filename, csv_filename=None)
pyNastran.bdf.mesh_utils.export_mcids._add_elements(nid, eid, nodes, bars, centroid, iaxis, jaxis, export_both_axes, export_xaxis)[source]

adds the element data

pyNastran.bdf.mesh_utils.export_mcids._export_coord_axes(nodes, bars, csv_filename)[source]

save the coordinate systems in a csv file

pyNastran.bdf.mesh_utils.export_mcids._export_quad(elem, nodes, iply, nid, eid, pids_failed, bars, export_both_axes, export_xaxis, consider_property_rotation)[source]
pyNastran.bdf.mesh_utils.export_mcids._export_tria(elem, nodes, iply, nid, eid, pids_failed, bars, export_both_axes, export_xaxis, consider_property_rotation)[source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._get_elements(model, eids)[source]
pyNastran.bdf.mesh_utils.export_mcids._rotate_mcid(elem, pid_ref, iply, imat, jmat, normal, consider_property_rotation=True)[source]

rotates a material coordinate system

pyNastran.bdf.mesh_utils.export_mcids.export_mcids(bdf_filename, csv_filename=None, eids=None, export_xaxis=True, export_yaxis=True, iply=0, log=None, debug=False)[source]

Exports the element material coordinates systems for non-isotropic materials.

Parameters:
bdf_filename : str/BDF

a bdf filename or BDF model

csv_filename : str; default=None

str : the path to the output csv None : don’t write a CSV

eids : List[int]

the element ids to consider

export_xaxis : bool; default=True

export the x-axis

export_yaxis : bool; default=True

export the x-axis

iply : int; default=0

TODO: not validated the ply 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

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, eid, pid_method='aesurf')[source]

gets the property id for the subpanel

pyNastran.bdf.mesh_utils.export_caero_mesh.export_caero_mesh(model, caero_bdf_filename='caero.bdf', is_subpanel_model=True)[source]

write the CAERO cards as CQUAD4s that can be visualized

pyNastran.bdf.mesh_utils.export_caero_mesh.export_caero_model_aesurf(model, caero_bdf_filename='caero.bdf', is_subpanel_model=True)[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’)
  • model = make_symmetric_model(
    bdf_filename, plane=’xz’, zero_tol=1e-12, log=None, debug=True)
pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_elements(model, mirror_model, nid_offset, eid_offset)[source]

mirrors model.elements

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_rigid_elements(model, mirror_model, nid_offset, eid_offset)[source]

mirrors model.rigid_elements

pyNastran.bdf.mesh_utils.mirror_mesh._asymmetrically_mirror_aero_coords(model, aero_cids_set, cid_offset, plane='xz')[source]

we’ll leave i the same, flip j, and invert k

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_aero(model, nid_offset, plane)[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
Doesnt consider:
  • AELIST
  • AESURF
  • AERO
  • AEFORCE
  • AEPRES
  • CAERO2/3/4/5
  • PAERO1/2/3/4/5
  • AESURFS
pyNastran.bdf.mesh_utils.mirror_mesh._mirror_elements(model, mirror_model, nid_offset, use_eid_offset=True)[source]

Mirrors the elements

elements:
0d : CELAS1, CELAS2, CELAS3, CELAS4, CDAMP1, CDAMP2, CDAMP3, CDAMP4, CDAMP5
CFAST, CBUSH, CBUSH1D

2d : CTRIA3, CQUAD4, CTRIA6, CQUAD8, CQUAD, CTRIAR, CQUADR 3d : ??? missing : CVISC, CTRIAX, CTRIAX6, CQUADX, CQUADX8, CCONEAX

rigid_elements:
loaded: RBE2, RBE3 missing: RBAR, RBAR1
mass_elements:
loaded: CONM2 missing CONM1, CMASS1, CMASS2, CMASS3, CMASS4

Notes

Doesn’t handle CBAR/CBEAM offsets Doesn’t handle CBEAM SPOINTs

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_loads(model, nid_offset=0, eid_offset=0)[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, plane='xz')[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, mirror_model, plane, use_nid_offset=True)[source]

Mirrors the GRIDs about an arbitrary plane

Parameters:
model : BDF

???

mirror_model : BDF

???

plane : str

???

use_nid_offset : bool

???

Returns:
nid_offset : int

the node id offset

plane : str

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)[source]

gets the index fo the mirror plane

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror(bdf_filename, plane='xz', log=None, debug=True)[source]

Mirrors the model about the symmetry plane

Parameters:
bdf_filename : str / BDF()

str : the bdf filename BDF : the BDF model object

plane : str; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns:
model : BDF()

BDF : the BDF model object

nid_offset : int

the offset node id

eid_offset : int

the offset element id

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror_plane(bdf_filename, plane, mirror_model=None, log=None, debug=True, use_nid_offset=True)[source]

mirrors a model about an arbitrary plane

pyNastran.bdf.mesh_utils.mirror_mesh.get_model(bdf_filename, log=None, debug=True)[source]

helper method

pyNastran.bdf.mesh_utils.mirror_mesh.make_symmetric_model(bdf_filename, plane='xz', zero_tol=1e-12, log=None, debug=True)[source]

Makes a symmetric model from a full model

Parameters:
bdf_filename : str / BDF()

str : the bdf filename BDF : the BDF model object

plane : str; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

zaero_tol : float; default=1e-12

the symmetry plane tolerance

Returns:
model : BDF()

BDF : the BDF model object

## TODO: doesn’t handle elements straddling the centerline
pyNastran.bdf.mesh_utils.mirror_mesh.write_bdf_symmetric(bdf_filename, out_filename=None, encoding=None, size=8, is_double=False, enddata=None, close=True, plane='xz', log=None)[source]

Mirrors the model about the symmetry plane

Parameters:
bdf_filename : str / BDF()

str : the bdf filename BDF : the BDF model object

out_filename : varies; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

encoding : str; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

size : int; {8, 16}

the field size

is_double : bool; default=False

False : small field True : large field

enddata : bool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

close : bool; default=True

should the output file be closed

plane : str; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns:
model : BDF()

BDF : the BDF model object

nid_offset : int

the offset node id

eid_offset : int

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_filename : str/BDF

str : the path the the *.bdf file BDF : a BDF() boject

mpc_id : int; 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, xyz_compare, tol, neq_max=4, msg='')[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

tol : float

the max spherical tolerance

neq_max : int; default=4

the number of close nodes

msg : str; default=’‘

error message

Returns:
kdt : cKDTree()

the kdtree object

ieq : int 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

slots : int 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

msg : str; default=’‘

error message

pyNastran.bdf.mesh_utils.find_closest_nodes.find_closest_nodes(nodes_xyz, nids, xyz_compare, neq_max=1, tol=None, msg='')[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

tol : float; default=None

the max spherical tolerance None : the whole model

neq_max : int; default=1.0

the number of “close” points

msg : str; 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, xyz_compare, neq_max, tol, msg='')[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_max : int

the number of “close” points (default=4)

tol : float

the max spherical tolerance

msg : str; 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, eids)[source]

finds coplanar triangles

Parameters:
bdf_filename : str

the path to the bdf input file

eids : list

the element ids to consider

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, eids=None, maps=None)[source]

Gets the free edges for shell elements. A free edge is an edge that is only connected to 1 shell element.

Parameters:
model : BDF()

the BDF model

eids : List[int]; default=None

a subset of elements to consider

maps : List[…] (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)

pyNastran.bdf.mesh_utils.free_edges.non_paired_edges(model, eids=None, maps=None)[source]

Gets the edges not shared by exactly 2 elements. This is useful for identifying rib/spar intersections.

Parameters:
model : BDF()

the BDF model

eids : List[int]; default=None

a subset of elements to consider

maps : List[…] (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_edges : List[(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:
model : BDF()

the BDF object

skin_filename : str

the file to write

face_map : dict[sorted_face]

sorted_face : List[int, int, int] / List[int, int, int, int] face : List[int, int, int] / List[int, int, int, int]

nids_to_write : List[int, int, …]

list of node ids to write

eids_to_write : List[int, int, …]

list of element ids to write

mids_to_write : List[int, int, …]

list of material ids to write

eid_set : Set[int]

is the type right???

eid_shell : int

the next id to use for the shell id

pid_shell : int

the next id to use for the shell property

mid_shell : int

the next id to use for the shell material

write_solids : bool; default=False

write solid elements that have skinned faces

write_shells : bool; default=True

write shell elements

size : int; default=/8

the field width

is_double : bool; default=False

double precision flag

encoding : str; default=None -> system default

the string encoding

pyNastran.bdf.mesh_utils.free_faces.get_element_faces(model, element_ids=None)[source]

Gets the elements and faces that are skinned from solid elements. This includes internal faces.

Parameters:
model : BDF()

the BDF object

element_ids : List[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)[source]

Gets the elements and faces that are skinned from solid elements This doesn’t include internal faces.

Parameters:
model : BDF()

the BDF object

Returns:
eid_set : Dict[tuple(int, int, …)] = List[int]

key : sorted face value : list of element ids with that face

face_map : Dict[tuple(int, int, …)] = List[int]

key : sorted face value : unsorted face

pyNastran.bdf.mesh_utils.free_faces.main()[source]

docopt interface

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:
model : BDF() or str

BDF : the BDF object str : bdf_filename and the read_bdf method is called

skin_filename : str

the file to write

write_solids : bool; default=False

write solid elements that have skinned faces

write_shells : bool; default=False

write shell elements

size : int; default=8

the field width

is_double : bool; default=False

double precision flag

encoding : str; default=None -> system default

the string encoding

log : logger; default=None

a python logging object

punch : bool; 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, eid_start, theta_tol=30.0, is_symmetric=True, consider_flippped_normals=True)[source]

extracts the OML faces (outer mold line)

Parameters:
bdf_filename : str or BDF()

the bdf filename

eid_start : int

the element to start from

theta_tol : float; default=30.

the angular tolerance in degrees

is_symmetric : bool; default=True

is the y=0 plane considered to be part of the OML

consider_flippped_normals : bool; 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, 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, pconv_used, tableht_used, tableh1_used)[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)[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, remove_nids=True, remove_cids=True, remove_pids=True, remove_mids=True)[source]

Takes an uncross-referenced bdf and removes unused data

removes unused:
  • nodes
  • properties
  • materials
  • coords
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_filename : str; BDF

str : use the read_bdf method BDF : assume it’s a model

pin_flags_filename : str; default=None

the pin flag file to write this is optional as you may need to define your own map

bdf_filename_out : str; default=None

write the updated deck

debug : bool/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:
model : BDF()

the BDF object

pin_flag_map : dict[eid]
eid : int

the element id

pin_flag : int

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, node_set, nids, all_nids, nodes_xyz)[source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_final(nid_pairs, model, tol, node_set=None, debug=False)[source]

apply nodal equivalencing to model

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node(model, renumber_nodes=False)[source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._eq_nodes_setup_node_set(model, node_set, renumber_nodes=False)[source]

helper function for _eq_nodes_setup

pyNastran.bdf.mesh_utils.bdf_equivalence._get_tree(nodes_xyz, msg='')[source]

gets the kdtree

pyNastran.bdf.mesh_utils.bdf_equivalence._get_xyz_cid0(model, nids)[source]

gets xyz_cid0

pyNastran.bdf.mesh_utils.bdf_equivalence._nodes_xyz_nids_to_nid_pairs(nodes_xyz, nids, tol, log, inew, node_set=None, neq_max=4, debug=False)[source]

helper for equivalencing

pyNastran.bdf.mesh_utils.bdf_equivalence.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)[source]

Equivalences nodes; keeps the lower node id; creates two nodes with the same

Parameters:
bdf_filename : str / BDF

str : bdf file path BDF : a BDF model that is fully valid (see xref)

bdf_filename_out : str

a bdf_filename to write

tol : float

the spherical tolerance

renumber_nodes : bool

should the nodes be renumbered (default=False)

neq_max : int

the number of “close” points (default=4)

xref : bool

does the model need to be cross_referenced (default=True; only applies to model option)

node_set : List[int] / (n, ) ndarray; default=None

the list/array of nodes to consider (not supported with renumber_nodes=True)

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

remove_collapsed_elements : bool; default=False (unsupported)
True : 1D/2D/3D elements will not be collapsed;

CELASx/CDAMP/MPC/etc. are not considered

False : no elements will be removed

avoid_collapsed_elements : bool; default=False (unsupported)
True : only 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_collapse : bool; 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)

debug : bool

bdf debugging

log : logger(); default=None

bdf logging

Returns:
model : BDF()

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 stil 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, model2_renumber)[source]

apply cards from model2 to model if they don’t exist in model

pyNastran.bdf.mesh_utils.bdf_merge._assemble_mapper(mappers, mapper_0, data_members, mapper_renumber=None)[source]

Assemble final mappings from all original ids to the ids in the merged and possibly renumbered model.

Parameters:
mappers : List[mapper]
mapper : dict[key] : value
key : ???

???

value : ???

???

mapper_0 : mapper
key : ???

???

value : ???

???

data_members : List[str]
list of things to include in the mappers?
data_members = [

‘coords’, ‘nodes’, ‘elements’, ‘masses’, ‘properties’, ‘properties_mass’, ‘materials’, ‘sets’, ‘rigid_elements’, ‘mpcs’,

]

mapper_renumber : dict[key]: value; default=None
key : str

a BDF attribute

value : dict[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_all : List[mappers]

One mapper for each bdf_filename

pyNastran.bdf.mesh_utils.bdf_merge._dict_key_to_key(dictionary)[source]

creates a dummy map from the nominal key to the nominal key

pyNastran.bdf.mesh_utils.bdf_merge._dicts_key_to_key(dictionaries)[source]

creates a dummy map from the nominal key to the nominal key for multiple input dictionaries

pyNastran.bdf.mesh_utils.bdf_merge._get_mapper_0(model)[source]

Get the mapper for the first model.

Parameters:
model : BDF()

the bdf model object

Returns:
mapper : dict[key]: value
key : str

a BDF attribute

value : dict[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_renumber)[source]

Renumbers a mapper

Parameters:
mapper_0 : dict[key]: value
key : str

a BDF attribute

value : dict[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:
mapper : dict[map_type]
map_type : ???

???

sub_mapper : dict[key] : value
key : ???

???

value : ???

???

pyNastran.bdf.mesh_utils.bdf_merge.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)[source]

Merges multiple BDF into one file

Parameters:
bdf_filenames : List[str]

list of bdf filenames

bdf_filename_out : str / None

the output bdf filename (default=None; None -> no writing)

renumber : bool

should the bdf be renumbered (default=True)

encoding : str

the unicode encoding (default=None; system default)

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

cards_to_skip : List[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_deck : bool, optional, default

If true, don’t consider the case control deck while merging.

Returns:
model : BDF

Merged model.

mappers_all : List[mapper]
mapper : Dict[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_dict : dict[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:
model : BDF()

the BDF object

mapper : dict[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, bdf_filename_out, size=8, is_double=False, starting_id_dict=None, round_ids=False, cards_to_skip=None, log=None, debug=False)[source]

Renumbers a BDF

Parameters:
bdf_filename : str / 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_out : str / None

str : a bdf_filename to write None : don’t write the BDF

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

starting_id_dict : dict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

key : str

the key (e.g. eid, nid, cid, …)

starting_id : int, None

int : the value to start from None : don’t renumber this key

round_ids : bool; 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_skip : List[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:
model : BDF()

a renumbered BDF object corresponding to bdf_filename_out

mapper : Dict[bdf_attribute]

List of mapper dictionaries of original ids to merged bdf_attribute : str

a BDF attribute (e.g., ‘nodes’, ‘elements’)

old_id_to_new_id_dict : dict[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)[source]

Get the starting ids dictionary used for renumbering with ids greater than those in model.

Parameters:
model : BDF

BDF object to get maximum ids from.

Returns:
starting_id_dict : dict {str

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_filename : str / 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_out : str / None

str : a bdf_filename to write None : don’t write the BDF

size : int; {8, 16}; default=8

the bdf write precision

is_double : bool; default=False

the field precision to write

starting_id_dict : dict, None (default=None)

None : renumber everything starting from 1 dict : {key : starting_id}

key : str

the key (e.g. eid, nid, cid, …)

starting_id : int, None

int : the value to start from None : don’t renumber this key

cards_to_skip : List[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:
model : BDF()

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, eids_to_check=None, xyz_cid0=None, min_edge_length=0.0)[source]

A standard quad is a nice rectangle. If an edge is collapsed, it’s a triangle. Change the element type.

Parameters:
model : BDF()

a BDF model that has not had it’s properties/load xref’d, but is valid such that it could

eids : list; (default=None -> all CQUAD4s)

the subset of element ids to check

xyz_cid0 : (n, 3) ndarray

nodes in cid=0

min_edge_length : float; 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, xyz_scale, time_scale, weight_scale)[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, xyz_scale)[source]

Converts the spc/mpcs

Supports: SPC1, SPC, SPCAX Implicitly supports: MPC, MPCADD, SPCADD

pyNastran.bdf.mesh_utils.convert._convert_coordinates(model, xyz_scale)[source]

Converts the coordinate systems

Supports: CORD1x, CORD2x

pyNastran.bdf.mesh_utils.convert._convert_dconstr(model, dconstr, pressure_scale)[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, xyz_scale)[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_dvprel1(dvprel, xyz_scale, mass_scale, weight_scale)[source]

helper for _convert_optimization

pyNastran.bdf.mesh_utils.convert._convert_elements(model, xyz_scale, time_scale, mass_scale, weight_scale)[source]

Converts the elements

Supports: CTRIA3, CTRIA6, CTRIAR, CQUAD4, CQUAD8, CQUADR,
CELAS2, CELAS4, CDAMP2, CDAMP4, CBUSH, CONROD, CBAR, CBEAM, GENEL, CONM2, CMASS4
Skips : CELAS1, 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, xyz_scale, time_scale, weight_scale, temperature_scale)[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, xyz_scale, mass_scale, weight_scale, temperature_scale)[source]

Converts the materials

Supports: MAT1, MAT2, MAT3, MAT8, MAT9, MAT10, MAT11

pyNastran.bdf.mesh_utils.convert._convert_nodes(model, xyz_scale)[source]

Converts the nodes

Supports: GRID

pyNastran.bdf.mesh_utils.convert._convert_optimization(model, xyz_scale, mass_scale, weight_scale)[source]

Converts the optimization objects

Limited Support: DESVAR, DCONSTR, DVCREL1, DVPREL1

pyNastran.bdf.mesh_utils.convert._convert_pbar(prop, xyz_scale, area_scale, area_moi_scale, nsm_bar_scale)[source]

converts a PBAR

pyNastran.bdf.mesh_utils.convert._convert_pbeam(prop, xyz_scale, area_scale, area_moi_scale, nsm_bar_scale)[source]

converts a PBEAM

pyNastran.bdf.mesh_utils.convert._convert_pbeam3(prop, xyz_scale, area_scale, area_moi_scale, nsm_bar_scale)[source]

converts a PBEAM3

pyNastran.bdf.mesh_utils.convert._convert_pbush(prop, velocity_scale, mass_scale, stiffness_scale)[source]
pyNastran.bdf.mesh_utils.convert._convert_pbush1d(model, prop, xyz_scale, area_scale, mass_scale, damping_scale, stiffness_scale)[source]
pyNastran.bdf.mesh_utils.convert._convert_properties(model, xyz_scale, time_scale, mass_scale, weight_scale, temperature_scale)[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, velocity_scale, accel_scale, force_scale)[source]

LOAD asssumes force

pyNastran.bdf.mesh_utils.convert._scale_caero(caero, xyz_scale, xyz_aefacts)[source]
pyNastran.bdf.mesh_utils.convert._scale_term(name, coeffs, terms, scales)[source]
pyNastran.bdf.mesh_utils.convert._set_wtmass(model, gravity_scale)[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, terms, quiet=False)[source]

determines the mass, length, time scaling factors

pyNastran.bdf.mesh_utils.convert.convert(model, units_to, units=None)[source]

Converts a model from a set of defined units

Parameters:
model : BDF

cross references the model (default=True)

units_to : List[str]

[length, mass, time] length = {in, ft, m, cm, mm} mass = {g, kg, Mg, lbm, slug, slinch} time = {s}

units : list

overwrites model.units

pyNastran.bdf.mesh_utils.convert.convert_length(length_from, length_to)[source]

Determines the length scale factor

We crate a gravity_scale_length for any non-standard unit (ft, m)

pyNastran.bdf.mesh_utils.convert.convert_mass(mass_from, mass_to, log)[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, terms, scales, bdf_filename_out=None, encoding=None, log=None, debug=True)[source]

Scales a BDF based on factors for 3 of the 6 independent terms

Parameters:
bdf_filename : str / BDF()

a BDF filename

terms : List[str]; length=3

the names {M, L, T, F, P, V} mass, length, time, force, pressure, velocity

scales : List[float]; length=3

the scaling factors

bdf_filename_out : str; default=None

a BDF filename to write

Returns:
model : BDF()

the scaled BDF

pyNastran.bdf.mesh_utils.convert.scale_model(model, xyz_scale, mass_scale, time_scale, weight_scale, gravity_scale, convert_nodes=True, convert_elements=True, convert_properties=True, convert_materials=True, convert_aero=True, convert_constraints=True, convert_loads=True, convert_optimization=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, min_theta=0.1, max_theta=175.0, max_skew=70.0, max_aspect_ratio=100.0, max_taper_ratio=4.0)[source]

Removes bad CQUAD4/CTRIA3 elements

Parameters:
model : BDF ()

this should be equivalenced

min_theta : float; default=0.1

the maximum interior angle (degrees)

max_theta : float; default=175.

the maximum interior angle (degrees)

max_skew : float; default=70.

the maximum skew angle (degrees)

max_aspect_ratio : float; default=100.

the max aspect ratio

taper_ratio : float; 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:
model : BDF()

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_map : Dict[nid]->index; default=None

a mapper dictionary

Returns:
quality : Dict[name]

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

values : The 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, xyz_cid0, nid_map, min_theta=0.1, max_theta=175.0, max_skew=70.0, max_aspect_ratio=100.0, max_taper_ratio=4.0)[source]

Get the bad shell elements

Parameters:
model : BDF()

the model object

xyz_cid0 : (N, 3) float ndarray

the xyz coordinates in cid=0

nid_map : dict[nid]
nid : int

the node id

index : int

the index of the node id in xyz_cid0

min_theta : float; default=0.1

the maximum interior angle (degrees)

max_theta : float; default=175.

the maximum interior angle (degrees)

max_skew : float; default=70.

the maximum skew angle (degrees)

max_aspect_ratio : float; default=100.

the max aspect ratio

taper_ratio : float; default=4.0

the taper ratio; applies to CQUAD4s only

Returns:
eids_failed : List[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

export_mcids Module
Defines:
  • nodes, bars = export_mcids(bdf_filename, csv_filename=None)
pyNastran.bdf.mesh_utils.export_mcids._add_elements(nid, eid, nodes, bars, centroid, iaxis, jaxis, export_both_axes, export_xaxis)[source]

adds the element data

pyNastran.bdf.mesh_utils.export_mcids._export_coord_axes(nodes, bars, csv_filename)[source]

save the coordinate systems in a csv file

pyNastran.bdf.mesh_utils.export_mcids._export_quad(elem, nodes, iply, nid, eid, pids_failed, bars, export_both_axes, export_xaxis, consider_property_rotation)[source]
pyNastran.bdf.mesh_utils.export_mcids._export_tria(elem, nodes, iply, nid, eid, pids_failed, bars, export_both_axes, export_xaxis, consider_property_rotation)[source]

helper method for export_mcids

pyNastran.bdf.mesh_utils.export_mcids._get_elements(model, eids)[source]
pyNastran.bdf.mesh_utils.export_mcids._rotate_mcid(elem, pid_ref, iply, imat, jmat, normal, consider_property_rotation=True)[source]

rotates a material coordinate system

pyNastran.bdf.mesh_utils.export_mcids.export_mcids(bdf_filename, csv_filename=None, eids=None, export_xaxis=True, export_yaxis=True, iply=0, log=None, debug=False)[source]

Exports the element material coordinates systems for non-isotropic materials.

Parameters:
bdf_filename : str/BDF

a bdf filename or BDF model

csv_filename : str; default=None

str : the path to the output csv None : don’t write a CSV

eids : List[int]

the element ids to consider

export_xaxis : bool; default=True

export the x-axis

export_yaxis : bool; default=True

export the x-axis

iply : int; default=0

TODO: not validated the ply 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

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’)
  • model = make_symmetric_model(
    bdf_filename, plane=’xz’, zero_tol=1e-12, log=None, debug=True)
pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_elements(model, mirror_model, nid_offset, eid_offset)[source]

mirrors model.elements

pyNastran.bdf.mesh_utils.mirror_mesh.__mirror_rigid_elements(model, mirror_model, nid_offset, eid_offset)[source]

mirrors model.rigid_elements

pyNastran.bdf.mesh_utils.mirror_mesh._asymmetrically_mirror_aero_coords(model, aero_cids_set, cid_offset, plane='xz')[source]

we’ll leave i the same, flip j, and invert k

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_aero(model, nid_offset, plane)[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
Doesnt consider:
  • AELIST
  • AESURF
  • AERO
  • AEFORCE
  • AEPRES
  • CAERO2/3/4/5
  • PAERO1/2/3/4/5
  • AESURFS
pyNastran.bdf.mesh_utils.mirror_mesh._mirror_elements(model, mirror_model, nid_offset, use_eid_offset=True)[source]

Mirrors the elements

elements:
0d : CELAS1, CELAS2, CELAS3, CELAS4, CDAMP1, CDAMP2, CDAMP3, CDAMP4, CDAMP5
CFAST, CBUSH, CBUSH1D

2d : CTRIA3, CQUAD4, CTRIA6, CQUAD8, CQUAD, CTRIAR, CQUADR 3d : ??? missing : CVISC, CTRIAX, CTRIAX6, CQUADX, CQUADX8, CCONEAX

rigid_elements:
loaded: RBE2, RBE3 missing: RBAR, RBAR1
mass_elements:
loaded: CONM2 missing CONM1, CMASS1, CMASS2, CMASS3, CMASS4

Notes

Doesn’t handle CBAR/CBEAM offsets Doesn’t handle CBEAM SPOINTs

pyNastran.bdf.mesh_utils.mirror_mesh._mirror_loads(model, nid_offset=0, eid_offset=0)[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, plane='xz')[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, mirror_model, plane, use_nid_offset=True)[source]

Mirrors the GRIDs about an arbitrary plane

Parameters:
model : BDF

???

mirror_model : BDF

???

plane : str

???

use_nid_offset : bool

???

Returns:
nid_offset : int

the node id offset

plane : str

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)[source]

gets the index fo the mirror plane

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror(bdf_filename, plane='xz', log=None, debug=True)[source]

Mirrors the model about the symmetry plane

Parameters:
bdf_filename : str / BDF()

str : the bdf filename BDF : the BDF model object

plane : str; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns:
model : BDF()

BDF : the BDF model object

nid_offset : int

the offset node id

eid_offset : int

the offset element id

pyNastran.bdf.mesh_utils.mirror_mesh.bdf_mirror_plane(bdf_filename, plane, mirror_model=None, log=None, debug=True, use_nid_offset=True)[source]

mirrors a model about an arbitrary plane

pyNastran.bdf.mesh_utils.mirror_mesh.get_model(bdf_filename, log=None, debug=True)[source]

helper method

pyNastran.bdf.mesh_utils.mirror_mesh.make_symmetric_model(bdf_filename, plane='xz', zero_tol=1e-12, log=None, debug=True)[source]

Makes a symmetric model from a full model

Parameters:
bdf_filename : str / BDF()

str : the bdf filename BDF : the BDF model object

plane : str; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

zaero_tol : float; default=1e-12

the symmetry plane tolerance

Returns:
model : BDF()

BDF : the BDF model object

## TODO: doesn’t handle elements straddling the centerline
pyNastran.bdf.mesh_utils.mirror_mesh.write_bdf_symmetric(bdf_filename, out_filename=None, encoding=None, size=8, is_double=False, enddata=None, close=True, plane='xz', log=None)[source]

Mirrors the model about the symmetry plane

Parameters:
bdf_filename : str / BDF()

str : the bdf filename BDF : the BDF model object

out_filename : varies; default=None

str - the name to call the output bdf file - a file object StringIO() - a StringIO object None - pops a dialog

encoding : str; default=None -> system specified encoding

the unicode encoding latin1, and utf8 are generally good options

size : int; {8, 16}

the field size

is_double : bool; default=False

False : small field True : large field

enddata : bool; default=None

bool - enable/disable writing ENDDATA None - depends on input BDF

close : bool; default=True

should the output file be closed

plane : str; {‘xy’, ‘yz’, ‘xz’}; default=’xz’

the plane to mirror about xz : +y/-y yz : +x/-x xy : +z/-z

Returns:
model : BDF()

BDF : the BDF model object

nid_offset : int

the offset node id

eid_offset : int

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_filename : str/BDF

str : the path the the *.bdf file BDF : a BDF() boject

mpc_id : int; 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, xyz_compare, tol, neq_max=4, msg='')[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

tol : float

the max spherical tolerance

neq_max : int; default=4

the number of close nodes

msg : str; default=’‘

error message

Returns:
kdt : cKDTree()

the kdtree object

ieq : int 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

slots : int 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

msg : str; default=’‘

error message

pyNastran.bdf.mesh_utils.find_closest_nodes.find_closest_nodes(nodes_xyz, nids, xyz_compare, neq_max=1, tol=None, msg='')[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

tol : float; default=None

the max spherical tolerance None : the whole model

neq_max : int; default=1.0

the number of “close” points

msg : str; 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, xyz_compare, neq_max, tol, msg='')[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_max : int

the number of “close” points (default=4)

tol : float

the max spherical tolerance

msg : str; 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, eids)[source]

finds coplanar triangles

Parameters:
bdf_filename : str

the path to the bdf input file

eids : list

the element ids to consider

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, eids=None, maps=None)[source]

Gets the free edges for shell elements. A free edge is an edge that is only connected to 1 shell element.

Parameters:
model : BDF()

the BDF model

eids : List[int]; default=None

a subset of elements to consider

maps : List[…] (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)

pyNastran.bdf.mesh_utils.free_edges.non_paired_edges(model, eids=None, maps=None)[source]

Gets the edges not shared by exactly 2 elements. This is useful for identifying rib/spar intersections.

Parameters:
model : BDF()

the BDF model

eids : List[int]; default=None

a subset of elements to consider

maps : List[…] (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_edges : List[(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:
model : BDF()

the BDF object

skin_filename : str

the file to write

face_map : dict[sorted_face]

sorted_face : List[int, int, int] / List[int, int, int, int] face : List[int, int, int] / List[int, int, int, int]

nids_to_write : List[int, int, …]

list of node ids to write

eids_to_write : List[int, int, …]

list of element ids to write

mids_to_write : List[int, int, …]

list of material ids to write

eid_set : Set[int]

is the type right???

eid_shell : int

the next id to use for the shell id

pid_shell : int

the next id to use for the shell property

mid_shell : int

the next id to use for the shell material

write_solids : bool; default=False

write solid elements that have skinned faces

write_shells : bool; default=True

write shell elements

size : int; default=/8

the field width

is_double : bool; default=False

double precision flag

encoding : str; default=None -> system default

the string encoding

pyNastran.bdf.mesh_utils.free_faces.get_element_faces(model, element_ids=None)[source]

Gets the elements and faces that are skinned from solid elements. This includes internal faces.

Parameters:
model : BDF()

the BDF object

element_ids : List[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)[source]

Gets the elements and faces that are skinned from solid elements This doesn’t include internal faces.

Parameters:
model : BDF()

the BDF object

Returns:
eid_set : Dict[tuple(int, int, …)] = List[int]

key : sorted face value : list of element ids with that face

face_map : Dict[tuple(int, int, …)] = List[int]

key : sorted face value : unsorted face

pyNastran.bdf.mesh_utils.free_faces.main()[source]

docopt interface

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:
model : BDF() or str

BDF : the BDF object str : bdf_filename and the read_bdf method is called

skin_filename : str

the file to write

write_solids : bool; default=False

write solid elements that have skinned faces

write_shells : bool; default=False

write shell elements

size : int; default=8

the field width

is_double : bool; default=False

double precision flag

encoding : str; default=None -> system default

the string encoding

log : logger; default=None

a python logging object

punch : bool; 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, eid_start, theta_tol=30.0, is_symmetric=True, consider_flippped_normals=True)[source]

extracts the OML faces (outer mold line)

Parameters:
bdf_filename : str or BDF()

the bdf filename

eid_start : int

the element to start from

theta_tol : float; default=30.

the angular tolerance in degrees

is_symmetric : bool; default=True

is the y=0 plane considered to be part of the OML

consider_flippped_normals : bool; 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, 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, pconv_used, tableht_used, tableh1_used)[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)[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, remove_nids=True, remove_cids=True, remove_pids=True, remove_mids=True)[source]

Takes an uncross-referenced bdf and removes unused data

removes unused:
  • nodes
  • properties
  • materials
  • coords
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_filename : str; BDF

str : use the read_bdf method BDF : assume it’s a model

pin_flags_filename : str; default=None

the pin flag file to write this is optional as you may need to define your own map

bdf_filename_out : str; default=None

write the updated deck

debug : bool/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:
model : BDF()

the BDF object

pin_flag_map : dict[eid]
eid : int

the element id

pin_flag : int

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:
eids : List[int]

element ids to split

neids : int; default=5

how many elements should a single bar be split into min=2

eid_start : int; default=1

the starting element id

nid_start : int; default=1

the starting node id

Returns:
eids_out : List[int]

the list of elements that have been added

eid_end : int; default=1

the final element id

nid_end : int; 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_create_vectorized_numbered(argv=None, quiet=False)[source]
pyNastran.bdf.mesh_utils.utils.cmd_line_equivalence(argv=None, quiet=False)[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_merge(argv=None, quiet=False)[source]

command line interface to bdf_merge

pyNastran.bdf.mesh_utils.utils.cmd_line_mirror(argv=None, quiet=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_create_vectorized_numbered(argv=None, quiet=False)[source]
pyNastran.bdf.mesh_utils.utils.cmd_line_equivalence(argv=None, quiet=False)[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_merge(argv=None, quiet=False)[source]

command line interface to bdf_merge

pyNastran.bdf.mesh_utils.utils.cmd_line_mirror(argv=None, quiet=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.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=True, log=None, debug_file=None, mode=None)[source]

Bases: pyNastran.op2.op2_interface.op2_scalar.OP2_Scalar

Initializes the OP2 object

Parameters:
debug : bool; 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_file : str; default=None (No debug)

sets the filename that will be written to

mode : str; default=None -> ‘msc’

{msc, nx}

assert_op2_equal(self, op2_model, skip_results=None, stop_on_failure=True, debug=False)[source]

Diffs the current op2 model vs. another op2 model.

Parameters:
op2_model : OP2()

the model to compare to

skip_results : List[str]; default=None -> []

results that shouldn’t be compred

stop_on_failure : bool; default=True

True : Crashes if they’re not equal False : Go to the next object

debug : bool; default=False

give slightly more debugging messages

Returns:
is_equal : bool

are the objects equal?

Raises:
AssertionError/ValueError : stop_on_failure=True and and error occurred
NotImplementedError : this is a sign of an unsupported object
build_dataframe(self)[source]

Converts the OP2 objects into pandas DataFrames

Todo

fix issues with: - RealDisplacementArray - RealPlateStressArray (???) - RealPlateStrainArray (???) - RealCompositePlateStrainArray (???)

combine_results(self, combine=True)[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(self)[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(self, hdf5_filename)[source]

Converts the OP2 objects into hdf5 object

export_hdf5_file(self, hdf5_file, exporter=None)[source]

Converts the OP2 objects into hdf5 object

Parameters:
hdf5_file : H5File()

an h5py object

exporter : HDF5Exporter; default=None

unused

TODO: doesn’t support:
  • BucklingEigenvalues
export_hdf5_filename(self, hdf5_filename)[source]

Converts the OP2 objects into hdf5 object

TODO: doesn’t support:
  • BucklingEigenvalues
get_key_order(self)[source]
Returns:
keys3 : List[int, int, int, int, int, str]

the keys in order

include_exclude_results(self, exclude_results=None, include_results=None)[source]

Sets results to include/exclude

Parameters:
exclude_results / include_results : List[str] / str; default=None

a list of result types to exclude/include one of these must be None

is_geometry
load(self, obj_filename='model.obj')[source]

Loads a pickleable object

load_hdf5(self, hdf5_filename, combine=True)[source]

Loads an h5 file into an OP2 object

load_hdf5_file(self, h5_file, combine=True)[source]

Loads an h5 file object into an OP2 object

Parameters:
h5_file : H5File()

an h5py file object

combine : bool; default=True

runs the combine routine

load_hdf5_filename(self, hdf5_filename, combine=True)[source]

Loads an h5 file into an OP2 object

Parameters:
hdf5_filename : str

the path to the an hdf5 file

combine : bool; default=True

runs the combine routine

object_attributes(self, 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:
mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
attribute_names : List[str]

sorted list of the names of attributes of a given type or None if the mode is wrong

object_methods(self, mode='public', keys_to_skip=None)[source]

List the names of methods of a class as strings. Returns public methods as default.

Parameters:
obj : instance

the object for checking

mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
method : List[str]

sorted list of the names of methods of a given type or None if the mode is wrong

print_subcase_key(self)[source]
read_op2(self, op2_filename=None, combine=True, build_dataframe=None, skip_undefined_matrices=False, encoding=None)[source]

Starts the OP2 file reading

Parameters:
op2_filename : str (default=None -> popup)

the op2_filename

combine : bool; default=True

True : objects are isubcase based False : objects are (isubcase, subtitle) based;

will be used for superelements regardless of the option

#load_as_h5 : default=False

#loads the op2 as an h5 file to save memory #stores the result.element/data attributes in h5 format

build_dataframe : bool (default=None -> True if in iPython, False otherwise)

builds a pandas DataFrame for op2 objects

skip_undefined_matrices : bool; default=False

True : prevents matrix reading crashes

encoding : str

the unicode encoding (default=None; system default)

save(self, obj_filename='model.obj', unxref=True)[source]

Saves a pickleable object

saves(self)[source]

Saves a pickled string

set_mode(self, mode)[source]

Sets the mode as ‘msc’ or ‘nx’

transform_displacements_to_global(self, icd_transform, coords, xyz_cid0=None, debug=False)[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_transform : dict{int cid

Dictionary from coordinate id to index of the nodes in BDF.point_ids that their output (CD) in that coordinate system.

coords : dict{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

debug : bool; 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(self, 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_transform : dict{int cid

Dictionary from coordinate id to corresponding node ids.

icd_transform : dict{int cid

Dictionary from coordinate id to index of the nodes in BDF.point_ids that their output (CD) in that coordinate system.

coords : dict{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=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=None, encoding=None)[source]

Creates the OP2 object without calling the OP2 class.

Parameters:
op2_filename : str (default=None -> popup)

the op2_filename

combine : bool; default=True

True : objects are isubcase based False : objects are (isubcase, subtitle) based;

will be used for superelements regardless of the option

subcases : List[int, …] / int; default=None->all subcases

list of [subcase1_ID,subcase2_ID]

exclude_results / include_results : List[str] / str; default=None

a list of result types to exclude/include one of these must be None

build_dataframe : bool (default=None -> True if in iPython, False otherwise)

builds a pandas DataFrame for op2 objects

skip_undefined_matrices : bool; default=False

True : prevents matrix reading crashes

debug : bool; 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)

mode : str; default=None -> ‘msc’

the version of the Nastran you’re using {nx, msc, optistruct}

debug_file : str; default=None (No debug)

sets the filename that will be written to

encoding : str

the unicode encoding (default=None; system default)

Returns:
model : OP2()

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=True, debug=False, log=None, debug_file=None, mode='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_geom : bool; default=False

reads the BDF tables

debug : bool; 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_file : default=None -> no debug

sets the filename that will be written to

mode : str; default=’msc’

{msc, nx}

export_hdf5_file(self, hdf5_file, exporter=None)[source]

Converts the OP2 objects into hdf5 object

Parameters:
hdf5_file : H5File()

an h5py object

exporter : HDF5Exporter; default=None

unused

TODO: doesn’t support:
  • BucklingEigenvalues
gpdt_to_nodes(self)[source]

converts the GPDT & EQEXIN tables to node ids

is_geometry
read_op2(self, op2_filename=None, combine=True, build_dataframe=None, skip_undefined_matrices=False, encoding=None)[source]

see OP2.read_op2

class pyNastran.op2.op2_geom.OP2GeomCommon(make_geom=True, debug=False, log=None, debug_file=None, mode=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

interface for the OP2Geom class for to loading subclasses

Initializes the OP2 object

Parameters:
make_geom : bool; default=False

reads the BDF tables

debug : bool; 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_file : default=None -> no debug

sets the filename that will be written to

mode : str; default=None -> ‘msc’

{msc, nx}

save(self, obj_filename='model.obj', unxref=True)[source]

Saves a pickleable object

pyNastran.op2.op2_geom.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)[source]

Creates the OP2 object without calling the OP2 class.

Parameters:
op2_filename : str (default=None -> popup)

the op2_filename

combine : bool; default=True

True : objects are isubcase based False : objects are (isubcase, subtitle) based;

will be used for superelements regardless of the option

subcases : List[int, …] / int; default=None->all subcases

list of [subcase1_ID,subcase2_ID]

exclude_results / include_results : List[str] / str; default=None

a list of result types to exclude/include one of these must be None

validate : bool

runs various checks on the BDF (default=True)

xref : bool

should the bdf be cross referenced (default=True)

build_dataframe : bool; default=False

builds a pandas DataFrame for op2 objects

skip_undefined_matrices : bool; default=False

True : prevents matrix reading crashes

log : Log()

a logging object to write debug messages to

(.. seealso:: import logging)

debug : bool; default=False

enables the debug log and sets the debug in the logger

debug_file : str; default=None (No debug)

sets the filename that will be written to

encoding : str

the unicode encoding (default=None; system default)

Returns:
model : OP2()

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, v2)[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, csysi)[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)[source]
pyNastran.op2.data_in_material_coord.data_in_material_coord(bdf, op2, in_place=False)[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 convertion 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:
bdf : BDF object

A BDF object that corresponds to the ‘op2’.

op2 : OP2 object

A OP2 object that corresponds to the ‘bdf’.

in_place : bool; default=False

If true the original op2 object is modified, otherwise a new one is created.

Returns:
op2_new : OP2 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:
vector : op2 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:
elem : varies

an element object CQUAD4, CQUAD8, CQUADR CTRIA3, CTRIA6, CTRIAR

Returns:
is_mcid : bool

the projected material coordinate system is used

pyNastran.op2.data_in_material_coord.thetadeg_to_principal(Sxx, Syy, Sxy)[source]

Calculate the angle to the principal plane stress state

Parameters:
Sxx, Syy, Sxy : array-like

Sigma_xx, Sigma_yy, Sigma_xy stresses.

Returns:
thetadeg : np.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, Syy, Sxy, thetarad)[source]

Mohr’s Circle-based Plane Stress Transformation

Parameters:
Sxx, Syy, Sxy : array-like

Sigma_xx, Sigma_yy, Sigma_xy stresses.

thetarad : array-like

Array with angles for wich the stresses should be transformed.

Returns:
Sxx_theta, Syy_theta, Sxy_theta : np.ndarray

Transformed stresses.

export_to_vtk Package
export_to_vtk Module
pyNastran.op2.export_to_vtk.export_to_vtk(model)[source]
pyNastran.op2.export_to_vtk.export_to_vtk_filename(bdf_filename, op2_filename, vtk_filename, debug=False, log=None)[source]
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(self, n, types='ifs', endian=None)[source]

Shows binary data

show_data(self, data, types='ifs', endian=None)[source]

Shows binary data

show_ndata(self, n, types='ifs')[source]
pyNastran/op2/op2_helper

This is the pyNastran.op2.op2_helper.rst file.

op2_helper Module
pyNastran.op2.op2_helper.polar_to_real_imag(mag, phase)[source]

Converts magnitude-phase to real-imaginary so all complex results are consistent

Parameters:
mag : float

magnitude c^2

phase : float

phase angle phi (degrees; theta)

Returns:
real_value : float

the real component a of a+bi

imag_value : float

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

op2_results Package
op2_results Module
pyNastran.op2.op2_results.get_nodal_averaged_stress(model, eid_to_nid_map, isubcase, options=None)[source]

Supports: - plateStress - solidStress - compositePlateStress (NA)

options = {
‘mode’: ‘derive/avg’, # derive/avg, avg/derive ‘layers’ : ‘max’, # max, min, avg
#’ilayers’ : None, # None or [1, 2, … N]
‘location’ : ‘node’, # node, centroid

}

pyNastran.op2.op2_results.run(eid_to_nid_map, model, isubcase, options)[source]
pyNastran.op2.op2_results.setup(bdf_filename, op2_filename)[source]
pyNastran.op2.op2_results.sol_101_elements()[source]
pyNastran.op2.op2_results.solid_bending()[source]
pyNastran.op2.op2_results.vonMises2D(o1, o2)[source]
pyNastran.op2.op2_results.vonMises3D(o1, o2, o3)[source]
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, logger=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, logger=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 interated 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, b=None, zero_tol=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_tol : float; 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, precision=2)[source]

Converts binary data types to size vector arrays.

Parameters:
format_old : str

the int/float data types in single precision format

precision : int; default=2

the precision to convert to 1 : single precision (no conversion) 2 : double precision

Returns:
format_new : str

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

axis : None 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, coords, nid_cd, 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_out : CORD()

the desired local frame

coords : dict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd : (M, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transform : dict[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

.. 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, coords, nid_cd, icd_transform, xyz_cid0, summation_point_cid0=None, consider_rxf=True, debug=False, logger=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_out : CORDx()

the desired local frame

coords : dict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd : (M, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transform : dict[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_rxf : bool; default=True

considers the r x F term

debug : bool; default=False

debugging flag

logger : logger; default=None

a logger 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, moment_in_local, coord_out, coords, nid_cd, icd_transform, xyz_cid0, summation_point_cid0=None, consider_rxf=True, debug=False, logger=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_out : CORDx()

the desired local frame

coords : dict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd : (M, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transform : dict[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_rxf : bool; default=True

considers the r x F term

debug : bool; default=False

debugging flag

logger : logger; default=None

a logger 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, sort_code, sort_bits)[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_scode_word(s_code, stress_bits)[source]
pyNastran.op2.op2_interface.op2_codes.get_sort_method_from_table_name(table_name)[source]

helper method

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

del_result(self, result_name)[source]

delattr, but considers sub-objects

get_f06_stats(self)[source]
get_op2_stats(self, 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(self, 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(self)[source]

Gets the names of the results.

has_result(self, result_name)[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

remove_empty_results(self)[source]
title = None

BDF Title

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, 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(self, results)[source]

addds a list/str of results

clear(self)[source]

clears all the results

is_not_saved(self, result)[source]

checks to see if a result is saved

is_saved(self, result)[source]

checks to see if a result is saved

remove(self, results)[source]

removes a list/str of results

update(self, results)[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.set_table3_field(str_fields, ifield, value)[source]

ifield is 1 based

pyNastran.op2.op2_interface.write_utils.write_table_header(op2_file, fascii, table_name)[source]

Writes the beginning of an op2 table

Parameters:
op2_file : file

the op2 file object

table_name : str

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, data, ndata) - 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)[source]

Stores methods that aren’t useful to an end user

binary_debug

interface to the op2 object

debug_file

interface to the op2 object

generic_stop_table(self, data, ndata)[source]

print table data when things get weird

get_marker1(self, rewind=True, macro_rewind=False)[source]

Gets 1 marker See get_n_markers(…)

Parameters:
rewind : bool

should the file be returned to the starting point

macro_rewind : bool

???

Returns:
markers : int

a single marker

get_nmarkers(self, n, rewind=True, macro_rewind=False)[source]

Gets n markers, so if n=2, it will get 2 markers.

Parameters:
n : int

number of markers to get

rewind : bool

should the file be returned to the starting point

Returns:
markers : List[int]

list of [1, 2, 3, …] markers

h5_file = None

the h5 file object used to reduce memory usage

is_debug_file

interface to the op2 object

is_valid_subcase(self)[source]

Lets the code check whether or not to read a subcase

Returns:
is_valid : bool

should this subcase defined by self.isubcase be read?

load_as_h5 = None

should an h5_file be created

log

interface to the op2 object

read_3_blocks(self)[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:
data : bytes

the data in binary

read_3_markers(self, markers, macro_rewind=True)[source]

Micro-optimizes read_markers for 3 markers.

Parameters:
markers : List[int, int, int]

markers to get; markers = [-10, 1, 0]

Raises:
FortranMarkerError

if the expected table number is not found

read_aemonpt(self)[source]

reads the AEMONPT table

read_bgpdt(self)[source]

reads the BGPDT, BGPDTS, BGPDTOLD tables

tested by TestOP2Matrix.test_gpspc

read_block(self)[source]
Reads a block following a pattern of:
[nbytes, data, nbytes]
Returns:
data : bytes

the data in binary

Notes

see read_3_blocks

read_cstm(self)[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_eqexin(self)[source]

isat_random.op2

read_extdb(self)[source]
fails if a streaming block:
  • nx_spikeextse04c_0.op2
read_fol(self)[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(self)[source]

reads the FRL (Frequency Response List) table

tested by TestOP2.test_op2_good_sine_01

read_geom_table(self)[source]

Reads a geometry table

read_gpdt(self)[source]

reads the GPDT table

tested by ???

read_gpl(self)[source]

reads the GPL table (grid point list?)

tested by TestOP2.test_beam_modes

read_hisadd(self)[source]

optimization history (SOL200) table

read_ibulk(self)[source]

tested by TestOP2.test_ibulk

read_mode = 1 (array sizing) read_mode = 1 (reading)

read_intmod(self)[source]

reads the INTMOD table

tested by TestNastranGUI.test_femap_rougv1_01

read_markers(self, markers, macro_rewind=True)[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:
markers : List[int]

markers to get; markers = [-10, 1]

Raises:
FortranMarkerError

if the expected table number is not found

read_matrix(self, table_name)[source]

General method for reading matrices and MATPOOL matrices

read_meff(self)[source]

reads the MEFF table

read_mode

interface to the op2 object

read_monitor(self)[source]

reads the MONITOR table

read_nastran_version(self, mode)[source]

reads the version header

read_omm2(self)[source]

reads the OMM2 table

read_r1tabrg(self, data, ndata)[source]
Design Responses:
  • Weight
  • Flutter Speed
  • Stress
  • Strain
  • Displacement
read_results_table(self)[source]

Reads a results table

read_sdf(self)[source]

reads the SDF table

read_table_name(self, table_names)[source]
read_tol(self)[source]

This is probably broken for MSC Nastran

show(self, n, types='ifs', endian=None)[source]

shows the next N bytes

Parameters:
n : int

the number of bytes to show

types : str; default=’ifs’

the data types to show

endian : str; default=None -> active endian

the data endian

show_data(self, data, types='ifs', endian=None)[source]

Shows a data block as various types

Parameters:
data : bytes

the binary string bytes

types : str; 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)

endian : str; default=None -> auto determined somewhere else in the code

the big/little endian {>, <}

.. warning:: ‘s’ is apparently not Python 3 friendly
show_ndata(self, n, types='ifs')[source]
exception pyNastran.op2.op2_interface.op2_reader.SubTableReadError[source]
pyNastran.op2.op2_interface.op2_reader.eqexin_to_nid_dof_doftype(eqexin1, eqexin2)[source]

assemble dof table

pyNastran.op2.op2_interface.op2_reader.get_table_size_from_ncolumns(table_name, nvalues, ncolumns)[source]
pyNastran.op2.op2_interface.op2_reader.grids_comp_array_to_index(grids1, comps1, grids2, comps2, make_matrix_symmetric)[source]

maps the dofs

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 outisde 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, debug_file, log)[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(self)[source]

sizes the vectorized attributes of the ElementTableArray

combine(self, result, is_sort1=True)[source]
data_type(self)[source]
get_stats(self, short=False)[source]
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(self)[source]
extract_xyplot(self, element_ids, index)[source]
is_complex
is_real
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(self)[source]

creates a pandas dataframe

class_name
export_to_hdf5(self, group, log)[source]

exports the object to HDF5 format

get_headers(self)[source]
get_stats(self, short=False)[source]
object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]
object_methods(self, mode='public', keys_to_skip=None)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[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(self)[source]
cast_grid_type(self, grid_type_str)[source]

converts a grid_type string to an integer

dataframe

alternate way to get the dataframe

get_data_code(self, prefix=' ')[source]
get_unsteady_value(self)[source]
print_data_members(self)[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(self, 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(self, data_code)[source]
update_dt(self, data_code, unused_dt)[source]

This method is called if the object already exits and a new time/freq/load step is found

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(self)[source]
extract_xyplot(self, node_ids, index)[source]
is_complex
is_real
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ScalarTableArray

build_data(self, ntimes, nnodes, ntotal, nx, ny, float_fmt)[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

combine(self, result, is_sort1=True)[source]
data_type(self)[source]
finalize(self)[source]

Calls any OP2 objects that need to do any post matrix calcs

get_headers(self)[source]
get_stats(self, short=False)[source]
headers
set_as_sort1(self)[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

data_type(self)[source]
extract_xyplot(self, node_ids, index, index_str)[source]
is_complex
is_real
write_op2(self, op2_file, fascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

write_sort1_as_sort1(self, f06_file, page_num, page_stamp, header, words, is_mag_phase)[source]
write_sort1_as_sort2(self, 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

data_type(self)[source]
extract_xyplot(self, node_ids, index)[source]
is_complex
is_real
write_csv(self, csv_file, is_mag_phase=False)[source]
write_op2(self, 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(self, table, rtol=1e-05, atol=1e-08)[source]
build(self)[source]

sizes the vectorized attributes of the TableArray

build_data(self, ntimes, nnodes, ntotal, nx, ny, float_fmt)[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

combine(self, result, is_sort1=True)[source]
data_type(self)[source]
finalize(self)[source]

Calls any OP2 objects that need to do any post matrix calcs

get_headers(self)[source]
get_stats(self, short=False)[source]
headers
set_as_sort1(self)[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)

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(self, design_iter, iconvergence, conv_result, obj_initial, obj_final, constraint_max, row_constraint_max, desvar_values)[source]
get_convergence(self)[source]
get_stats(self, short=False)[source]
class pyNastran.op2.result_objects.design_response.FlutterResponse[source]

Bases: object

append(self, internal_id, dresp_id, response_label, region, subcase, type_flag, seid, mode, mach, velocity, density, flutter_id)[source]
get_stats(self, short=False)[source]
name = 'flutter'
class pyNastran.op2.result_objects.design_response.ForceResponse[source]

Bases: pyNastran.op2.result_objects.design_response.GeneralResponse

name = 'force'
class pyNastran.op2.result_objects.design_response.GeneralResponse[source]

Bases: object

common class for StressResponse, StrainResponse, and ForceResponse

append(self, internal_id, dresp_id, response_label, region, subcase, type_flag, seid, item_code, pid)[source]
get_stats(self, short=False)[source]
class pyNastran.op2.result_objects.design_response.Responses[source]

Bases: object

Defines SOL 200 responses

get_stats(self, short=False)[source]
class pyNastran.op2.result_objects.design_response.StrainResponse[source]

Bases: pyNastran.op2.result_objects.design_response.GeneralResponse

name = 'strain'
class pyNastran.op2.result_objects.design_response.StressResponse[source]

Bases: pyNastran.op2.result_objects.design_response.GeneralResponse

name = 'stress'
class pyNastran.op2.result_objects.design_response.WeightResponse[source]

Bases: object

add_from_op2(self, 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(self, internal_id, dresp_id, response_label, region, subcase, type_flag, seid, row_id, column_id)[source]
get_stats(self, short=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[source]
get_stats(self, short=True)[source]
object_attributes(self, mode='public', keys_to_skip=None)[source]
object_methods(self, mode='public', keys_to_skip=None)[source]
read_grid_point_weight(self, lines)[source]
0- REFERENCE POINT = 0 1- M O 2- * 2.338885E+05 2.400601E-13 -7.020470E-15 -1.909968E-11 2.851745E+06 -5.229834E+07 * 3- * 2.400601E-13 2.338885E+05 -2.520547E-13 -2.851745E+06 2.151812E-10 2.098475E+08 * 4- * -7.020470E-15 -2.520547E-13 2.338885E+05 5.229834E+07 -2.098475E+08 -1.960403E-10 * 5- * -1.909968E-11 -2.851745E+06 5.229834E+07 2.574524E+10 -5.566238E+10 -4.054256E+09 * 6- * 2.851745E+06 2.151812E-10 -2.098475E+08 -5.566238E+10 2.097574E+11 -2.060162E+09 * 7- * -5.229834E+07 2.098475E+08 -1.960403E-10 -4.054256E+09 -2.060162E+09 2.336812E+11 * 8- S 9- * 1.000000E+00 0.000000E+00 0.000000E+00 *

10- * 0.000000E+00 1.000000E+00 0.000000E+00 * 11- * 0.000000E+00 0.000000E+00 1.000000E+00 * 12- DIRECTION 13- MASS AXIS SYSTEM (S) MASS X-C.G. Y-C.G. Z-C.G. 14- X 2.338885E+05 -8.166148E-17 2.236038E+02 1.219276E+01 15- Y 2.338885E+05 8.972118E+02 9.200164E-16 1.219276E+01 16- Z 2.338885E+05 8.972118E+02 2.236038E+02 -8.381786E-16 17- I(S) 18- * 1.401636E+10 8.739690E+09 1.495636E+09 *

  • 8.739690E+09 2.144496E+10 1.422501E+09 *
  • 1.495636E+09 1.422501E+09 3.370946E+10 *
    I(Q)
  • 3.389001E+10 *
  • 8.073297E+09 *
  • 2.720748E+10 *
Q
  • -3.599259E-02 -8.305739E-01 5.557441E-01 *
  • -8.850329E-02 -5.512702E-01 -8.296194E-01 *
  • 9.954254E-01 -7.904533E-02 -5.366689E-02 *

Note

pyNastran’s BDF mass_properties method uses the following (not totally correct as there technically isn’t one xcg):

DIRECTION
MASS AXIS SYSTEM (S) MASS X-C.G. Y-C.G. Z-C.G.
X mass 0.000000E+00 ycg zcg Y mass xcg 0.000000E+00 zcg Z nass xcg ycg 0.000000E+00

The inertias are close to I(S), but not exact as the method doesn’t use the mass matrix, but is close for sufficiently complex models. The terms are:

  • Ixx Ixy Ixz *
  • Iyx Iyy Iyz *
  • Izz Izy Izz *

or inertia = [Ixx, Iyy, Izz, Ixy, Ixz, Iyz]

set_grid_point_weight(self, reference_point, MO, S, mass, cg, IS, IQ, Q)[source]
write_f06(self, f06_file, page_stamp, page_num)[source]

writes the f06

Parameters:
f06_file : file / StringIO

a file-like object

page_stamp : str

the page formatter (e.g., ‘PAGE %i’)

page_num : int

the active page number

Returns:
page_num : int

the new page number

# :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:
name : str

the name of the matrix

data : varies

dense : np.ndarray sparse : coo_matrix data is initialized by setting the matrix.data attribute externally

is_matpool : bool

is this a matpool matrix

Initializes a Matrix

Parameters:
name : str

the name of the matrix

form : int

the matrix type

is_matpool : bool

is this a matpool matrix

+——+—————–+
| Form | Meaning |
+======+=================+
| 1 | Square |
| 2 | Rectangular |
| 6 | Symmetric |
| 9 | Pseudo identity |
+——+—————–+
build_dataframe(self)[source]

exports the object to pandas format

export_to_hdf5(self, group, log)[source]

exports the object to HDF5 format

object_attributes(self, mode='public', keys_to_skip=None, filter_properties=False)[source]
object_methods(self, mode='public', keys_to_skip=None)[source]
shape_str

gets the matrix description

write(self, 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(self, eltype, numwids, numgrid, dof_per_grid, form, eids, ge, address, sil, xform=None)[source]

Sets the next set of the KDICT

element_names
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(self, f06_file, page_stamp='', page_num=1)[source]
class pyNastran.op2.result_objects.monpnt.MONPNT3(frequencies, matrix)[source]

MONPNT3 table

write(self, f06_file, page_stamp='', page_num=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(self, name, count_num=1)[source]
class pyNastran.op2.tables.geom.geom_common.SuppressFileIO[source]

Bases: object

close(self)[source]
flush(self)[source]
open(self, fname)[source]
write(self, msg)[source]
class pyNastran.op2.tables.geom.geom_common.SuppressLogging[source]

Bases: object

debug(self, msg)[source]
flush(self)[source]
info(self, 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(self, elem)[source]

checks that eids are positive and that -1 node ids become None

read_convm6(self, data, nelements, n)[source]
read_convm7(self, data, nelements, n)[source]
run_cquad(self, data, n, element)[source]

common method for CQUAD, CQUADX

run_cquad4(self, data, n, element)[source]

common method for CQUAD4, CQUADR

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

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(self, 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_f06_line(self, data, imode)[source]
build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_buckling(self)[source]
is_complex
is_real
write_f06(self, 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_f06_data(self, data)[source]
add_f06_line(self, data, i)[source]
build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header, page_stamp, page_num=1)[source]
write_op2(self, 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(self, data)[source]
add_f06_line(self, data, imode)[source]
build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header, page_stamp, page_num=1)[source]
write_op2(self, 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(self, table, rtol=1e-05, atol=1e-08)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexStrainEnergyArray

build_data(self, dtype)[source]

actually performs the build step

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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
assert_equal(self, table, rtol=1e-05, atol=1e-08)[source]
build(self)[source]

sizes the vectorized attributes of the RealStrainEnergyArray

build_data(self, dtype)[source]

actually performs the build step

build_dataframe(self)[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(self)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
set_as_sort1(self)[source]

changes the table into SORT1

write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

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(self)[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(self)[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

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.ComplexForceObject

build(self)[source]

sizes the vectorized attributes of the ComplexCBarForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self, table, rtol=1e-05, atol=1e-08)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexCBeamForceArray

build_dataframe(self)[source]

creates a pandas dataframe

finalize(self)[source]

it’s required that the object be in SORT1

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ComplexCBendForceVUArray

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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.ComplexCBendForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build(self)[source]

sizes the vectorized attributes of the ComplexCBendForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex

is the result complex?

is_real

is the result real?

write_f06(self, 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.ComplexForceObject

build(self)[source]

sizes the vectorized attributes of the ComplexCBushForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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.ComplexCShearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build(self)[source]

sizes the vectorized attributes of the ComplexCShearForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, 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.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.ComplexForceObject(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.ForceObject

is_complex
is_real
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(self)[source]

sizes the vectorized attributes of the ComplexCShearForceArray

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
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(self, dt, eid, term, nid, mx, my, mxy, bmx, bmy, bmxy, tx, ty)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexPlate2ForceArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ComplexPlateForceArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ComplexRodForceArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ComplexSolidPressureForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ComplexSpringDamperForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]

sizes the vectorized attributes of the ComplexViscForceArray

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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.FailureIndices(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build(self)[source]

sizes the vectorized attributes of the FailureIndices

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.ForceObject(data_code, isubcase, apply_data_code=True)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

eid_to_element_node_index(self, eids)[source]
finalize(self)[source]

it’s required that the object be in SORT1

get_element_index(self, eids)[source]
get_headers(self)[source]
set_as_sort1(self)[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(self)[source]

sizes the vectorized attributes of the RealBendForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.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(self)[source]

sizes the vectorized attributes of the RealCBar100ForceArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.RealCBarForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build(self)[source]

sizes the vectorized attributes of the RealCBarForceArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

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(self, dt, eid, nid, sd, bm1, bm2, ts1, ts2, af, ttrq, wtrq)[source]
build(self)[source]

sizes the vectorized attributes of the RealCBeamForceArray

build_dataframe(self)[source]

creates a pandas dataframe

finalize(self)[source]

it’s required that the object be in SORT1

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[source]

sizes the vectorized attributes of the RealCBeamForceVUArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.RealCBushForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build(self)[source]

sizes the vectorized attributes of the RealCBushForceArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[source]

writes an OP2

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(self)[source]

sizes the vectorized attributes of the RealCGapForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.RealCShearForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build(self)[source]

sizes the vectorized attributes of the RealCShearForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
nnodes_per_element
write_f06(self, 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.RealConeAxForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build(self)[source]

sizes the vectorized attributes of the RealConeAxForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.RealDamperForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealSpringDamperForceArray

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
nnodes_per_element
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

is_complex
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(self)[source]

sizes the vectorized attributes of the RealForceVU2DArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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(self)[source]

sizes the vectorized attributes of the RealPlateBilinearForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[source]

sizes the vectorized attributes of the RealPlateForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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

build(self)[source]

sizes the vectorized attributes of the RealRodForceArray

build_data(self, ntimes, nelements, float_fmt='float32')[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[source]

sizes the vectorized attributes of the RealSolidPressureForceArray

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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.RealSpringDamperForceArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oef_forces.oef_force_objects.RealForceObject

build(self)[source]

sizes the vectorized attributes of the RealSpringDamperForceArray

build_data(self, ntimes, nelements, dtype)[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
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(self)[source]

sizes the vectorized attributes of the RealViscForceArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[source]

sizes the vectorized attributes of the Real1DHeatFluxArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex

is the result complex?

is_real

is the result real?

write_f06(self, 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.RealChbdyHeatFluxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build(self)[source]

sizes the vectorized attributes of the RealChbdyHeatFluxArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex

is the result complex?

is_real

is the result real?

nnodes_per_element
write_f06(self, 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.RealConvHeatFluxArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.result_objects.op2_objects.BaseElement

build(self)[source]

sizes the vectorized attributes of the RealConvHeatFluxArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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(self)[source]

sizes the vectorized attributes of the RealHeatFluxVU3DArray

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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(self)[source]

sizes the vectorized attributes of the RealHeatFluxVUBeamArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, 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(self)[source]

sizes the vectorized attributes of the ElementTableArray

data_type(self)[source]
get_stats(self, short=False)[source]
headers
is_complex

is the result complex?

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(self)[source]

creates a pandas dataframe

get_headers(self)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[source]

sizes the vectorized attributes of the RealNonlinearRodArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[source]

it’s required that the object be in SORT1

is_curvature
is_fiber_distance
is_max_shear
is_stress
is_von_mises
set_as_sort1(self)[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

is_strain
is_stress
update_dt(self, 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

is_strain
is_stress
update_dt(self, data_code, dt)[source]

This method is called if the object already exits and a new time/freq/load step is found

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(self)[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(self)[source]
obj_set_element(self, obj, ielement, ielement2, data, nelements)[source]
oesrt_cquad4_95(self, data, ndata)[source]

unsupported element

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(self)[source]

sizes the vectorized attributes of the HyperelasticQuadArray

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex(self)[source]
is_real(self)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, dt, eid, etype, fd, sx, sy, sz, txy, es, eps, ecs, ex, ey, ez, exy)[source]
build(self)[source]

sizes the vectorized attributes of the RealNonlinearPlateArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
is_stress
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[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(self, dt, eid, s1a, s2a, s3a, s4a, axial, smaxa, smina, MSt, s1b, s2b, s3b, s4b, smaxb, sminb, MSc)[source]
build(self)[source]

sizes the vectorized attributes of the RealBarArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[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(self)[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(self, etype, dt, eid, sd, sxc, sxd, sxe, sxf, axial, smax, smin, MS)[source]
build(self)[source]

sizes the vectorized attributes of the RealBar10NodesArray

build_dataframe(self)[source]

creates a pandas dataframe

get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealBushArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_elements
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealBush1DStressArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
is_stress
nnodes_per_elements
write_f06(self, 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(self, dt, eid, grid, sd, sxc, sxd, sxe, sxf, smax, smin, mst, msc)[source]
build(self)[source]

sizes the vectorized attributes of the RealBeamArray

build_dataframe(self)[source]

creates a pandas dataframe

finalize(self)[source]

it’s required that the object be in SORT1

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[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(self)[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(self, 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(self)[source]

sizes the vectorized attributes of the RealNonlinearBeamArray

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[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(self, etype, dt, eid, layer, o11, o22, t12, t1z, t2z, angle, major, minor, ovm)[source]
build(self)[source]

sizes the vectorized attributes of the RealCompositePlateArray

build_dataframe(self)[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(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[source]
is_strain
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(self)[source]
is_strain
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(self)[source]

sizes the vectorized attributes of the NonlinearGapStressArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, 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(self, dt, eid, node_id, fiber_dist, oxx, oyy, txy, angle, major_principal, minor_principal, ovm)[source]
add_new_node_sort1(self, dt, eid, node_id, fiber_dist, oxx, oyy, txy, angle, major_principal, minor_principal, ovm)[source]
build(self)[source]

sizes the vectorized attributes of the RealPlateArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_nnodes_bilinear(self)[source]

gets the number of nodes and whether or not the element has bilinear results

get_stats(self, short=False)[source]
is_bilinear(self)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[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(self)[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(self)[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

build(self)[source]

sizes the vectorized attributes of the RealRodArray

build_data(self, ntimes, nelements, dtype)[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealShearArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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_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(self)[source]
get_headers(self)[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(self)[source]
get_headers(self)[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(self, 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(self, 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(self)[source]

sizes the vectorized attributes of the RealSolidArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
update_data_components(self)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealNonlinearSpringStressArray

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
is_stress
write_f06(self, 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_springs.RealSpringArray(data_code, is_sort1, isubcase, dt)[source]

Bases: pyNastran.op2.tables.oes_stressStrain.real.oes_objects.OES_Object

build(self)[source]

sizes the vectorized attributes of the RealSpringArray

build_data(self, ntimes, nelements, dtype)[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
update_data_components(self)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self, is_mag_phase=True)[source]
get_headers(self)[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(self, is_mag_phase=True)[source]
get_headers(self)[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(self)[source]

sizes the vectorized attributes of the RealTriaxArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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_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(self)[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(self)[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(self, dt, eid, e1a, e2a, e3a, e4a, axial, e1b, e2b, e3b, e4b)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexCBarArray

build_dataframe(self)[source]

creates a pandas dataframe

get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the ComplexCBushArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self, is_mag_phase=True)[source]

C:UserssdoyleDropboxmove_tplofprand1.op2

get_headers(self)[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(self, is_mag_phase=True)[source]
get_headers(self)[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(self)[source]

sizes the vectorized attributes of the ComplexCBush1DArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self, is_mag_phase=True)[source]
get_headers(self)[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_eid_sort1(self, dt, eid, node_id, fdr, oxx, oyy, txy)[source]
add_new_eid_sort1(self, dt, eid, node_id, fdr, oxx, oyy, txy)[source]
add_new_node_sort1(self, dt, eid, gridc, fdr, oxx, oyy, txy)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexPlateArray

build_dataframe(self)[source]

creates a pandas dataframe

get_nnodes(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>')[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(self)[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(self)[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(self, dt, eid, loc, rs, azs, As, ss)[source]
add_new_eid_sort1(self, dt, eid, node_id, fdr, oxx, oyy, txy)[source]
add_new_node_sort1(self, dt, eid, gridc, fdr, oxx, oyy, txy)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexPlateArray

get_stats(self, short=False)[source]
is_complex
is_real
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(self)[source]

sizes the vectorized attributes of the ComplexRodArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self, is_mag_phase=True)[source]
get_headers(self)[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(self, is_mag_phase=True)[source]
get_headers(self)[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(self, element_num, element_type, dt, eid, cid, ctype, nodef)[source]
add_node_sort1(self, dt, eid, grid, inode, ex, ey, ez, etxy, etyz, etzx)[source]
build(self)[source]

sizes the vectorized attributes of the ComplexSolidArray

build_dataframe(self)[source]

creates a pandas dataframe

combine(self, results)[source]
get_nnodes(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the ComplexShearArray

build_dataframe(self)[source]

creates a pandas dataframe

get_headers(self)[source]
get_stats(self, short=False)[source]
headers
is_complex
is_real
nnodes_per_element
write_f06(self, 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 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(self)[source]

sizes the vectorized attributes of the ComplexSpringDamperArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self, is_mag_phase=True, is_sort1=True)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self)[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(self)[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(self, dt, eid, s1a, s2a, s3a, s4a, axial, s1b, s2b, s3b, s4b)[source]
build(self)[source]

sizes the vectorized attributes of the RealBarArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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_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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealBeamArray

build_dataframe(self)[source]

creates a pandas dataframe

finalize(self)[source]

it’s required that the object be in SORT1

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[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(self)[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(self, dt, eid, grid, sd, sxc, sxd, sxe, sxf)[source]
build(self)[source]

sizes the vectorized attributes of the RealBeamArray

build_dataframe(self)[source]

creates a pandas dataframe

finalize(self)[source]

it’s required that the object be in SORT1

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[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(self)[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(self, etype, dt, eid, layer, o11, o22, t12)[source]
build(self)[source]

sizes the vectorized attributes of the RealCompositePlateArray

build_dataframe(self)[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(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[source]
is_strain
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(self)[source]
is_strain
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_eid_ovm_sort1(self, dt, eid, fd, oxx, oyy, txy, ovm)[source]
add_eid_sort1(self, dt, eid, fd, oxx, oyy, txy)[source]
add_new_eid_ovm_sort1(self, dt, eid, fd, oxx, oyy, txy, ovm)[source]
add_new_eid_sort1(self, dt, eid, fd, oxx, oyy, txy)[source]
add_new_node_sort1(self, dt, eid, fd, oxx, oyy, txy)[source]
add_ovm_sort1(self, dt, eid, fd, oxx, oyy, txy, ovm)[source]

unvectorized method for adding SORT1 transient data

build(self)[source]

sizes the vectorized attributes of the ComplexPlateArray

build_dataframe(self)[source]

creates a pandas dataframe

get_nnodes(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[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

get_headers(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealRodArray

build_data(self, ntimes, nelements, dtype)[source]

actually performs the build step

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_f06_header(self, is_mag_phase=True)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the RealShearArray

build_dataframe(self)[source]

creates a pandas dataframe

get_f06_header(self)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, 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(self)[source]
get_headers(self)[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(self)[source]
get_headers(self)[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(self, unused_etype, cid, dt, eid, unused_node_id, oxx, oyy, ozz, txy, tyz, txz)[source]
add_node_sort1(self, dt, eid, unused_inode, node_id, oxx, oyy, ozz, txy, tyz, txz)[source]
build(self)[source]

sizes the vectorized attributes of the RealSolidArray

build_dataframe(self)[source]

creates a pandas dataframe

eid_to_element_node_index(self, eids)[source]
get_element_index(self, eids)[source]
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
nnodes_per_element
write_f06(self, 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(self)[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(self)[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(self)[source]

sizes the vectorized attributes of the ComplexGridPointForcesArray

build_dataframe(self)[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

element_name
get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_op2(self, op2, 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(self, table, rtol=1e-05, atol=1e-08)[source]
build(self)[source]

sizes the vectorized attributes of the RealGridPointForcesArray

build_dataframe(self)[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

element_name
extract_freebody_loads(self, eids, coord_out, coords, nid_cd, icd_transform, itime=0, debug=True, logger=None)[source]

Extracts Patran-style freebody loads. Freebody loads are the extternal loads.

Parameters:
eids : (Nelements, ) int ndarray

all the elements to consider

coord_out : CORD2R()

the output coordinate system

coords : dict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd : (Nnodes, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transform : dict[cd] = (Nondesi, ) int ndarray

the mapping for nid_cd

summation_point : (3, ) float ndarray

the summation point in output??? coordinate system

itime : int; default=0

the time to extract loads for

debug : bool; default=False

debugging flag

logger : logger; 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

Todo

doesn’t seem to handle cylindrical/spherical systems ..

Warning

not done ..

extract_interface_loads(self, nids, eids, coord_out, coords, nid_cd, icd_transform, xyz_cid0, summation_point=None, consider_rxf=True, itime=0, debug=True, logger=None)[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_out : CORD2R()

the output coordinate system

coords : dict[int] = CORDx

all the coordinate systems key : int value : CORDx

nid_cd : (Nnodes, 2) int ndarray

the (BDF.point_ids, cd) array

icd_transform : dict[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_rxf : bool; default=True

considers the r x F term

itime : int; default=0

the time to extract loads for

debug : bool; default=False

debugging flag

logger : logger; 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(self)[source]

required so the OP2 writer works…

find_centroid_of_load(self, 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(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
shear_moment_diagram(self, xyz_cid0, eids, nids, icd_transform, element_centroids_cid0, coords, nid_cd, stations, coord_out, idir=0, itime=0, debug=False, logger=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_transform : dict[cd] = (Nnodesi, ) int ndarray

the mapping for nid_cd

element_centroids_cid0 : (Nelements, 3) float ndarray

an array of element centroids corresponding to eids

coords : dict[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_out : CORD2R()

the output coordinate system

idir : int; 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(self, csv_file, is_mag_phase=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
write_f06_time(self, f06_file, itime=0, i=None, header=None, page_num=1, page_stamp='')[source]
write_op2(self, 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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[source]

sizes the vectorized attributes of the AppliedLoadsVectorArray

data_type(self)[source]
get_stats(self, short=False)[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(self)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
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(self)[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
is_real
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers(self)[source]
get_stats(self, short=False)[source]
is_complex
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(self)[source]

sizes the vectorized attributes of the GridPointStressesArray

get_headers(self)[source]
get_stats(self, short=False)[source]
write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, 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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True)[source]
pyNastran.op2.tables.oug.oug_displacements.make_pack_form(data)[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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self)[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(self, phi)[source]

(ndof, nmodes) -> (nmodes, nnodes, 6)

write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=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=False, options=None)[source]

creates the F06 footer

pyNastran.f06.f06_writer.make_f06_header()[source]
pyNastran.f06.f06_writer.make_stamp(title, today=None, build=None)[source]
pyNastran.f06.f06_writer.sorted_bulk_data_header()[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_12e(val)[source]

writes a Nastran formatted 12.5 float

pyNastran.f06.f06_formatting.write_float_13e(val)[source]

writes a Nastran formatted 13.6 float

pyNastran.f06.f06_formatting.write_floats_10e(vals)[source]

writes a series of Nastran formatted 10.3 floats

pyNastran.f06.f06_formatting.write_floats_12e(vals)[source]

writes a series of Nastran formatted 12.5 floats

pyNastran.f06.f06_formatting.write_floats_13e(vals)[source]

writes a series of Nastran formatted 13.6 floats

pyNastran.f06.f06_formatting.write_floats_8p1e(vals)[source]

writes an 8.1E formatted number

pyNastran.f06.f06_formatting.write_floats_8p4f(vals)[source]

writes an 8.4F formatted number

pyNastran.f06.f06_formatting.write_imag_floats_13e(vals, is_mag_phase)[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.

dev Module

pyNastran.utils.dev.get_files_of_type(dirname, extension='.txt', max_size=100.0, limit_file='no_dig.txt')[source]

Gets the list of all the files with a given extension in the specified directory

Parameters:
dirname : str

the directory name

extension : str; default=’.txt’

list of filetypes to get

max_size : float; default=100.0

size in MB for max file size

limit_file : str; default=no_dig.txt

the presence of this file indicates no folder digging should be done on this folder

Returns:
files : List[str]

list of all the files with a given extension in the specified directory

pyNastran.utils.dev.list_print(lst, float_fmt='%-4.2f')[source]

Prints a list or numpy array in an abbreviated format. Supported element types: None, string, numbers. Useful for debugging.

Parameters:
lst : list / numpy array

the value to print

Returns:
msg : str

the clean string representation of the object

docopt_types Module

pyNastran.utils.docopt_types.docopt_types(doc, argv=None, help=True, version=None, options_first=False, type_defaults=None)[source]

docopt creates your command-line interface based on its description that you pass as doc. Such description can contain –options, <positional-argument>, commands, which could be [optional], (required), (mutually | exclusive) or repeated…

Parameters:
doc : str

Description of your command-line interface.

argv : list of str, optional

Argument vector to be parsed. sys.argv[1:] is used if not provided.

help : bool (default: True)

Set to False to disable automatic help on -h or –help options.

version : any object

If passed, the object will be printed if –version is in argv.

options_first : bool (default: False)

Set to True to require options preceed positional arguments, i.e. to forbid options and positional arguments intermix.

type_defaults : dict (default:None)

key : name of argument value : type, default

Returns:
args : dict

A dictionary, where keys are names of command-line elements such as e.g. “–verbose” and “<path>”, and values are the parsed values of those elements.

Notes

Examples

>>> from docopt import docopt
>>> doc = '''
Usage:
    my_program tcp <host> <port> [--timeout=<seconds>]
    my_program serial <port> [--baud=<n>] [--timeout=<seconds>]
    my_program (-h | --help | --version)
Options:
-h, --help Show this screen and exit.
--baud=<n> Baudrate [default: 9600]

‘’’ >>> argv = [‘tcp’, ‘127.0.0.1’, ‘80’, ‘–timeout’, ‘30’] >>> docopt(doc, argv) {‘–baud’: ‘9600’,

‘–help’: False, ‘–timeout’: ‘30’, ‘–version’: False, ‘<host>’: ‘127.0.0.1’, ‘<port>’: ‘80’, ‘serial’: False, ‘tcp’: True}

#: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:
x : List[float]

the independent variable

y : List[float]

the dependent variable

min_value : float; default=0.0

???

Returns:
integrated_value : float

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:
x : List[float]

the independent variable

y : List[float]

the dependent variable

Returns:
integrated_value : float

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:
a : float

the lower bound value (inclusive)

x : List[float, …]

the search values

b: float

the upper bound value (inclusive)

Returns:
is_ranged : bool

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:
a : float

the lower bound value (inclusive)

x : List[float, …]

the search values

b: float

the upper bound value (inclusive)

Returns:
is_ranged : bool

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:
value : int

the value to round up

round_increment : int

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, nastran_cmd='nastran', keywords=None, run=True, run_in_bdf_dir=True)[source]

Call a nastran subprocess with the given filename

Parameters:
bdf_filename : string

Filename of the Nastran .bdf file

keywords : str/dict/list of strings, optional

Default keywords are ‘scr=yes’, ‘bat=no’, ‘old=no’, and ‘news=no’

run : bool; default=True

let’s you disable actually running Nastran to test out code/get the call arguments

run_in_local_dir : bool; 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_code : int

the nastran flag

cmd_args : List[str]

the nastran commands that go into subprocess

numpy_utils Module

Interface to various numpy utilities

__init__ Module

defines:
  • 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)[source]

reimplementation of six.b(…) to work in Python 2

pyNastran.utils.__init__.check_path(filename, name='file')[source]
pyNastran.utils.__init__.int_version(name, version)[source]

splits the version into a tuple of integers

pyNastran.utils.__init__.ipython_info()[source]

determines if iPython/Jupyter notebook is running

pyNastran.utils.__init__.is_binary_file(filename)[source]

Return true if the given filename is binary.

Parameters:
filename : str

the filename to test

Returns:
binary_flag : bool

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)[source]

does this object behave like a file object?

pyNastran.utils.__init__.object_attributes(obj, 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:
obj : instance

the object for checking

mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

filter_properties: bool: default=False

filters the @property objects

Returns:
attribute_names : List[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, mode='public', keys_to_skip=None)[source]

List the names of methods of a class as strings. Returns public methods as default.

Parameters:
obj : instance

the object for checking

mode : str

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_skip : List[str]; default=None -> []

names to not consider to avoid deprecation warnings

Returns:
method : List[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, mode='public', keys_to_skip=None, filter_properties=False)[source]

Prints out an easy to read summary of the object

pyNastran.utils.__init__.print_bad_path(path)[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:
path : str

path to check

Returns:
msg : str

string with informations 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

pyNastran.utils.__init__.str_version(version)[source]

converts a tuple of intergers to a version number

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, R=1716.0, alt_units='ft', density_units='slug/ft^3')[source]

Freestream Density f$ rho_{infty} f$

Parameters:
alt : float

altitude in feet or meters

R : float; default=1716.

gas constant for air in english units (???)

alt_units : str; default=’ft’

the altitude units; ft, kft, m

density_units : str; default=’slug/ft^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

Returns:
rho : float

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, mach, alt_units='ft', pressure_units='psf')[source]

Freestream Dynamic Pressure f$ q_{infty} f$

Parameters:
alt : float

Altitude in alt_units

mach : float

Mach Number f$ M f$

alt_units : str; default=’ft’

the altitude units; ft, kft, m

pressure_units : str; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

Returns:
dynamic_pressure : float

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, alt_units='ft', visc_units='(lbf*s)/ft^2')[source]

Freestream Dynamic Viscosity f$ mu_{infty} f$

Parameters:
alt : float

Altitude in alt_units

alt_units : str; default=’ft’

the altitude units; ft, kft, m

visc_units : str; default=’(lbf*s)/ft^2’

the viscosity units; (lbf*s)/ft^2, (N*s)/m^2, Pa*s

Returns:
mu : float

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, mach, alt_units='ft', eas_units='ft/s')[source]
Freestream equivalent airspeed
Parameters:
alt : float

altitude in alt_units

Mach : float

Mach Number

$ M
$
alt_units : str; default=’ft’

the altitude units; ft, kft, m

eas_units : str; default=’ft/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

Returns:
eas : float

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, alt_units='ft', visc_units='ft^2/s')[source]

Freestream Kinematic Viscosity f$ nu_{infty} f$

Parameters:
alt : float

Altitude in alt_units

alt_units : str; default=’ft’

the altitude units; ft, kft, m

visc_units : str; default=’slug/ft^3’

the kinematic viscosity units; ft^2/s, m^2/s

Returns:
nu : float

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, V, alt_units='ft', velocity_units='ft/s')[source]

Freestream Mach Number

Parameters:
alt : float

altitude in alt_units

V : float

Velocity in velocity_units

alt_units : str; default=’ft’

the altitude units; ft, kft, m

velocity_units : str; default=’ft/s’

the velocity units; ft/s, m/s, in/s, knots

Returns:
mach : float

Mach Number f$ M f$

f[ large M = frac{V}{a} f]
pyNastran.utils.atmosphere.atm_pressure(alt, alt_units='ft', pressure_units='psf')[source]

Freestream Pressure f$ p_{infty} f$

Parameters:
alt : float

Altitude in alt_units

alt_units : str; default=’ft’

the altitude units; ft, kft, m

pressure_units : str; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

Returns:
pressure : float

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, alt_units='ft', velocity_units='ft/s', gamma=1.4)[source]

Freestream Speed of Sound f$ a_{infty} f$

Parameters:
alt : float

Altitude in alt_units

alt_units : str; default=’ft’

the altitude units; ft, kft, m

velocity_units : str; default=’ft/s’

the velocity units; ft/s, m/s, in/s, knots

Returns:
speed_of_sound, a : float

Returns speed of sound in velocity_units

f[ large a = sqrt{gamma R T} f]
pyNastran.utils.atmosphere.atm_temperature(alt, alt_units='ft', temperature_units='R')[source]

Freestream Temperature f$ T_{infty} f$

Parameters:
alt : float

Altitude in alt_units

alt_units : str; default=’ft’

the altitude units; ft, kft, m

temperature_units : str; default=’R’

the altitude units; R, K

Returns:
T : float

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, mach, alt_units='ft', reynolds_units='1/ft')[source]

Returns the Reynolds Number per unit length.

Parameters:
alt : float

Altitude in alt_units

mach : float

Mach Number f$ M f$

alt_units : str; default=’ft’

the altitude units; ft, kft, m

reynolds_units : str; default=‘1/ft’

the altitude units; 1/ft, 1/m, 1/in

Returns:
ReynoldsNumber/L : float

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, mach, alt_units='ft', reynolds_units='1/ft')[source]

Returns the Reynolds Number per unit length.

Parameters:
alt : float

Altitude in alt_units

mach : float

Mach Number f$ M f$

alt_units : str; default=’ft’

the altitude units; ft, kft, m

reynolds_units : str; default=‘1/ft’

the altitude units; 1/ft, 1/m, 1/in

Returns:
ReynoldsNumber/L : float

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 caculates the base quantities, so multiple calls to atm_press and atm_temp are not made

pyNastran.utils.atmosphere.atm_velocity(alt, mach, alt_units='ft', velocity_units='ft/s')[source]

Freestream Velocity f$ V_{infty} f$

Parameters:
alt : float

altitude in alt_units

Mach : float

Mach Number f$ M f$

alt_units : str; default=’ft’

the altitude units; ft, kft, m

velocity_units : str; default=’ft/s’

the velocity units; ft/s, m/s, in/s, knots

Returns:
velocity : float

Returns velocity in velocity_units

f[ large V = M a f]
pyNastran.utils.atmosphere.convert_altitude(alt, alt_units_in, alt_units_out)[source]

nominal unit is ft

pyNastran.utils.atmosphere.convert_density(density, density_units_in, density_units_out)[source]

nominal unit is slug/ft^3

pyNastran.utils.atmosphere.convert_pressure(pressure, pressure_units_in, pressure_units_out)[source]

nominal unit is psf

pyNastran.utils.atmosphere.convert_velocity(velocity, velocity_units_in, velocity_units_out)[source]

nominal unit is ft/s

pyNastran.utils.atmosphere.get_alt_for_density(density, density_units='slug/ft^3', alt_units='ft', nmax=20, tol=5.0)[source]

Gets the altitude associated with a given air density.

Parameters:
density : float

the air density in slug/ft^3

density_units : str; default=’slug/ft^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

alt_units : str; default=’ft’

sets the units for the output altitude; ft, m, kft

nmax : int; default=20

max number of iterations for convergence

tol : float; default=5.

tolerance in alt_units

Returns:
alt : float

the altitude in feet

pyNastran.utils.atmosphere.get_alt_for_eas_with_constant_mach(equivalent_airspeed, mach, velocity_units='ft/s', alt_units='ft', nmax=20, tol=5.0)[source]

Gets the altitude associated with a equivalent airspeed.

Parameters:
equivalent_airspeed : float

the equivalent airspeed in velocity_units

mach : float

the mach to hold constant

alt_units : str; default=’ft’

the altitude units; ft, kft, m

nmax : int; default=20

max number of iterations for convergence

tol : float; default=5.

tolerance in alt_units

Returns:
alt : float

the altitude in alt units

pyNastran.utils.atmosphere.get_alt_for_pressure(pressure, pressure_units='psf', alt_units='ft', nmax=20, tol=5.0)[source]

Gets the altitude associated with a pressure.

Parameters:
pressure : float

the pressure lb/ft^2 (SI=Pa)

pressure_units : str; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

alt_units : str; default=’ft’

the altitude units; ft, kft, m

nmax : int; default=20

max number of iterations for convergence

tol : float; default=5.

tolerance in alt_units

Returns:
alt : float

the altitude in alt_units

pyNastran.utils.atmosphere.get_alt_for_q_with_constant_mach(q, mach, pressure_units='psf', alt_units='ft', nmax=20, tol=5.0)[source]

Gets the altitude associated with a dynamic pressure.

Parameters:
q : float

the dynamic pressure lb/ft^2 (SI=Pa)

mach : float

the mach to hold constant

pressure_units : str; default=’psf’

the pressure units; psf, psi, Pa, kPa, MPa

alt_units : str; default=’ft’

the altitude units; ft, kft, m

nmax : int; default=20

max number of iterations for convergence

tol : float; default=5.

tolerance in alt_units

Returns:
alt : float

the altitude in alt_units

pyNastran.utils.atmosphere.make_flfacts_alt_sweep(mach, alts, eas_limit=1000.0, alt_units='m', velocity_units='m/s', density_units='kg/m^3', eas_units='m/s')[source]
Makes a sweep across altitude for a constant Mach number.
Parameters:
alt : List[float]

Altitude in alt_units

Mach : float

Mach Number

$ M
$
eas_limit : float

Equivalent airspeed limiter in eas_units

alt_units : str; default=’m’

the altitude units; ft, kft, m

velocity_units : str; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_units : str; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_units : str; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

pyNastran.utils.atmosphere.make_flfacts_eas_sweep(alt, eass, alt_units='m', velocity_units='m/s', density_units='kg/m^3', eas_units='m/s')[source]

Makes a sweep across equivalent airspeed for a constant altitude.

Parameters:
alt : float

Altitude in alt_units

eass : List[float]

Equivalent airspeed in eas_units

alt_units : str; default=’m’

the altitude units; ft, kft, m

velocity_units : str; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_units : str; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_units : str; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

pyNastran.utils.atmosphere.make_flfacts_mach_sweep(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 sweep across Mach number for a constant altitude.
Parameters:
alt : float

Altitude in alt_units

Machs : List[float]

Mach Number

$ M
$
eas_limit : float

Equivalent airspeed limiter in eas_units

alt_units : str; default=’m’

the altitude units; ft, kft, m

velocity_units : str; default=’m/s’

the velocity units; ft/s, m/s, in/s, knots

density_units : str; default=’kg/m^3’

the density units; slug/ft^3, slinch/in^3, kg/m^3

eas_units : str; default=’m/s’

the equivalent airspeed units; ft/s, m/s, in/s, knots

pyNastran.utils.atmosphere.sutherland_viscoscity(T)[source]

Helper function that calculates the dynamic viscosity f$ mu f$ of air at a given temperature.

Parameters:
T : float

Temperature T is in Rankine

Returns:
mu : float

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

type_converter Module

Multi-input/output format converter

pyNastran.converters.type_converter.cmd_line_format_converter(argv=None, quiet=False)[source]

Interface for format_converter

pyNastran.converters.type_converter.element_slice(tecplot, data)[source]

removes solid elements from a tecplot model

pyNastran.converters.type_converter.process_cart3d(cart3d_filename, fmt2, fname2, log, data, quiet=False)[source]

Converts Cart3d to STL/Nastran/Tecplot/Cart3d

pyNastran.converters.type_converter.process_nastran(bdf_filename, fmt2, fname2, log, data=None, debug=True, quiet=False)[source]

Converts Nastran to STL/Cart3d/Tecplot/UGRID3d

pyNastran.converters.type_converter.process_stl(stl_filename, fmt2, fname2, log, data=None, quiet=False)[source]

Converts STL to Nastran/Cart3d

pyNastran.converters.type_converter.process_tecplot(tecplot_filename, fmt2, fname2, log, data=None, quiet=False)[source]

Converts Tecplot to Tecplot

Globs all input tecplot files (e.g. tecplot*.plt)

pyNastran.converters.type_converter.process_ugrid(ugrid_filename, fmt2, fname2, log, data=None, quiet=False)[source]

Converts UGRID to Nastran/Cart3d/STL/Tecplot

pyNastran.converters.type_converter.run_format_converter(fmt1, fname1, fmt2, fname2, data, log, quiet=False)[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(self, lines, line0, iline)[source]

*element, type=mass, elset=topc_inertia-2_mass_

_read_star_block(self, lines, iline, line0, 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.

_read_star_block2(self, lines, iline, line0, 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.

read_abaqus_inp(self, abaqus_inp_filename)[source]

reads an abaqus model

read_assembly(self, lines, iline, line0, word)[source]

reads an Assembly object

read_material(self, lines, iline, word)[source]

reads a Material card

read_part(self, lines, iline, line0, word)[source]

reads a Part object

read_step(self, lines, iline, line0, istep)[source]

reads a step object

write(self, abqaqus_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.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_set(lines, iline, line0, params_map)[source]

reads a set

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(self, abq_file)[source]
class pyNastran.converters.abaqus.abaqus_cards.Material(name, sections, density=None, ndepvars=None, ndelete=None)[source]

Bases: object

a Material object is a series of nodes & elements (of various types)

write(self, abq_file)[source]
class pyNastran.converters.abaqus.abaqus_cards.Part(name, nids, nodes, element_types, node_sets, element_sets, solid_sections, log)[source]

Bases: object

a Part object is a series of nodes & elements (of various types)

creates a Part object

Parameters:
name : str

the name

element_types : Dict[element_type]
element_type : str

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 coh2d4 : (nelements, 4) int ndarray cohax4 : (nelements, 4) int ndarray cax3 : (nelements, 3) int ndarray cax4r : (nelements, 4) int ndarray cps4r : (nelements, 4) int ndarray

solids:

c3d10h : (nelements, 10) int ndarray

_etypes_nnodes(self)[source]

internal helper method

_store_elements(self, element_types)[source]

helper method for the init

check_materials(self, materials)[source]

validates the materials

element(self, eid)[source]

gets a specific element of the part

element_types

simplified way to access all the elements as a dictionary

write(self, abq_file, is_2d=False)[source]

writes a Part

class pyNastran.converters.abaqus.abaqus_cards.SolidSection(param_map, data_lines, log)[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=False)[source]

Bases: object

defines methods for reading interfacing with AFLR2

Initializes the AFLR2 object

Parameters:
debug : bool/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

log : logging module object / None

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

merge_bedge(self, bedge, bedge_filename)[source]

merges two bedge models into a single new *.bedge file

read_bedge(self, bedge_filename, beta_reverse=179.7)[source]

reads a *.bedge file

write_fixed_points(self, fixed_points_filename)[source]

writes a *.csv file that can be read by pyNastranGUI to show the points

write_nastran(self, 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_filename : str

the *.bedge file

nodes : ???

???

grid_bcs : ???

??? source is model.grid_bc, not model.grid_bcs

curves : ???

???

subcurves : ???

???

axis : int; default=1

the axis to remove (nodes in Nx3)

log : Logger(); 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:
debug : bool/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

log : logging module object / None

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

get_normals(self)[source]
read_surf(self, 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(self, surf_filename)[source]
class pyNastran.converters.aflr.surf.surf_reader.TagReader(log=None, debug=False)[source]

Bases: object

read_tag_filename(self, 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_filenames : List[str]

list of surf filenames

surf_out_filename : str; default=None -> no writing

string of stl output filename

Returns:
surf : SurfReader

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(self, 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_filename : str

the input UGRID filename

bdf_filename : str

the output BDF filename

include_shells : bool; default=True

should the shells be written

include_solids : bool; default=True

should the solids be written

convert_pyram_to_penta : bool; default=False

False : NX Nastran True : MSC Nastran

size : int; {8, 16}; default=16

the bdf write precision

is_double : bool; default=False

the field precision to write

log : logger; default=None

a logger object

Returns:
ugrid_model : UGRID()

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_filename : varies

str : the input UGRID filename UGRID : the UGRID object

Returns:
ugrid_model : UGRID()

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_filename : varies

str : the input UGRID filename UGRID : the UGRID object

tecplot_filename : str

the output Tecplot filename

log : logger; default=None

a logger object

debug : bool; default=False

developer debug

Returns:
tecplot_model : Tecplot()

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_filename : varies

str : the input UGRID filename UGRID : the UGRID object

tecplot_filename : str

the output Tecplot filename

log : logger; default=None

a logger object

debug : bool; default=False

developer debug

Returns:
tecplot_model : Tecplot()

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(self, 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(self)[source]
_write_bdf_solids(self, bdf_file, eid, pid, convert_pyram_to_penta=True)[source]

writes the Nastran BDF solid elements

check_hanging_nodes(self, stop_on_diff=True)[source]

verifies that all nodes are used

read_ugrid(self, 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(self)[source]

Finds the CTRIA3s and CQUAD4 elements on the surface of the solid

write_bdf(self, 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:
size : int; {8, 16}; default=16

the bdf write precision

is_double : bool; default=False

the field precision to write

write_ugrid(self, 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_filename : str (default=None -> popup)

the ugrid filename

debug : bool/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

log : logging module object / None

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

encoding : str; default=None

is this used?

Returns:
model : UGRID()

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(self)[source]

flip the model about the y-axis

get_area(self)[source]

Gets the element area

Returns:
area : (n, 3) ndarray

the element areas

get_free_edges(self, 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_max(self, points, i)[source]
get_min(self, points, i)[source]
get_normals(self)[source]

Gets the centroidal normals

Returns:
cnormals : (n, 3) ndarray

normalized centroidal normal vectors

get_normals_at_nodes(self, 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(self, 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(self, 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

loads : dict[str] = (nnodes) ndarray

not supported

axis : str; {“x”, “y”, “z”, “-x”, “-y”, “-z”}

a string of the axis

tol : float; default=0.000001

the tolerance for the centerline points

model_type = 'cart3d'
read_cart3d(self, infilename, result_names=None)[source]

extracts the points, elements, and Cp

write_cart3d(self, 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

nelements

get the number of elements

nnodes

alternate way to access number of points

nodes

alternate way to access the points

npoints

get the number of points

nresults

get the number of results

show(self, n, types='ifs', endian=None)[source]
show_data(self, data, types='ifs', endian=None)[source]
show_ndata(self, 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_filenames : List[str]

list of filenames

out_filename : str

output filename

is_binary : bool; default=False

is the output file binary

float_fmt : str; 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(self, i, name)[source]
get_default_data_format(self, i, name)[source]
get_default_min_max(self, i, name)[source]
get_default_nlabels_labelsize_ncolors_colormap(self, i, name)[source]
get_default_title(self, i, name)[source]
get_header(self, i, name)[source]
header : str
the sidebar word
get_location(self, i, name)[source]
get_methods(self, i)[source]
get_min_max(self, i, name)[source]
get_nlabels_labelsize_ncolors_colormap(self, i, name)[source]
get_result(self, i, name)[source]
get_scalar(self, i, name)[source]
get_title(self, i, name)[source]
get_vector_size(self, i, name)[source]
set_data_format(self, i, name, data_format)[source]
set_min_max(self, i, name, min_value, max_value)[source]
set_nlabels_labelsize_ncolors_colormap(self, i, name, nlabels, labelsize, ncolors, colormap)[source]
set_title(self, i, name, title)[source]
class pyNastran.converters.cart3d.cart3d_result.Cart3dResult(subcase_id, labels, loads, colormap='jet', uname='Cart3dResult')[source]

Bases: pyNastran.gui.gui_objects.gui_result.GuiResultCommon

is this used???

get_data_format(self, i, name)[source]
get_default_data_format(self, i, name)[source]
get_default_min_max(self, i, name)[source]
get_default_nlabels_labelsize_ncolors_colormap(self, i, name)[source]
get_default_title(self, i, name)[source]
get_location(self, i, name)[source]
get_methods(self, i)[source]
get_min_max(self, i, name)[source]
get_nlabels_labelsize_ncolors_colormap(self, i, name)[source]
get_result(self, i, method)[source]
get_scalar(self, i, method)[source]
get_title(self, i, name)[source]
get_vector_size(self, i, name)[source]
set_data_format(self, i, name, data_format)[source]
set_min_max(self, i, name, min_value, max_value)[source]
set_title(self, 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_filename : str

path to the input Cart3D file

bdf_filename : str

path to the output BDF file

log : log / None

log : a logger object None : a log will be defined

debug : bool

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_filename : str

path to the input Cart3D file

log : log / None

log : a logger object None : a log will be defined

debug : bool

True/False (used if log is not defined)

Returns:
bdf_model : BDF

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:
cart3d : Cart3D()

a Cart3D object

stl_filename : str; default=None

path to the output STL file (or None to skip)

log : log

a logger object (or None)

debug : bool; default=False

True/False (used if log is not defined)

Returns:
stl : STL()

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_filename : str

path to the input Cart3D file

stl_filename : str; default=None

path to the output STL file (or None to skip

is_binary : bool; default=False

writes the stl in binary

log : log

a logger object (or None)

debug : bool; default=False

True/False (used if log is not defined)

Returns:
stl : STL()

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(self, 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(self)[source]
get_flow_conditions(self)[source]
get_post_processing(self)[source]
read_input_cntl(self, 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:
debug : bool/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

log : logging module object / None

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

read_fgrid(self, 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:
debug : bool/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

log : logging module object / None

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

get_points_elements(self)[source]
get_points_elements_regions(self)[source]
model_type = 'LaWGS'
read_lawgs(self, wgs_filename)[source]

reads an lawgs file

write_as_plot3d(self, p3dname)[source]

writes a plot3d file

class pyNastran.converters.lawgs.wgs_reader.Panel(key, header, lines, log)[source]

Bases: object

Parameters:
rotate : float

rotates the patch

translate : float

translates the patch

scale : float

scales the patch

build_rotation_matrix(self, r)[source]

Form the rotation matrix used for geometrical transformations Taken from NASA TM 85767 defining LaWGS.

get_element(self, pointI, j, i)[source]
get_elements(self, pointI)[source]
get_points(self)[source]
update_points(self)[source]
write_as_plot3d(self, 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
displacements Module
Inheritance diagram of pyNastran.converters.nastran.displacements
class pyNastran.converters.nastran.displacements.DisplacementResults(subcase_id, titles, headers, xyz, dxyz, unused_scalar, scales, data_formats=None, nlabels=None, labelsize=None, ncolors=None, colormap='jet', set_max_min=False, uname='NastranGeometry')[source]

Bases: pyNastran.converters.nastran.displacements.NastranTable

Defines a Displacement/Eigenvector result

Parameters:
subcase_id : int

the flag that points to self.subcases for a message

headers : List[str]

the sidebar word

titles : List[str]

the legend title

xyz : (nnodes, 3)

the nominal xyz locations

dxyz : (nnodes, 3)

the delta xyz values

scalars : (nnodes,n) float ndarray

#the data to make a contour plot with does nothing

scales : List[float]

the deflection scale factors nominally, this starts as an empty list and is filled later

data_formats : List[str]

the type of data result (e.g. ‘%i’, ‘%.2f’, ‘%.3f’)

ncolors : int; default=None

sets the default for reverting the legend ncolors

set_max_min : bool; default=False

set default_mins and default_maxs

deflects(self, unused_i, unused_res_name)[source]
get_location(self, unused_i, unused_name)[source]

the result type

get_methods(self, i)[source]
get_vector_result_by_scale_phase(self, i, unused_name, scale, phase=0.0)[source]

Gets the real/complex deflection result

Parameters:
i : int

mode/time/loadstep number

name : str

unused; useful for debugging

scale : float

deflection scale factor; true scale

phase : float; default=0.0

phase angle (degrees); unused for real results

Returns:
xyz : (nnodes, 3) float ndarray

the nominal state

deflected_xyz : (nnodes, 3) float ndarray

the deflected state

class pyNastran.converters.nastran.displacements.ElementalTableResults(subcase_id, titles, headers, dxyz, unused_scalar, scales, data_formats=None, nlabels=None, labelsize=None, ncolors=None, colormap='jet', set_max_min=False, uname='NastranGeometry')[source]

Bases: pyNastran.converters.nastran.displacements.NastranTable

this is a centroidal result

deflects(self, unused_i, unused_res_name)[source]
get_methods(self, i)[source]
get_vector_result_by_scale_phase(self, i, unused_name, unused_scale, phase=0.0)[source]
class pyNastran.converters.nastran.displacements.ForceTableResults(subcase_id, titles, headers, dxyz, unused_scalar, scales, data_formats=None, nlabels=None, labelsize=None, ncolors=None, colormap='jet', set_max_min=False, uname='NastranGeometry')[source]

Bases: pyNastran.converters.nastran.displacements.NastranTable

this is a nodal force result

deflects(self, unused_i, unused_res_name)[source]
get_methods(self, i)[source]
get_vector_result_by_scale_phase(self, i, unused_name, unused_scale, phase=0.0)[source]

Gets the real/complex deflection result

Parameters:
i : int

mode/time/loadstep number

name : str

unused; useful for debugging

scale : float

deflection scale factor; true scale unused because it’s a force

phase : float; default=0.0

phase angle (degrees); unused for real results

Returns:
xyz : (nnodes, 3) float ndarray

the nominal state

deflected_xyz : (nnodes, 3) float ndarray

the deflected state

class pyNastran.converters.nastran.displacements.NastranTable(subcase_id, location, titles, headers, dxyz, linked_scale_factor, scales, data_formats=None, nlabels=None, labelsize=None, ncolors=None, colormap='jet', set_max_min=False, uname='NastranGeometry')[source]

Bases: pyNastran.gui.gui_objects.gui_result.GuiResultCommon

Defines a Displacement/Eigenvector result

Parameters:
subcase_id : int

the flag that points to self.subcases for a message

headers : List[str]

the sidebar word

titles : List[str]

the legend title

#xyz : (nnodes, 3)

#the nominal xyz locations

#scalars : (nnodes,n) float ndarray

##the data to make a contour plot with #does nothing

dxyz : (nnodes, 3)

the delta xyz values

linked_scale_factor : bool

is the displacement scale factor linked displacements/loads steps should be force/eigenvectors should not be

scales : List[float]

the table (e.g., deflection, SPC Forces) scale factors nominally, this starts as an empty list and is filled later

data_formats : List[str]

the type of data result (e.g. ‘%i’, ‘%.2f’, ‘%.3f’)

ncolors : int; default=None

sets the default for reverting the legend ncolors

set_max_min : bool; default=False

set default_mins and default_maxs

_get_complex_displacements(self, i)[source]

see _get_complex_displacements_by_phase

_get_complex_displacements_by_phase(self, i, phase=0.0)[source]

Get displacements for a complex eigenvector result.

get_data_format(self, i, name)[source]
get_data_type(self, unused_i, unused_name)[source]

the precision of the data

get_default_data_format(self, i, name)[source]
get_default_min_max(self, i, name)[source]
get_default_nlabels_labelsize_ncolors_colormap(self, i, name)[source]
get_default_phase(self, i, name)[source]
get_default_scale(self, i, name)[source]
get_default_title(self, i, name)[source]
get_header(self, i, unused_name)[source]
get_location(self, i, unused_name)[source]
get_min_max(self, i, name)[source]
get_nlabels_labelsize_ncolors_colormap(self, i, name)[source]
get_phase(self, i, name)[source]
get_plot_value(self, i, unused_name)[source]
get_result(self, i, name)[source]
get_scale(self, i, name)[source]
get_title(self, i, name)[source]
get_vector_result(self, i, name)[source]
get_vector_size(self, i, unused_name)[source]

the result size

phases = None

stored in degrees

save_defaults(self)[source]
set_data_format(self, i, name, data_format)[source]
set_min_max(self, i, name, min_value, max_value)[source]
set_nlabels_labelsize_ncolors_colormap(self, i, name, nlabels, labelsize, ncolors, colormap)[source]
set_phase(self, i, name, phase)[source]
set_scale(self, i, name, scale)[source]
set_title(self, i, name, title)[source]
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:
bdf : BDF()

a BDF object

log : log; default=None -> dummyLogger

a logger object

debug : bool; default=False

True/False (used if log is not defined)

Returns:
cart3d : Cart3D()

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_filename : str

the path to the bdf file

cart3d_filename : str

the path to the cart3d output file

log : log; default=None -> dummyLogger

a logger object

debug : bool; 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_filename : varies

str : the path to a BDF input file BDF() : a BDF() model object

stl_filename : str

the output STL path

is_binary : bool; default=False

should the output file be binary

log : Logger()

a Python logging object

stop_on_failure : bool; 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_filename : varies

str : a bdf filename BDF() : a BDF object

ugrid_filename_out : str (default=None -> ???)

the path to the ugrid_filename

properties : Dict[pid_old]=pid_new???

???

check_shells : bool (default=True)

verify that there is at least one shell element

check_solids : bool (default=True)

verify that there is at least one solid element

log : Logger()

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(self, block_mesh_file, make_symmetry)[source]

writes a BlockMeshDict with a file object

adjust_nodes_to_symmetry(self)[source]
equivalence_nodes(self, Rtol=0.1)[source]

equivalences the nodes of a BlockMeshDict

make_hex_bar(self, unused_bias, ncells)[source]

bias = Llast/Lfirst

make_hex_bars(self, unused_hex_id)[source]
read_openfoam(self, block_mesh_name='blockMeshDict')[source]

reads the BlockMesh file

write_bdf(self, bdf_filename, nodes, hexas)[source]

writes the BlockMesh as a Nastran BDF

write_block_mesh(self, 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(self)[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(self)[source]
class pyNastran.converters.openfoam.surface_mesh.Points[source]

Bases: object

read_points(self)[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:
debug : bool/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

log : logging module object / None

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

read_agps(self, 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:
debug : bool/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

log : logging module object / None

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

add_patch(self, network_name, kt, cp_norm, xyz)[source]
add_wake_patch(self, network_name, options, xyz)[source]
find_patch_by_name(self, network_name)[source]
get_patch(self, patch_id)[source]
get_points_elements_regions(self, get_wakes=False)[source]
group_sections(self, sections, section_names)[source]
model_type = 'panair'
npanels
npatches
print_abutments(self)[source]
print_file(self)[source]
print_grid_summary(self)[source]
print_options(self)[source]
print_out_header(self)[source]
read_panair(self, infilename)[source]

reads a panair input file

set_alphas(self, alphas, alpha_compressibility)[source]
set_betas(self, betas, beta_compressibility)[source]
set_mach(self, mach)[source]
split_points(self, lines, nfull_lines, npartial_lines)[source]

reads the points

update_cases(self)[source]

reduces confusion by only printing cases that will run

write_alphas(self)[source]
write_betas(self)[source]
write_cases(self)[source]
write_data_check(self)[source]
write_end(self)[source]
write_liberalized_abutments(self)[source]
write_mach(self)[source]
write_panair(self, out_filename)[source]

writes the panair file

write_plot3d(self, p3dname, is_binary=False, is_iblank=False)[source]
write_printout(self)[source]
write_reference_quantities(self)[source]
write_title(self)[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(self, point_in)[source]
get_edge(self, 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(self)[source]
get_elements(self, unused_ipoint)[source]
get_header(self)[source]
get_ipoint(self, ipoint)[source]
get_point(self, row, col)[source]
get_points(self)[source]
is_wake(self)[source]
npanels
npoints
process(self)[source]
quick_summary(self, cum_pts, cum_pn)[source]
write_as_plot3d(self)[source]
write_plot3d(self, f, dim)[source]

..todo: is the normal defined correctly? ..todo: will this load into tecplot

write_point(self, point1)[source]
write_points(self, 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(self)[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

to_p3d Module
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:
debug : bool/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

log : logging module object / None

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

build_patches(self, patches)[source]
get_area_by_component(self, components=None)[source]

gets the area of a set of components

get_area_by_patch(self, ipatches=None)[source]

gets the area of a set of patches

get_area_xlength_by_component(self, components=None)[source]

gets the area and length of a set of components

get_points_elements_regions(self)[source]
parse_trailer(self)[source]

parses the case information (e.g., number of angles of attack, control surface info)

read_shabp(self, shabp_filename)[source]

reads an SHABP.INP / SHABP.mk5 file

write_shabp(self, out_filename)[source]

writes an S/HABP file

pyNastran.converters.shabp.shabp.read_shabp(shabp_filename, 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(self, out_filename)[source]
read_viscous2(self, f, i)[source]
readline(self, f, i)[source]
readline_n(self, f, i, n)[source]
stl Package
stl Module
Inheritance diagram of pyNastran.converters.stl.stl
class pyNastran.converters.stl.stl.STL(log=None, debug=False)[source]

Bases: object

Initializes the STL object

Parameters:
debug : bool/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

log : logging module object / None

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

create_mirror_model(self, xyz, tol)[source]

Creates a mirror model.

Parameters:
xyz : str {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(self, tol=1e-05)[source]

equivalences the nodes of the model and updates the elements

flip_axes(self, axes, scale)[source]

Swaps the axes

Parameters:
axes : str

‘xy’, ‘yz’, ‘xz’

scale : float

why is this here, but is not applied to all axes?

flip_normals(self, i=None)[source]

Flips the normals of the specified elements.

Parameters:
i : (n, ) ndarray ints; default=None -> all

the indicies to flip

get_area(self, elements, stop_on_failure=True)[source]
get_normals(self, elements, stop_on_failure=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_failure : bool (default=True)

True: crash if there are coincident points False: delete elements

get_normals_at_nodes(self, 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_eid : Dict[int] = [int, int, … ]

key = node_id value = list of element_ids

Returns:
normals_at_nodes : (nnodes, 3) ndarray ints

the normals

read_ascii_stl(self, stl_filename)[source]

Reads an STL that’s in ASCII format

read_binary_stl(self, stl_filename)[source]

Read an STL binary file

Parameters:
stl_filename : str

the filename to read

read_stl(self, stl_filename)[source]

Reads an STL file

Parameters:
stl_filename : str

the filename to read

remove_elements_with_bad_normals(self)[source]

removes dot and line elements

scale_nodes(self, xscale, yscale=None, zscale=None)[source]

Scales the model

Parameters:
xscale : float

the scaling factor for the x axis; also the default scaling factor

yscale/zscale : float; default=xscale

the scaling factors for the y/z axes

shift_nodes(self, xshift, yshift, zshift)[source]

Shifts the model

write_binary_stl(self, stl_filename, normalize_normal_vectors=False, stop_on_failure=True)[source]

Write an STL binary file

Parameters:
stl_filename : str

the filename to read

normalize_normal_vectors : bool; default=False

should the vectors be normalized

write_stl(self, stl_out_filename, is_binary=False, float_fmt='%6.12f', normalize_normal_vectors=False, stop_on_failure=True)[source]

Writes an STL file

Parameters:
stl_out_filename : str

the filename to write

is_binary : bool; default=False

should a binary file be written

float_fmt : str; default=’%6.12f’

the format to use if an ASCII file is used

normalize_normal_vectors : bool; default=False

should the vectors be normalized

write_stl_ascii(self, out_filename, solid_name, float_fmt='%.6f', normalize_normal_vectors=False, stop_on_failure=True)[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, remove_elements_with_bad_normals=False, log=None, debug=False)[source]

Reads an STL file

Parameters:
stl_filename : str

the filename to read

remove_elements_with_bad_normals : bool; default=False

removes elements with NAN normal

Returns:
model : STL()

the stl model

stl_mesh Module

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.479.8237&rep=rep1&type=pdf http://math.stackexchange.com/questions/4322/check-whether-a-point-is-within-a-3d-triangle https://en.wikipedia.org/wiki/Barycentric_coordinate_system http://en.wikipedia.org/wiki/Line-plane_intersection http://math.stackexchange.com/questions/544946/determine-if-projection-of-3d-point-onto-plane-is-within-a-triangle

pyNastran.converters.stl.dev.stl_mesh.build()[source]
pyNastran.converters.stl.dev.stl_mesh.main()[source]
pyNastran.converters.stl.dev.stl_mesh.project_curve_onto_stl(stl, points, npoints=11)[source]

top down projection

pyNastran.converters.stl.dev.stl_mesh.project_line_onto_stl(stl, pa, pb, npoints=11)[source]

top down projection

pyNastran.converters.stl.dev.stl_mesh.project_points_onto_stl(stl, points)[source]
Parameters:
nodes : (n, 3) ndarray floats

The nodes on the surface.

elements : (n, 3) ndarray ints

The elements on the surface.

pyNastran.converters.stl.dev.stl_mesh.projected_barycentric_coord(p, q, u, v)[source]

points p, q vector u, v

3

*v

/ <—-p

q*—-*u 1 2 u = p2 - p1 v = p3 - p1

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_filename : str / STL()

str : path to the input STL file STL() : an STL object

cart3d_filename : str; default=None

str : path to the output Cart3D file (or None to skip)

log : log

a logger object (or None)

debug : bool; default=False

True/False (used if log is not defined)

is_binary : bool; default=False

should the cart3d file be binary

float_fmt : str; default=‘6.7f’

the cart3d node precision

Returns:
stl : STL()

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_filenames : List[str, str, …]

list of stl filenames or a string filename (useful for removing bad elements)

remove_bad_elements : bool; default=False

should elements with invalid normals be removed?

stl_out_filename : str; default=None -> no writing

string of stl output filename

is_binary : bool; default=True

should the output file be binary

float_fmt : str; default=’%6.12f’

the ascii float format

Returns:
stl : STL()

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

etype_nnodes_map = {3: 2, 5: 3, 9: 4, 10: 4, 12: 8, 13: 6, 14: 5}
read_2d(self, su2_file, ndim)[source]
read_3d(self, su2_file, unused_ndim)[source]
read_su2(self, su2_filename)[source]
write_su2(self, su2_filename, nodes, elements, unused_regions)[source]
pyNastran.converters.su2.su2_reader.read_su2(su2_filename, log=None, debug=False)[source]
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=False)[source]

Bases: object

Parses a hexa binary/ASCII Tecplot 360 file. Writes an ASCII Tecplot 10 file (no transient support).

extract_y_slice(self, y0, tol=0.01, slice_filename=None)[source]

doesn’t work…

get_free_faces(self)[source]

get the free faces for hexa elements

nelements

gets the number of elements in the model

nnodes

gets the number of nodes in the model

read_header_lines(self, tecplot_file, line)[source]

reads a tecplot header

Examples

Example 1

TITLE = “tecplot geometry and solution file” VARIABLES = “x” “y” “z” “rho” “u” “v” “w” “p” ZONE T=”“processor 1”” n=522437, e=1000503, ZONETYPE=FEBrick DATAPACKING=BLOCK

Example 2

title=”Force and Momment Data for forces” variables=”Iteration” “C_L”,”C_D”,”C_M_x”,”C_M_y”,”C_M_z”“C_x”,”C_y”,”C_z”,”C_Lp”,”C_Dp”, “C_Lv”, “C_Dv”“C_M_xp” “C_M_yp”,”C_M_zp”,”C_M_xv”,”C_M_yv”“C_M_zv”,”C_xp”,”C_yp”,”C_zp”,”C_xv”,”C_yv”“C_zv “Mass flow”,”<greek>r</greek>”,”u” “p/p<sub>0</sub>”,”T”,”p<sub>t</sub>/p<sub>0</sub>” “T<sub>t</sub>”,”Mach” “Simulation Time” zone,t=”forces”

read_table(self, tecplot_file, unused_iblock, headers_dict, line)[source]

reads a space-separated tabular data block

read_tecplot(self, 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(self, 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(self, 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.

result_names

gets the variables

show(self, n, types='ifs', endian=None)[source]
show_data(self, data, types='ifs', endian=None)[source]

Shows a data block as various types

Parameters:
data : bytes

the binary string bytes

types : str; 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)

endian : str; default=None -> auto determined somewhere else in the code

the big/little endian {>, <}

.. warning:: ‘s’ is apparently not Python 3 friendly
show_ndata(self, n, types='ifs')[source]
skin_elements(self)[source]
slice_x(self, xslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

slice_xyz(self, xslice, yslice, zslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

slice_y(self, yslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

slice_z(self, zslice)[source]

TODO: doesn’t remove unused nodes/renumber elements

write_tecplot(self, tecplot_filename, res_types=None, is_points=True, adjust_nids=True)[source]

Only handles single type writing

Parameters:
tecplot_filename : str

the path to the output file

res_types : str; List[str, str, …]; default=None -> all

the results that will be written (must be consistent with self.variables)

is_points : bool; default=True

write in POINT format vs. BLOCK format

adjust_nids : bool; default=True

element_ids are 0-based in binary and must be switched to 1-based in ASCII

pyNastran.converters.tecplot.tecplot.main()[source]
pyNastran.converters.tecplot.tecplot.main2()[source]

tests slicing

pyNastran.converters.tecplot.tecplot.read_tecplot(tecplot_filename, use_cols=None, dtype=None, log=None, debug=False)[source]

loads a tecplot file

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.main()[source]

runs the test problem

pyNastran.converters.tecplot.tecplot_to_cart3d.tecplot_to_cart3d(tecplot_filename, cart3d_filename=None, debug=True)[source]

Converts a Tecplot file to Cart3d.

It’s assumed that quads are actually degenerate triangles

pyNastran.converters.tecplot.tecplot_to_cart3d.tecplot_to_cart3d_filename(tecplot_filename, cart3d_filename, 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.tecplot_to_nastran(tecplot_filename, bdf_filename, log=None, debug=True)[source]

Converts a Tecplot file to Nastran.

pyNastran.converters.tecplot.tecplot_to_nastran.tecplot_to_nastran_filename(tecplot_filename, bdf_filename, log=None, debug=True)[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:
debug : bool/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

log : logging module object / None

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

read_smesh(self, smesh_filename)[source]

reads the *.smesh file

read_tetgen(self, node_filename, smesh_filename, ele_filename, dimension_flag)[source]

reads a tetgen file

write_nastran(self, 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(self, 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(self, 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:
debug : bool/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

log : logging 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(self, bc_filename, stop_after_header=False, get_lbouf=False)[source]
read_cogsg(self, cogsg_filename, stop_after_header=False)[source]

Reads the *.cogsg file

Returns:
nodes : (N, 3) float ndarray

the nodes

tet_elements : ???

???

read_flo(self, 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_filename : str

the name of the file to read

n : int; 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_ids : List[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

loads : dict[result_name]
result_name : str

the name of the result

data : (nnodes, ) float ndarray

the data corresponding to the result_name

read_mapbc(self, 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(self, basename, unused_dimension_flag, read_loads=True)[source]
Parameters:
basename : str

the root path to the *.cogsg, *.bc, *.mapbc, *.face, *.front files

unused_dimension_flag : int; unused

??? 2?/3

read_loads : bool; 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

mapbc : dict[patch_id]

patch_id : int map_line : List[bc, family, surf, surf_ids]

bc : int

boundary condition number

family : int

family number

surf : int

surface number

surf_ids : str

???

loads : dict[]

???

flo_filename : str

the latest result filename None : no *.flo file could be found static : *.flo transient : *_xxx.flo

write_usm3d(self, 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