static_loads Module

Inheritance diagram of pyNastran.bdf.cards.aero.static_loads
All trim aero cards are defined in this file. This includes:
  • AEROS

  • AESTAT

  • CSSCHD

  • DIVERG

  • TRIM

All cards are BaseCard objects.

class pyNastran.bdf.cards.aero.static_loads.AEROS(cref, bref, sref, acsid=0, rcsid=0, sym_xz=0, sym_xy=0, comment='')[source]

Bases: pyNastran.bdf.cards.aero.dynamic_loads.Aero

Gives basic aerodynamic parameters for unsteady aerodynamics.

1

2

3

4

5

6

7

8

AEROS

ACSID

RCSID

REFC

REFB

REFS

SYMXZ

SYMXY

AEROS

10

20

1

Creates an AEROS card

Parameters
creffloat

the aerodynamic chord

breffloat

the wing span for a half model, this should be the full span for a full model, this should be the full span

sreffloat

the wing area for a half model, this should be the half area for a full model, this should be the full area

acsidint; default=0

aerodyanmic coordinate system defines the direction of the wind

rcsidint; default=0

coordinate system for rigid body motions

sym_xzint; default=0

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

sym_xyint; default=0

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

commentstr; default=’’

a comment for the card

Acsid()[source]

air velocity defined as moving into the +x direction

Rcsid()[source]

rigid body coordinate system

classmethod _init_from_empty()[source]
_properties = ['is_anti_symmetric_xy', 'is_anti_symmetric_xz', 'is_symmetric_xy', 'is_symmetric_xz']
acsid = None

Aerodynamic coordinate system identification.

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

Adds an AEROS card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

bref = None

Reference span

cref = None

Reference chord length

cross_reference(model: BDF) → None[source]

Cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

rcsid = None

Reference coordinate system identification for rigid body motions.

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]

Safe cross reference aerodynamic coordinate system.

Parameters
modelBDF

The BDF object.

sref = None

Reference wing area

sym_xy = None

The symmetry key for the aero coordinate x-y plane can be used to simulate ground effects. (Integer = +1 for antisymmetry, 0 for no symmetry, and -1 for symmetry; Default = 0)

sym_xz = None

Symmetry key for the aero coordinate x-z plane. See Remark 6. (Integer = +1 for symmetry, 0 for no symmetry, and -1 for antisymmetry; Default = 0)

type = 'AEROS'
uncross_reference() → None[source]

Removes cross-reference links

update(maps)[source]
maps = {

‘coord’ : cid_map,

}

validate()[source]

