shell Module

digraph inheritanceaf1c1fd2bf { bgcolor=transparent; rankdir=LR; size=""; "pyNastran.bdf.cards.base_card.BaseCard" [URL="../pyNastran.bdf.cards.base_card.html#pyNastran.bdf.cards.base_card.BaseCard",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Defines a series of base methods for every card class"]; "pyNastran.bdf.cards.base_card.Property" [URL="../pyNastran.bdf.cards.base_card.html#pyNastran.bdf.cards.base_card.Property",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base Property Class"]; "pyNastran.bdf.cards.base_card.BaseCard" -> "pyNastran.bdf.cards.base_card.Property" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.CompositeShellProperty" [URL="#pyNastran.bdf.cards.properties.shell.CompositeShellProperty",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Common class for:"]; "pyNastran.bdf.cards.base_card.Property" -> "pyNastran.bdf.cards.properties.shell.CompositeShellProperty" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PCOMP" [URL="#pyNastran.bdf.cards.properties.shell.PCOMP",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="+-------+--------+--------+---------+-------+--------+--------+--------+-------+"]; "pyNastran.bdf.cards.properties.shell.CompositeShellProperty" -> "pyNastran.bdf.cards.properties.shell.PCOMP" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PCOMPG" [URL="#pyNastran.bdf.cards.properties.shell.PCOMPG",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="+--------+----------+------+-----+--------+--------+------+----+-----+"]; "pyNastran.bdf.cards.properties.shell.CompositeShellProperty" -> "pyNastran.bdf.cards.properties.shell.PCOMPG" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PLPLANE" [URL="#pyNastran.bdf.cards.properties.shell.PLPLANE",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Fully Nonlinear Plane Element Properties (SOL 601)"]; "pyNastran.bdf.cards.base_card.Property" -> "pyNastran.bdf.cards.properties.shell.PLPLANE" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PPLANE" [URL="#pyNastran.bdf.cards.properties.shell.PPLANE",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "pyNastran.bdf.cards.base_card.Property" -> "pyNastran.bdf.cards.properties.shell.PPLANE" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PSHEAR" [URL="#pyNastran.bdf.cards.properties.shell.PSHEAR",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Defines the properties of a shear panel (CSHEAR entry)."]; "pyNastran.bdf.cards.base_card.Property" -> "pyNastran.bdf.cards.properties.shell.PSHEAR" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PSHELL" [URL="#pyNastran.bdf.cards.properties.shell.PSHELL",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="+--------+-------+------+--------+------+----------+------+------+---------+"]; "pyNastran.bdf.cards.base_card.Property" -> "pyNastran.bdf.cards.properties.shell.PSHELL" [arrowsize=0.5,style="setlinewidth(0.5)"]; "pyNastran.bdf.cards.properties.shell.PTRSHL" [URL="#pyNastran.bdf.cards.properties.shell.PTRSHL",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="+--------+-------+-------+-------+-------+-------+-------+-------+-------+"]; "pyNastran.bdf.cards.base_card.Property" -> "pyNastran.bdf.cards.properties.shell.PTRSHL" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

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

Common class for:
  • PCOMP

  • PCOMPG

dummy init

MassPerArea(iply='all', method='nplies', tflag: int = 1, tscales=None)[source]
MassPerArea_structure() float[source]
Material(iply: int) MAT1 | MAT8 | MAT9[source]

Gets the material of the \(i^{th}\) ply (not the ID unless it is not cross-referenced).

Parameters:
iplyint

the ply ID (starts from 0)

Mid(iply: int) int[source]

Gets the Material ID of the \(i^{th}\) ply.

Parameters:
iplyint/str; default=’all’

the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

Returns:
material_idint

the material id of the ith ply

Mids() list[int][source]
Nsm() float[source]
Rho(iply: int) float[source]
property TRef: float
Theta(iply: int) float[source]
Thickness(iply: int | str = 'all', tflag: int = 1, tscales=None)[source]
_adjust_ply_id(iply: int) int[source]

Gets the ply ID that’s stored in self.plies.

When a ply is not symmetric, this function returns the input iply. When a ply is symmetrical and the iply value is greater than the number of plies, we return the mirrored ply. For the case of a symmetrical ply, the element will always have an even number of layers.

Parameters:
iplyint

the ply ID (0-based)

Raises:
  • IndexError if iply is invalid
::
Case 1 (nplies=6, len(plies)=3, lam=’SYM’):

ply 2 ply 1 ply 0 ——- sym ply 0 / 3 ply 1 / 4 ply 2 / 5

Ask for ply 3, return ply 0 Ask for ply 4, return ply 1 Ask for ply 5, return ply 2

Case 2 (nplies=5, len(plies)=5, lam=’NO’):

ply 5 ply 4 ply 3 ply 1 ply 0

Ask for ply 3, return ply 1 Ask for ply 4, return ply 2

cross_reference(model: BDF) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

get_density(iply: int) float[source]

Gets the density of the \(i^{th}\) ply

Parameters:
iplyint

the ply ID (starts from 0)

get_mass_per_area(iply='all', method: str = 'nplies') float[source]

Gets the Mass/Area for the property.

\[\frac{m}{A} = \sum(\rho t) + nsm\]

or

\[\frac{m}{A} - nsm = \sum(\rho t)\]

and

\[\frac{m_i}{A} = rho_i t_i + nsm_i\]

where \(nsm_i\) is the non-structural mass of the \(i^{th}\) ply

Parameters:
iplystr/int; default=’all’

str : the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

methodstr

the method to compute MassPerArea {nplies, rho*t, t}

  • Case 1 (iply = all)

    method has no effect because the total nsm is defined

  • Case 2 (iply != all)

    method ‘nplies’ smear the nsm based on \(n_{plies}\) (default)

    \(nsm_i = nsm / n_{plies}\) # smear based on nplies

  • Case 3 (iply != all)

    method ‘rho*t’ smear the nsm based on the mass distribution

    \[nsm_i = \rho_i t_i \frac{nsm}{\sum(\rho_i t_i)}\]
    \[nsm_i = \rho_i t_i \frac{nsm}{\frac{m}{A} - nsm}\]
  • Case 4 (iply != all)

    method ‘t’ smear the nsm based on the thickness distribution

    \[nsm_i = t_i \frac{nsm}{\sum(t_i)}\]
.. note:: final mass calculation will be done later
get_mass_per_area_rho(rhos: list[float], iply='all', method: str = 'nplies') float[source]

Gets the Mass/Area for the property.

\[\frac{m}{A} = \sum(\rho t) + nsm\]

or

\[\frac{m}{A} - nsm = \sum(\rho t)\]

and

\[\frac{m_i}{A} = rho_i t_i + nsm_i\]

where \(nsm_i\) is the non-structural mass of the \(i^{th}\) ply

Parameters:
rhoslist[float]

the densities of each ply

iplystr/int; default=’all’

the mass per area of the \(i^{th}\) ply

methodstr

the method to compute MassPerArea {nplies, rho*t, t}

  • Case 1 (iply = all)

    method has no effect because the total nsm is defined

  • Case 2 (iply != all)

    method ‘nplies’ smear the nsm based on \(n_{plies}\) (default)

    \(nsm_i = nsm / n_{plies}\) # smear based on nplies

  • Case 3 (iply != all)

    method ‘rho*t’ smear the nsm based on the mass distribution

    \[nsm_i = \rho_i t_i \frac{nsm}{\sum(\rho_i t_i)}\]
    \[nsm_i = \rho_i t_i \frac{nsm}{\frac{m}{A} - nsm}\]
  • Case 4 (iply != all)

    method ‘t’ smear the nsm based on the thickness distribution

    \[nsm_i = t_i \frac{nsm}{\sum(t_i)}\]
.. note:: final mass calculation will be done later
get_mass_per_area_structure(rhos: list[float]) float[source]

Gets the Mass/Area for the property structure only (doesn’t consider nsm).

\[\frac{m}{A} = \sum(\rho t)\]
Parameters:
rhoslist[float]

the densities of each ply

get_material_id(iply: int) int[source]

iply - 0 based

get_material_ids(include_symmetry: bool = True)[source]
get_nonstructural_mass() float[source]

Gets the non-structural mass \(i^{th}\) ply

get_sout(iply: int) str[source]

Gets the the flag identifying stress/strain outpur of the \(i^{th}\) ply (not the ID). default=’NO’.

Parameters:
iplyint

the ply ID (starts from 0)

get_souts(include_symmetry: bool = True) ndarray[source]
get_theta(iply: int) float[source]

Gets the ply angle of the \(i^{th}\) ply (not the ID)

Parameters:
iplyint

the ply ID (starts from 0)

get_thetas(include_symmetry: bool = True) ndarray[source]
get_thickness(iply: int | str = 'all') float[source]

Gets the thickness of the \(i^{th}\) ply.

Parameters:
iplyint/str; default=’all’

the string ‘all’ (default) or the mass per area of the \(i^{th}\) ply

Returns:
thicknessfloat

the thickness of the ply or plies

get_thicknesses(include_symmetry: bool = True) ndarray[source]
get_z_locations() ndarray[source]

Gets the z locations for the various plies.

Parameters:
iplyint

the ply ID (starts from 0)

Assume there are 2 plies, each of 1.0 thick, starting from :math:`z=0`.
>>> pcomp.get_z_locations()
[0., 1., 2.]
property is_symmetrical: bool

Is the laminate symmetrical?

Returns:
is_symmetricalbool

is the SYM flag active?

property material_ids: list[int]

Gets the material IDs of all the plies

Returns:
midsMATx

the material IDs

property nplies: int

Gets the number of plies including the core.

if Lam=SYM:
  returns nplies * 2   (even)
else:
  returns nplies
reverse() None[source]
safe_cross_reference(model: BDF, xref_errors: dict[str, Any]) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

sout(iply: int) str[source]
uncross_reference() None[source]

Removes cross-reference links

class pyNastran.bdf.cards.properties.shell.PCOMP(pid: int, mids: list[int], thicknesses: list[float], thetas: list[float] | None = None, souts: list[str] | None = None, nsm: float = 0.0, sb: float = 0.0, ft: str | None = None, tref: float = 0.0, ge: float = 0.0, lam: str | None = None, z0: float | None = None, validate: bool = True, comment: str = '')[source]

Bases: CompositeShellProperty

1

2

3

4

5

6

7

8

9

PCOMP

PID

Z0

NSM

SB

FT

TREF

GE

LAM

MID1

T1

THETA1

SOUT1

MID2

T2

THETA2

SOUT2

MID3

T3

THETA3

SOUT3

etc.

PCOMP

701512

0.0+0

1.549-2

0.0+0

0.0+0

SYM

300704

3.7-2

0.0+0

YES

300704

3.7-2

YES

300704

3.7-2

-45.

YES

300704

3.7-2

YES

300705

.5

0.0+0

YES

Creates a PCOMP card

pidint

property id

midslist[int, …, int]

material ids for each ply

thicknesseslist[float, …, float]

thicknesses for each ply

thetaslist[float, …, float]; default=None

ply angle None : [0.] * nplies

soutslist[str, …, str]; default=None

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

nsmfloat; default=0.

nonstructural mass per unit area

sbfloat; default=0.

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

ftstr; default=None

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

treffloat; default=0.

reference temperature

gefloat; default=0.

structural damping

lamstr; default=None

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

z0float; default=None

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

commentstr; default=’’

a comment for the card

classmethod _init_from_empty()[source]
_properties = ['_field_map', 'plies', 'nplies', 'material_ids']
classmethod add_card(card: BDFCard, comment: str = '')[source]

Adds a PCOMP card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

ft

Failure Theory [‘HILL’, ‘HOFF’, ‘TSAI’, ‘STRN’, None]

get_ABD_matrices(theta_offset: float = 0.0, degrees: bool = True) ndarray[source]

Gets the ABD matrix

Parameters:
theta_offsetfloat

rotates the ABD matrix

degrees: bool; default=True

True: theta_offset is measured in degrees False: theta_offset is measured in radians

get_Ainv_equivalent_pshell(imat_rotation_angle: float, thickness: float, degrees: bool = True) tuple[float, float, float, float][source]

imat_rotation_angle is in degrees

Parameters:
imat_rotation_angle_degfloat

what angle you want

get_Qbar_matrix(mid_ref: MAT1 | MAT8, theta: float = 0.0) np.ndarray[source]

theta must be in radians

get_Sbar_matrix(mid_ref, theta: float) ndarray[source]

theta must be in radians

get_individual_ABD_matrices(theta_offset: float = 0.0, degrees: bool = True) tuple[ndarray, ndarray, ndarray][source]

Gets the ABD matrix

Parameters:
theta_offsetfloat

rotates the ABD matrix

degrees: bool; default=True

True: theta_offset is measured in degrees False: theta_offset is measured in radians

get_z0_z1_zmean()[source]
is_balanced_symmetric(debug=True)[source]

assumes materials with different mids are unique

lam

symmetric flag - default = No Symmetry (=None)

nsm

Non-Structural Mass per unit Area

pid

Property ID

property plies
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns:
fieldslist[varies]

the fields that define the card

tref

Reference Temperature (default=0.0)

type = 'PCOMP'
update_by_pname_fid(pname_fid: str | int, value: int | float | str) None[source]
validate()[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PCOMPG(pid: int, global_ply_ids: list[int], mids: list[int], thicknesses: list[float], thetas: list[float] | None = None, souts: list[str] | None = None, nsm: float = 0.0, sb: float = 0.0, ft: str | None = None, tref: float = 0.0, ge: float = 0.0, lam: str | None = None, z0: float | None = None, validate: bool = True, comment: str = '')[source]

Bases: CompositeShellProperty

1

2

3

4

5

6

7

8

9

PCOMPG

PID

Z0

NSM

SB

FT

TREF

GE

LAM

GPLYID1

MID1

T1

THETA1

SOUT1

GPLYID2

MID2

T2

THETA2

SOUT2

Creates a PCOMPG card

Parameters:
pidint

property id

global_ply_idslist[int]

the ply id

midslist[int, …, int]

material ids for each ply

thicknesseslist[float, …, float]

thicknesses for each ply

thetaslist[float, …, float]; default=None

ply angle None : [0.] * nplies

soutslist[str, …, str]; default=None

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

nsmfloat; default=0.

nonstructural mass per unit area

sbfloat; default=0.

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

ftstr; default=None

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

treffloat; default=0.

reference temperature

gefloat; default=0.

structural damping

lamstr; default=None

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

z0float; default=None

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

commentstr; default=’’

a comment for the card

GlobalPlyID(iply: int) int[source]

returns the global ply id for the specified layer

classmethod _init_from_empty()[source]
_properties = ['_field_map', 'plies', 'nplies', 'material_ids']
classmethod add_card(card: BDFCard, comment: str = '')[source]

Adds a PCOMPG card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

ft

Failure Theory

[‘HILL’, ‘HOFF’, ‘TSAI’, ‘STRN’, None]

get_global_ply_ids(include_symmetry: bool = True) ndarray[source]
lam

symmetric flag - default = No Symmetry (NO)

nsm

Non-Structural Mass per unit Area

pid

Property ID

property plies: list[tuple[int, float, float, str, int]]
pname_fid_map = {}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns:
fieldslist[varies]

the fields that define the card

tref

Reference Temperature (default=0.0)

type = 'PCOMPG'
update_by_pname_fid(pname_fid: str | int, value) None[source]
validate() None[source]

card checking method that should be overwritten

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PLPLANE(pid, mid, cid=0, stress_strain_output_location='GRID', comment='')[source]

Bases: Property

Fully Nonlinear Plane Element Properties (SOL 601) Defines the properties of a fully nonlinear (i.e., large strain and large rotation) hyperelastic plane strain or axisymmetric element.

1

2

3

4

5

PLPLANE

PID

MID

CID

STR

MSC

1

2

3

4

5

6

PLPLANE

PID

MID

CID

STR

T

NX

Referenced by:

#- CQUAD, CQUAD4, CQUAD8, CQUADX, CTRIA3, CTRIA6, CTRIAX (MSC) #- CPLSTS3, CPLSTS4, CPLSTS6, CPLSTS8 entries (NX 10)

Creates a PLPLANE card, which defines the properties of a fully nonlinear (i.e., large strain and large rotation) hyperelastic plane strain or axisymmetric element.

Parameters:
pidint

property id

midint

material id; MATHP / MATHE

cidint; default=0

???

stress_strain_output_locationstr; default=’GRID’

???

commentstr; default=’’

a comment for the card

Cid()[source]
Mid()[source]

returns the material id

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PLPLANE card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

pid

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns:
fieldslist[varies]

the fields that define the card

type = 'PLPLANE'
uncross_reference() None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PPLANE(pid: int, mid: int, t: float = 0.0, nsm: float = 0.0, formulation_option: int = 0, comment: str = '')[source]

Bases: Property

NX specific card

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid()[source]

returns the material id

Thickness()[source]

returns the thickness of the element

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PPLANE card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

pid

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns:
fieldslist[varies]

the fields that define the card

type = 'PPLANE'
uncross_reference() None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PSHEAR(pid: int, mid: int, t: float, nsm: float = 0.0, f1: float = 0.0, f2: float = 0.0, comment: str = '')[source]

Bases: Property

Defines the properties of a shear panel (CSHEAR entry).

1

2

3

4

5

6

7

PSHEAR

PID

MID

T

NSM

F1

F2

Creates a PSHEAR card

Parameters:
pidint

property id

midint

material id

tfloat

shear panel thickness

nsmfloat; default=0.

nonstructural mass per unit length

f1float; default=0.0

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

f2float; default=0.0

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

commentstr; default=’’

a comment for the card

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid()[source]

returns the material id

Rho()[source]

returns the material density

Thickness()[source]

returns the thickness of the element

classmethod _init_from_empty()[source]
classmethod add_card(card, comment='')[source]

Adds a PSHEAR card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

mid

Material ID

pid

Property ID

pname_fid_map = {'T': 't', 4: 't'}
raw_fields()[source]
type = 'PSHEAR'
uncross_reference() None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PSHELL(pid: int, mid1: int | None = None, t: float | None = None, mid2: int | None = None, twelveIt3: float = 1.0, mid3: int | None = None, tst: float = 0.833333, nsm: float = 0.0, z1: float | None = None, z2: float | None = None, mid4: int | None = None, comment: str = '')[source]

Bases: Property

1

2

3

4

5

6

7

8

9

PSHELL

PID

MID1

T

MID2

12I/T**3

MID3

TS/T

NSM

Z1

Z2

MID4

PSHELL

41111

1

1.0000

1

1

0.02081

Creates a PSHELL card

Parameters:
pidint

property id

mid1int; default=None

defines membrane material defines element density (unless blank)

mid2int; default=None

defines bending material defines element density if mid1=None

mid3int; default=None

defines transverse shear material (only defined if mid2 > 0)

mid4int; default=None

defines membrane-bending coupling material (only defined if mid1 > 0 and mid2 > 0; can’t be mid1/mid2)

twelveIt3float; default=1.0

Bending moment of inertia ratio, 12I/T^3. Ratio of the actual bending moment inertia of the shell, I, to the bending moment of inertia of a homogeneous shell, T^3/12. The default value is for a homogeneous shell.

nsmfloat; default=0.0

non-structural mass per unit area

z1 / z2float; default=None

fiber distance location 1/2 for stress/strain calculations z1 default : -t/2 if thickness is defined z2 default : t/2 if thickness is defined

commentstr; default=’’

a comment for the card

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

MassPerArea_no_xref(model, tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

MassPerArea_structure()[source]

Calculates mass per area without considering non-structural mass.

\[\]

rac{m}{A} = nsm + ho t

Mid() int | None[source]

returns the material id used for mass

Mid1() int | None[source]

returns the extension material id

Mid2() int | None[source]

returns the bending material id

Mid3() int | None[source]
Mid4() int | None[source]
Nsm() float[source]

returns the non-structural mass

Rho() float[source]

returns the material density

Thickness(tflag: int = 1, tscales=None)[source]

returns the thickness of the element

classmethod add_card(card, comment='')[source]

Adds a PSHELL card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

classmethod add_card_lax(card, comment='')[source]

see add_card

cross_reference(model: BDF) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

classmethod export_to_hdf5(h5_file, model, pids)[source]

exports the properties in a vectorized way

get_ABD_matrices(theta_offset=0.0) ndarray[source]

Gets the ABD matrix

Parameters:
theta_offsetfloat

rotates the ABD matrix; measured in degrees

get_Ainv_equivalent_pshell(imat_rotation_angle: float, thickness: float) tuple[float, float, float, float][source]

imat_rotation_angle is in degrees…but is specified in radians and unused

get_Qbar_matrix(mid_ref, theta=0.0)[source]

theta must be in radians

get_Sbar_matrix(mid_ref, theta=0.0)[source]

theta must be in radians

get_individual_ABD_matrices(theta_offset: float = 0.0) tuple[ndarray, ndarray, ndarray][source]

Gets the ABD matrix

Parameters:
theta_offsetfloat

rotates the ABD matrix; measured in degrees

http://www2.me.rochester.edu/courses/ME204/nx_help/index.html#uid:id503291
Understanding Classical Lamination Theory
get_z_locations() list[float][source]

returns the locations of the bottom and top surface of the shell

property material_ids: list[int | None]

returns the material ids

materials()[source]

returns the material objects referenced by the shell

mid2

Material identification number for bending -1 for plane strin

property mid_ref

returns the material used for mass

nsm

Non-structural Mass

pid

Property ID

pname_fid_map = {'T': 't', 4: 't', 6: 'twelveIt3', 8: 'tst'}
raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns:
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

t

thickness

tst

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

Scales the moment of interia of the element based on the moment of interia for a plate

..math:: I = frac{12I}{t^3} I_{plate}

type = 'PSHELL'
uncross_reference() None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

class pyNastran.bdf.cards.properties.shell.PTRSHL(pid: int, mid1: int, t: list[float], mid2: int, I: list[float], mid3: int, ts: list[float], nsm: float, z: list[float], comment: str = '')[source]

Bases: Property

1

2

3

4

5

6

7

8

9

PTRSHL

PID

MID1

T1

T3

T5

MID2

I1

I3

I5

MID3

TS1

TS3

TS5

NSM

Z11

Z21

Z13

Z23

Z15

Z25

PTRSHL

10

20

3.0

6.0

4.0

30

2.25

18.0

5.33

40

2.5

5.0

3.5

50.0

1.5

-1.5

3.0

-3.0

2.0

-2.0

Creates a PTRSHL card

Parameters:
pidint

property id

mid1int; default=None

defines membrane material

T1 / T3 / T5float

Thickness at vertices 1, 3, and 5 of the element, respectively

mid2int

Material identification number for bending; mid2 > 0

I1 / I3 / I5float

Area moments of inertia per unit width at the vertices 1, 3, and 5 of the element, respectively (Real >= 0.0).

mid3int

Material identification number for transverse shear; mid3 >= 0

ts1 / ts3 / ts5float

Transverse shear thickness at the vertices 1, 3, and 5 of the element, respectively (Real >= 0.0).

nsmfloat

Nonstructural mass per unit area (Real)

Z11, Z21, Z13, Z23, Z15, Z25float

Fiber distances for stress computation at grid points G1, G3, and G5 respectively, positive according to the right-hand sequence defined on the CTRSHL card (Real >= 0.0).

I

inertia (I1, I3, I5)

MassPerArea(tflag=1, tscales=None)[source]

Calculates mass per area.

\[\]

rac{m}{A} = nsm + ho t

Mid()[source]

returns the material ID of an element

Returns:
midint

the Material ID

Mid1()[source]

returns the extension material id

Mid2()[source]

returns the bending material id

Mid3()[source]
Nsm()[source]

returns the non-structural mass

Rho()[source]

returns the material density

Thickness(tflag=1, tscales=None)[source]

returns the thickness of the element

classmethod add_card(card, comment='')[source]

Adds a PTRSHL card from BDF.add_card(...)

Parameters:
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) None[source]

Cross links the card so referenced cards can be extracted directly

Parameters:
modelBDF()

the BDF object

property material_ids

returns the material ids

materials()[source]

returns the material objects referenced by the shell

pid

Property ID

raw_fields()[source]
repr_fields()[source]

Gets the fields in their simplified form

Returns:
fieldslist[varies]

the fields that define the card

t

thickness (T1, T3, T5)

ts

thickness (TS1, TS3, TS5)

type = 'PTRSHL'
uncross_reference() None[source]

Removes cross-reference links

write_card(size: int = 8, is_double: bool = False) str[source]

Writes the card with the specified width and precision

Parameters:
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns:
msgstr

the string representation of the card

pyNastran.bdf.cards.properties.shell.get_2d_plate_transform(theta: float) ndarray[source]

theta must be in radians

pyNastran.bdf.cards.properties.shell.map_failure_theory_int(ft: int) str | None[source]