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'