card checking method that should be overwritten

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

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.AESTAT(aestat_id, label, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies rigid body motions to be used as trim variables in static aeroelasticity.

1

2

3

AESTAT

ID

LABEL

AESTAT

5001

ANGLEA

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

Parameters
idint

unique id

labelstr

name for the id

commentstr; default=’’

a comment for the card

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

Adds an AESTAT card from BDF.add_card(...)

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldsList[int/str]

the fields that define the card

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

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.CSSCHD(sid, aesid, lschd, lalpha=None, lmach=None, comment='')[source]

Bases: pyNastran.bdf.cards.aero.dynamic_loads.Aero

Defines a scheduled control surface deflection as a function of Mach number and angle of attack.

1

2

3

4

5

6

CSSCHD

SlD

AESID

LALPHA

LMACH

LSCHD

CSSCHD

5

50

12

15

25

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

Parameters
sidint

the unique id

aesidint

the control surface (AESURF) id

lalphaint; default=None

the angle of attack profile (AEFACT) id

lmachint; default=None

the mach profile (AEFACT) id

lschdint; default=None

the control surface deflection profile (AEFACT) id

commentstr; default=’’

a comment for the card

AESid()[source]
LAlpha()[source]
LMach()[source]
LSchd()[source]
classmethod _init_from_empty()[source]
_properties = ['is_anti_symmetric_xy', 'is_anti_symmetric_xz', 'is_symmetric_xy', 'is_symmetric_xz']
classmethod add_card(card, comment='')[source]

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

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

cross_reference(model: BDF) → None[source]

Cross links the card so referenced cards can be extracted directly

Parameters
modelBDF()

the BDF object

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

safe_cross_reference(model: BDF, xref_errors)[source]
type = 'CSSCHD'
uncross_reference() → None[source]

Removes cross-reference links

validate()[source]

card checking method that should be overwritten

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

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.DIVERG(sid: int, nroots: int, machs: List[float], comment: str = '')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

1

2

3

4

5

6

7

8

9

DIVERG

SID

NROOT

M1

M2

M3

M4

M5

M6

M7

etc.

Attributes
sidint

The name.

nrootsint

the number of roots

machsList[float, …, float]

list of Mach numbers

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

Parameters
sidint

The name

nrootsint

the number of roots

machsList[float, …, float]

list of Mach numbers

commentstr; default=’’

a comment for the card

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

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

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]
type = 'DIVERG'
write_card(size: int = 8, is_double: bool = False) → str[source]

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.TRIM(sid, mach, q, labels, uxs, aeqr=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.base_card.BaseCard

Specifies constraints for aeroelastic trim variables.

1

2

3

4

5

6

7

8

9

TRIM

ID

MACH

Q

LABEL1

UX1

LABEL2

UX2

IS_RIGID

LABEL3

UX3

LABEL4

UX4

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

Parameters
sidint

the trim id; referenced by the Case Control TRIM field

machfloat

the mach number

qfloat

dynamic pressure

labelsList[str]

names of the fixed variables

uxsList[float]

values corresponding to labels

aeqrfloat

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

commentstr; default=’’

a comment for the card

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

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

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

aeqr = None

Flag to request a rigid trim analysis (Real > 0.0 and < 1.0; Default = 1.0. A value of 0.0 provides a rigid trim analysis.

cross_reference(model: BDF) → None[source]
labels = None

The label identifying aerodynamic trim variables defined on an AESTAT or AESURF entry.

mach = None

Mach number. (Real > 0.0 and != 1.0)

q = None

Dynamic pressure. (Real > 0.0)

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

safe_cross_reference(model)[source]
sid = None

Trim set identification number. (Integer > 0)

type = 'TRIM'
uncross_reference() → None[source]

Removes cross-reference links

uxs = None

The magnitude of the aerodynamic extra point degree-of-freedom. (Real)

validate()[source]

card checking method that should be overwritten

verify_trim(suport, suport1, aestats, aeparms, aelinks, aesurf, xref=True)[source]

Magic function that makes TRIM cards not frustrating.

Warning

This probably gets AELINKs/AEPARMs/AESURFSs wrong.

The TRIM equality ndelta = (naestat + naesurf + naeparm) - (

  • (ntrim + ntrim_aesurf? + naelink + nsuport_dofs + nsuport1_dofs)

ndelta = 0 ntrim_aesurf is not included, but it might exist…

Steps to a TRIM analysis 1. Define the number of independent control surfaces (naesurf)

Make an AESURF for each. Dual link the AESURFs if you can to avoid needing an AELINK (e.g., +roll is left aileron down, right aileron up). Horizontal Tail : name it DPITCH Vertical Tail : name it DYAW Aileron : name it DROLL

  1. Create AELINKs if necessary.

  2. Add the AESTAT variables. Include one for each DOF the aircraft can move in the frame of the model (e.g., half/full model).

    Half model (2.5g pullup, abrupt pitch):
    • 2d pitch/plunge, 1 control : URDD3, URDD5, PITCH, ANGLEA

    Full model (2.5g pullup, abrupt pitch):
    • 3d pitch/plunge, 3 control : URDD3, URDD5, PITCH, ANGLEA, YAW (???)

  3. Add the TRIM card to lock the variables that could theoretically move in the plane of the analysis that are known.

    Half model:
    2.5g pulluplock URDD3=2.5, URDD5=0, PITCH=0

    solve for ANGLEA, DPITCH use DPITCH

    abrupt pitchlock URDD3=1.0, URDD5=0, ANGLEA=5

    solve for PITCH, DPITCH use DPITCH

    Full model:
    2.5g pulluplock URDD3=2.5, URDD4=0, URDD5=0, PITCH=0, YAW=0,

    lock SIDES=0, ROLL=0 solve for ANGLEA, DPITCH use DPITCH, DYAW, DROLL TODO: probably wrong

    30 degree yawlock URDD3=1.0, URDD4=0, ANGLEA=5, PITCH=0, YAW=30,

    lock DPITCH=0, ROLL=0 solve for SIDES, URDD5 use DPITCH, DYAW, DROLL TODO: probably wrong

  4. Note that we could have simplified our full model AESTAT/TRIM cards (they can be the same as for a half model), but we’d like to be able to do multiple load cases in the same deck.

  5. Add some SUPORT/SUPORT1 DOFs to ignore non-relevant motion in certain DOFs (e.g., z-motion). Add enough to satisfy the TRIM equality.

Doesn’t Consider
  • AELINK

  • AEPARM

  • AESURFS

Default AESTATs

ANGLEA YAW SIDES

ur (R2) ur (R3) ur (R3)

Angle of Attack Yaw Rate Angle of Sideslip

ROLL PITCH

ůr (R1) ůr (R2)

Roll Rate Pitch Rate

URDD1 URDD2 URDD3 URDD4 URDD5 URDD6

ür (T1) ür (T2) ür (T3) ür (R1) ür (R2) ür (R3)

Longitudinal (See Remark 3) Lateral Vertical Roll Pitch Yaw

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

Writes the card with the specified width and precision

Parameters
sizeint (default=8)

size of the field; {8, 16}

is_doublebool (default=False)

is this card double precision

Returns
msgstr

the string representation of the card

class pyNastran.bdf.cards.aero.static_loads.TRIM2(sid, mach, q, labels, uxs, aeqr=1.0, comment='')[source]

Bases: pyNastran.bdf.cards.aero.static_loads.TRIM

Defines the state of the aerodynamic extra points for a trim analysis. All undefined extra points will be set to zero.

1

2

3

4

5

6

7

8

9

TRIM2

ID

MACH

Q

IS_RIGID

LABEL1

UX1

LABEL2

UX2

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

Parameters
sidint

the trim id; referenced by the Case Control TRIM field

machfloat

the mach number

qfloat

dynamic pressure

labelsList[str]

names of the fixed variables

uxsList[float]

values corresponding to labels

aeqrfloat

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

commentstr; default=’’

a comment for the card

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

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

Parameters
cardBDFCard()

a BDFCard object

commentstr; default=’’

a comment for the card

raw_fields()[source]

Gets the fields in their unmodified form

Returns
fieldslist[varies]

the fields that define the card

repr_fields()[source]

Gets the fields in their simplified form

Returns
fieldsList[varies]

the fields that define the card

type = 'TRIM2'