cape.dkit.dbfm: Specialized force & moment DataKits¶
This module provides customizations of cape.dkit.rdb that are
especially useful for launch vehicle force & moment databases. The
force & moment coefficient names follow common missile naming
conventions:
Name
Symbol
Description
CA
\(C_A\)
Axial force
CY
\(C_Y\)
Side force
CN
\(C_N\)
Normal force
CLL
\(C_\ell\)
Rolling moment
CLM
\(C_m\)
Pitching moment
CLN
\(C_n\)
Yawing moment
- class cape.dkit.dbfm.DBFM(fname=None, **kw)¶
Database class for launch vehicle force & moment
- Call:
>>> db = dbfm.DBFM(fname=None, **kw)
- Inputs:
- fname: {
None} |str File name; extension is used to guess data format
- csv: {
None} |str Explicit file name for
CSVFileread- textdata: {
None} |str Explicit file name for
TextDataFile- simplecsv: {
None} |str Explicit file name for
CSVSimple- xls: {
None} |str File name for
XLSFile- mat: {
None} |str File name for
MATFile
- fname: {
- Outputs:
- db:
cape.dkit.dbfm.DBFM LV force & moment database
- db:
- Versions:
2020-03-20
@ddalle: First version
- create_fm_combo(comps, comp=None, **kw)¶
Calculate and save combined F & M on several components
- Call:
>>> fm = db.create_fm_combo(comps, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with analysis tools
- comps:
list[str] List of components to combine
- comp: {
None} |str Optional name of output assembled component
- Lref: {
1.0} |float Reference length
- xMRP: {
0.0} |float Moment reference point x-coordinate
- yMRP: {
0.0} |float Moment reference point y-coordinate
- zMRP: {
0.0} |float Moment reference point z-coordinate
- CompFMCols:
dict[dict] Names for CA, CY, etc. for each comp (defaults to
"<comp>.CA", etc.)- CompX:
dict[float] Force application point for each comp
- CompY:
dict[float] Force application point for each comp
- Compz:
dict[float] Force application point for each comp
- FMCols:
dict[str] Names of force & moment columns for output
- mask: {
None} |np.ndarray Mask or indices of which cases to include in POD calculation
- method: {
"trapz"} |"left"| callable Integration method used to integrate columns
- db:
- Outputs:
- fm:
dict[np.ndarray] Integrated force/moment for each coefficient
- fm[coeff]:
np.ndarray Combined coeff for each coeff
- fm:
- Versions:
2020-06-19
@ddalle: First version
- create_target_deltafm(db2, **kw)¶
Evaluate a target force and moment database
- Call:
>>> dfm = db.create_target_fm(db2, mask, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with force & moment responses
- db2:
cape.dkit.dbfm.DBFM Database with force & moment responses
- mask: {
None} |np.ndarray Mask of
boolor indices of which cases in db to evaluate; conditions in db used to evaluate db2- DeltaCols: {
{}} |dict[str] Names of columns to save deltas as; default takes form of
"CA.delta", etc.- SourceCols: {
{}} |dict[str] Columns in db to compare to target
- TargetCols: {
{}} |dict[str] Name of db2 col for CA, CY, …, CLN
- Translators: {
{}} |dict[str] Alternate names of response arg columns; e.g. if
Translators["MACH"] == "mach", that meansdb2["MACH"]is analogous todb["mach"]
- db:
- Outputs:
- dfm:
dict[np.ndarray] Differences between evaluated TargetCols in db2 minus SourceCols looked up from db
- dfm:
- Versions:
2020-06-16
@ddalle: First version
- create_target_fm(db2, mask=None, **kw)¶
Evaluate and save a target force and moment database
- Call:
>>> fm = db.create_target_fm(db2, mask, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with force & moment responses
- db2:
cape.dkit.dbfm.DBFM Database with force & moment responses
- mask: {
None} |np.ndarray Mask of
boolor indices of which cases in db to evaluate; conditions in db used to evaluate db2- TargetCols: {
{}} |dict[str] Name of db2 col for CA, CY, …, CLN
- TargetSaveCols: {
{}} |dict[str] Names to use when saving evaluated forces; default is
"CA.target", etc.- Translators: {
{}} |dict[str] Alternate names of response arg columns; e.g. if
Translators["MACH"] == "mach", that meansdb2["MACH"]is analogous todb["mach"]
- db:
- Outputs:
- fm:
dict[np.ndarray] Evaluated force & moment coefficients from db2 at conditions described by db and I
- fm:
- Versions:
2020-06-15
@ddalle: First version
- genr8_fm_combo(comps, **kw)¶
Calculate combined force & moment on several components
- Call:
>>> fm = db.genr8_fm_combo(comps, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with analysis tools
- comps:
list[str] List of components to combine
- Lref: {
1.0} |float Reference length
- xMRP: {
0.0} |float Moment reference point x-coordinate
- yMRP: {
0.0} |float Moment reference point y-coordinate
- zMRP: {
0.0} |float Moment reference point z-coordinate
- CompFMCols:
dict[dict] Names for CA, CY, etc. for each comp (defaults to
"<comp>.CA", etc.)- CompX:
dict[float] Force application point for each comp
- CompY:
dict[float] Force application point for each comp
- Compz:
dict[float] Force application point for each comp
- mask: {
None} |np.ndarray Mask or indices of which cases to include in POD calculation
- method: {
"trapz"} |"left"| callable Integration method used to integrate columns
- db:
- Outputs:
- fm:
dict[np.ndarray] Integrated force/moment for each coefficient
- fm[coeff]:
np.ndarray Combined coeff for each coeff
- fm:
- Versions:
2020-06-19
@ddalle: First version
- genr8_target_deltafm(db2, **kw)¶
Evaluate a target force and moment database
- Call:
>>> dfm = db.genr8_target_fm(db2, mask, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with force & moment responses
- db2:
cape.dkit.dbfm.DBFM Database with force & moment responses
- mask: {
None} |np.ndarray Mask of
boolor indices of which cases in db to evaluate; conditions in db used to evaluate db2- SourceCols: {
{}} |dict[str] Columns in db to compare to target
- TargetCols: {
{}} |dict[str] Name of db2 col for CA, CY, …, CLN
- Translators: {
{}} |dict[str] Alternate names of response arg columns; e.g. if
Translators["MACH"] == "mach", that meansdb2["MACH"]is analogous todb["mach"]
- db:
- Outputs:
- dfm:
dict[np.ndarray] Differences between evaluated TargetCols in db2 minus SourceCols looked up from db
- dfm:
- Versions:
2020-06-16
@ddalle: First version
- genr8_target_fm(db2, mask=None, **kw)¶
Evaluate a target force and moment database
- Call:
>>> fm = db.genr8_target_fm(db2, mask, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with force & moment responses
- db2:
cape.dkit.dbfm.DBFM Database with force & moment responses
- mask: {
None} |np.ndarray Mask of
boolor indices of which cases in db to evaluate; conditions in db used to evaluate db2- TargetCols: {
{}} |dict[str] Name of db2 col for CA, CY, …, CLN
- Translators: {
{}} |dict[str] Alternate names of response arg columns; e.g. if
Translators["MACH"] == "mach", that meansdb2["MACH"]is analogous todb["mach"]
- db:
- Outputs:
- fm:
dict[np.ndarray] Evaluated force & moment coefficients from db2 at conditions described by db and I
- fm:
- Versions:
2020-06-15
@ddalle: First version
- make_CLMX()¶
Build and save evaluators for CLMX cols
- Call:
>>> db.make_CLMX()
- Inputs:
- db:
cape.dkit.dbfm.DBFM LV force & moment database
- db:
- Versions:
2020-03-26
@ddalle: First version
- make_CLNX()¶
Build and save evaluators for CLNX cols
- Call:
>>> db.make_CLNX()
- Inputs:
- db:
cape.dkit.dbfm.DBFM LV force & moment database
- db:
- Versions:
2020-03-26
@ddalle: First version
- make_UCLMX()¶
Build and save evaluators for UCLMX cols
- Call:
>>> db.make_UCLMX()
- Inputs:
- db:
cape.dkit.dbfm.DBFM LV force & moment database
- db:
- Versions:
2020-05-04
@ddalle: First version
- make_UCLNX()¶
Build and save evaluators for UCLNX cols
- Call:
>>> db.make_UCLNX()
- Inputs:
- db:
cape.dkit.dbfm.DBFM LV force & moment database
- db:
- Versions:
2020-05-04
@ddalle: First version
- make_fm_combo(comps, comp=None, **kw)¶
Get [and calculate] combined F & M on several components
- Call:
>>> fm = db.make_fm_combo(comps, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with analysis tools
- comps:
list[str] List of components to combine
- comp: {
None} |str Optional name of output assembled component
- Lref: {
1.0} |float Reference length
- xMRP: {
0.0} |float Moment reference point x-coordinate
- yMRP: {
0.0} |float Moment reference point y-coordinate
- zMRP: {
0.0} |float Moment reference point z-coordinate
- CompFMCols:
dict[dict] Names for CA, CY, etc. for each comp (defaults to
"<comp>.CA", etc.)- CompX:
dict[float] Force application point for each comp
- CompY:
dict[float] Force application point for each comp
- Compz:
dict[float] Force application point for each comp
- FMCols:
dict[str] Names of force & moment columns for output
- mask: {
None} |np.ndarray Mask or indices of which cases to include in POD calculation
- method: {
"trapz"} |"left"| callable Integration method used to integrate columns
- db:
- Outputs:
- fm:
dict[np.ndarray] Integrated force/moment for each coefficient
- fm[coeff]:
np.ndarray Combined coeff for each coeff
- fm:
- Versions:
2020-06-19
@ddalle: First version
- make_target_deltafm(db2, **kw)¶
Evaluate a target force and moment database
- Call:
>>> dfm = db.make_target_fm(db2, mask, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with force & moment responses
- db2:
cape.dkit.dbfm.DBFM Database with force & moment responses
- mask: {
None} |np.ndarray Mask of
boolor indices of which cases in db to evaluate; conditions in db used to evaluate db2- DeltaCols: {
{}} |dict[str] Names of columns to save deltas as; default takes form of
"CA.delta", etc.- SourceCols: {
{}} |dict[str] Columns in db to compare to target
- TargetCols: {
{}} |dict[str] Name of db2 col for CA, CY, …, CLN
- Translators: {
{}} |dict[str] Alternate names of response arg columns; e.g. if
Translators["MACH"] == "mach", that meansdb2["MACH"]is analogous todb["mach"]
- db:
- Outputs:
- dfm:
dict[np.ndarray] Differences between evaluated TargetCols in db2 minus SourceCols looked up from db
- dfm:
- Versions:
2020-06-16
@ddalle: First version
- make_target_fm(db2, mask=None, **kw)¶
Evaluate and save a target force and moment database
- Call:
>>> fm = db.make_target_fm(db2, mask, **kw)
- Inputs:
- db:
cape.dkit.dbfm.DBFM Database with force & moment responses
- db2:
cape.dkit.dbfm.DBFM Database with force & moment responses
- mask: {
None} |np.ndarray Mask of
boolor indices of which cases in db to evaluate; conditions in db used to evaluate db2- TargetCols: {
{}} |dict[str] Name of db2 col for CA, CY, …, CLN
- TargetSaveCols: {
{}} |dict[str] Names to use when saving evaluated forces; default is
"CA.target", etc.- Translators: {
{}} |dict[str] Alternate names of response arg columns; e.g. if
Translators["MACH"] == "mach", that meansdb2["MACH"]is analogous todb["mach"]
- db:
- Outputs:
- fm:
dict[np.ndarray] Evaluated force & moment coefficients from db2 at conditions described by db and I
- fm:
- Versions:
2020-06-15
@ddalle: First version
- cape.dkit.dbfm.convert_alpha(*a, **kw)¶
Determine angle of attack from kwargs
All keyword args are listed by
"Tag". For example, instead of alpha, the user may also use ALPHA, aoa, or any col in AeroDataKit._tagcols[“alpha”].- Call:
>>> alpha = convert_alpha(*a, **kw)
- Inputs:
- a:
tuple Positional args; discarded here
- alpha:
float|np.ndarray Direct alias from _alph_cols
- aoap:
float|np.ndarray Total angle of attack [deg]
- phip: {
0.0} |float|np.ndarray Vertical-to-wind roll angle [deg]
- aoav:
float|np.ndarray Missile-axis angle of attack [deg]
- phiv: {
0.0} |float|np.ndarray Missile-axis roll angle [deg]
- a:
- Outputs:
- alpha:
None|float|np.ndarray Angle of attack [deg]
- alpha:
- Versions:
2019-02-28
@ddalle: First version2020-03-19
@ddalle: UsingAeroDataKit
- cape.dkit.dbfm.convert_aoap(*a, **kw)¶
Determine total angle of attack from kwargs
All keyword args are listed by
"Tag". For example, instead of alpha, the user may also use ALPHA, aoa, or any col in AeroDataKit._tagcols[“alpha”].- Call:
>>> aoap = convert_aoap(*a, **kw)
- Inputs:
- a:
tuple Positional args; discarded here
- aoap:
float|np.ndarray Total angle of attack [deg]
- alpha:
float|np.ndarray Angle of attack [deg]
- beta:
float|np.ndarray Direct alias from _alph_cols
- aoav:
float|np.ndarray Missile-axis angle of attack [deg]
- phiv: {
0.0} |float|np.ndarray Missile-axis roll angle [deg]
- a:
- Outputs:
- aoap:
float|np.ndarray Total angle of attack [deg]
- aoap:
- Versions:
2019-02-28
@ddalle: First version2020-03-19
@ddalle: UsingAeroDataKit
- cape.dkit.dbfm.convert_beta(*a, **kw)¶
Determine sideslip angle from kwargs
All keyword args are listed by
"Tag". For example, instead of alpha, the user may also use ALPHA, aoa, or any col in AeroDataKit._tagcols[“alpha”].- Call:
>>> beta = convert_beta(*a, **kw)
- Inputs:
- a:
tuple Positional args; discarded here
- beta:
float|np.ndarray Direct alias from _alph_cols
- aoap:
float|np.ndarray Total angle of attack [deg]
- phip: {
0.0} |float|np.ndarray Vertical-to-wind roll angle [deg]
- aoav:
float|np.ndarray Missile-axis angle of attack [deg]
- phiv: {
0.0} |float|np.ndarray Missile-axis roll angle [deg]
- a:
- Outputs:
- beta:
float|np.ndarray Sideslip angle [deg]
- beta:
- Versions:
2019-02-28
@ddalle: First version2020-03-19
@ddalle: UsingAeroDataKit
- cape.dkit.dbfm.convert_phip(*a, **kw)¶
Determine body-to-wind roll angle from kwargs
All keyword args are listed by
"Tag". For example, instead of alpha, the user may also use ALPHA, aoa, or any col in AeroDataKit._tagcols[“alpha”].- Call:
>>> phip = convert_phip(*a, **kw)
- Inputs:
- a:
tuple Positional args; discarded here
- phip: {
0.0} |float|np.ndarray Vertical-to-wind roll angle [deg]
- alpha:
float|np.ndarray Angle of attack [deg]
- beta:
float|np.ndarray Direct alias from _alph_cols
- aoav:
float|np.ndarray Missile-axis angle of attack [deg]
- phiv: {
0.0} |float|np.ndarray Missile-axis roll angle [deg]
- a:
- Outputs:
- phip: {
0.0} |float|np.ndarray Vertical-to-wind roll angle [deg]
- phip: {
- Versions:
2019-02-28
@ddalle: First version2020-03-19
@ddalle: UsingAeroDataKit
- cape.dkit.dbfm.estimate_xCLM(self, DCLM, DCN)¶
Estimate reference x for UCLM calculations
- Call:
>>> xCLM = estimate_xCLM(self, DCLM, DCN)
- Inputs:
- self:
DBFM Force & moment database with self.xMRP and self.Lref
- DCLM:
np.ndarray[float] Deltas between two databases’ CLM values
- DCN:
np.ndarray[float] Deltas between two databases’ CN values
- self:
- Outputs:
- xCLM:
float Reference x that minimizes UCLM
- xCLM:
- Versions:
2019-02-20
@ddalle: First version2020-05-04
@ddalle: Copied fromdkit.fm
- cape.dkit.dbfm.estimate_xCLN(self, DCLN, DCY)¶
Estimate reference x for UCLN calculations
- Call:
>>> xCLN = estimate_xCLN(self, DCLN, DCY)
- Inputs:
- self:
DBFM Force & moment database with self.xMRP and self.Lref
- DCLN:
np.ndarray[float] Deltas between two databases’ CLN values
- DCY:
np.ndarray[float] Deltas between two databases’ CY values
- self:
- Outputs:
- xCLN:
float Reference x that minimizes UCLN
- xCLN:
- Versions:
2019-02-20
@ddalle: First version2020-05-04
@ddalle: Copied fromdkit.fm
- cape.dkit.dbfm.eval_CLMX(db, col1, col2, *a, **kw)¶
Evaluate CLM about arbitrary x moment reference point
- Call:
>>> CLMX = eval_CLMX(db, col1, col2, *a, **kw)
- Inputs:
- Outputs:
- CLMX:
float|np.ndarray Pitching moment about arbitrary xMRP
- CLMX:
- Versions:
2019-02-28
@ddalle: First version2020-03-20
@ddalle:DataKitversion2020-03-25
@ddalle: Added col1, col2 args
- cape.dkit.dbfm.eval_CLNX(db, col1, col2, *a, **kw)¶
Evaluate CLN about arbitrary x moment reference point
- Call:
>>> CLNX = eval_CLNX(db, col1, col2, *a, **kw)
- Inputs:
- Outputs:
- CLNX:
float|np.ndarray Pitching moment about arbitrary xMRP
- CLNX:
- Versions:
2019-02-28
@ddalle: First version2020-03-20
@ddalle:DataKitversion
- cape.dkit.dbfm.eval_UCLMX(db, col1, col2, col3, *a, **kw)¶
Evaluate UCLM about arbitrary x moment reference point
- Call:
>>> UCLMX = eval_UCLMX(db, col1, col2, col3, *a, **kw)
- Inputs:
- db:
DBFM Force & moment data kit
- col1:
"UCLM"|str Name of pitching moment uncertainty column
- col2:
"UCN"|str Name of normal force uncertainty column
- col3:
"xCLM"|str Name of UCLM reference MRP column
- a:
tuple Arguments to call
FM(col1, *a)[plus xMRP]- kw:
dict Keywords used as alternate definition of a
- db:
- Outputs:
- UCLMX:
float|np.ndarray Pitching moment uncertainty about arbitrary xMRP
- UCLMX:
- Versions:
2019-03-13
@ddalle: First version2020-03-20
@ddalle:DataKitversion2020-03-26
@ddalle: Added col args
- cape.dkit.dbfm.eval_UCLNX(db, col1, col2, col3, *a, **kw)¶
Evaluate UCLN about arbitrary x moment reference point
- Call:
>>> UCLNX = eval_UCLNX(db, col1, col2, col3, *a, **kw)
- Inputs:
- Outputs:
- UCLNX:
float|np.ndarray Pitching moment uncertainty about arbitrary xMRP
- UCLNX:
- Versions:
2019-03-13
@ddalle: First version2020-03-20
@ddalle:DataKitversion
- cape.dkit.dbfm.genr8_fCLMX(col1='CLM', col2='CLN')¶
Generate an evaluator for CLMX with specified cols
- Call:
>>> func = genr8_fCLMX(col1="CLM", col2="CN")
- Inputs:
- Outputs:
- func:
function Function to evaluate col1 about arbitrary xMRP
- func:
- Output Call:
>>> CLMX = func(db, *a, **kw)
- Output Args:
- db:
DBFM Force and moment data kit
- a:
tuple[float|np.ndarray] Args to col1 and col2, plus optional xMRP
- kw:
dict Keyword args to col1 and col2, plus optional xMRP
- db:
- Versions:
2020-03-26
@ddalle: First version
- cape.dkit.dbfm.genr8_fCLNX(col1='CLN', col2='CY')¶
Generate an evaluator for CLNX with specified cols
- Call:
>>> func = genr8_fCLNX(col1="CLN", col2="CN")
- Inputs:
- Outputs:
- func:
function Function to evaluate col1 about arbitrary xMRP
- func:
- Output Call:
>>> CLNX = func(db, *a, **kw)
- Output Args:
- db:
DBFM Force and moment data kit
- a:
tuple[float|np.ndarray] Args to col1 and col2, plus optional xMRP
- kw:
dict Keyword args to col1 and col2, plus optional xMRP
- db:
- Versions:
2020-03-26
@ddalle: First version
- cape.dkit.dbfm.genr8_fUCLMX(col1='UCLM', col2='UCN', col3='xCLM')¶
Generate an evaluator for UCLMX with specified cols
- Call:
>>> func = genr8_fUCLMX(col1="UCLM", col2="UCN", col3="xCLM")
- Inputs:
- Outputs:
- func:
function Function to evaluate col1 about arbitrary xMRP
- func:
- Output Call:
>>> UCLMX = func(db, *a, **kw)
- Output Args:
- db:
DBFM Force and moment data kit
- a:
tuple[float|np.ndarray] Args to col1, plus optional xMRP
- kw:
dict Keyword args to col1, plus optional xMRP
- db:
- Versions:
2020-03-26
@ddalle: First version
- cape.dkit.dbfm.genr8_fUCLNX(col1='UCLN', col2='UCY', col3='xCLN')¶
Generate an evaluator for UCLNX with specified cols
- Call:
>>> func = genr8_fUCLNX(col1="UCLN", col2="UCY", col3="xCLN")
- Inputs:
- Outputs:
- func:
function Function to evaluate col1 about arbitrary xMRP
- func:
- Output Call:
>>> UCLNX = func(db, *a, **kw)
- Output Args:
- db:
DBFM Force and moment data kit
- a:
tuple[float|np.ndarray] Args to col1, plus optional xMRP
- kw:
dict Keyword args to col1, plus optional xMRP
- db:
- Versions:
2020-03-26
@ddalle: First version