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)’)