Skip to content

Commit

Permalink
Provide switch for tracking criterion
Browse files Browse the repository at this point in the history
  • Loading branch information
ArneVoss committed Dec 19, 2024
1 parent a3e1222 commit 5b68cfe
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
9 changes: 6 additions & 3 deletions doc/jcl_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,10 +335,13 @@ def __init__(self):
'support': [0, 1, 2, 3, 4, 5],
# True or False, enables flutter check with k, ke or pk method
'flutter': False,
# flutter parameters for k and ke method
# Flutter parameters for k and ke method
'flutter_para': {'method': 'k', 'k_red': np.linspace(2.0, 0.001, 1000)},
# flutter parameters for pk method
# 'flutter_para': {'method': 'pk', 'Vtas': np.linspace(100.0, 500.0, 100)},
# Flutter parameters for pk method
# There are two implementations of the PK method: 'pk_schwochow', 'pk_rodden'
# Available mode tracking algortihms: 'MAC', 'MACXP', 'MAC*PCC' (recommended)
# 'flutter_para': {'method': 'pk', 'Vtas': np.linspace(100.0, 500.0, 100),
# 'tracking': 'MAC*PCC'},
},
]
# End
18 changes: 13 additions & 5 deletions loadskernel/equations/frequency_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,11 +628,19 @@ def eval_equations(self):

def calc_eigenvalues(self, A, eigenvalues_old, eigenvectors_old):
eigenvalue, eigenvector = linalg.eig(A)
# To match the modes with the previous step, use a combination of modal assurance criterion and pole correlation.
# This improves the handling of complex conjugate poles.
MAC = fem_helper.calc_MAC(eigenvectors_old, eigenvector)
PCC = fem_helper.calc_PCC(eigenvalues_old, eigenvalue)
idx_pos = self.get_best_match(MAC * PCC)
# To match the modes with the previous step, use a correlation cirterion as specified in the JCL.
# The MAC matrix is used as default.
if 'tracking' not in self.simcase['flutter_para']:
MAC = fem_helper.calc_MAC(eigenvectors_old, eigenvector)
elif self.simcase['flutter_para']['tracking'] == 'MAC':
MAC = fem_helper.calc_MAC(eigenvectors_old, eigenvector)
elif self.simcase['flutter_para']['tracking'] == 'MACXP':
MAC = fem_helper.calc_MACXP(eigenvectors_old, eigenvector)
elif self.simcase['flutter_para']['tracking'] == 'MAC*PCC':
# This is a combination of modal assurance criterion and pole correlation and improves the handling of complex
# conjugate poles.
MAC = fem_helper.calc_MAC(eigenvectors_old, eigenvector) * fem_helper.calc_PCC(eigenvalues_old, eigenvalue)
idx_pos = self.get_best_match(MAC)
eigenvalues = eigenvalue[idx_pos]
eigenvectors = eigenvector[:, idx_pos]
return eigenvalues, eigenvectors
Expand Down

0 comments on commit 5b68cfe

Please sign in to comment.