48 libmesh_assert(!
_roots.size());
62 &den = eig_sol.
betas();
65 unsigned int nvals = (int)
_Bmat.rows();
68 for (
unsigned int i=0; i<nvals; i++) {
91 std::vector<MAST::FlutterRootBase*>::const_iterator
95 for ( ; it != end; it++) {
98 if ((**it).root.imag() >= 0. &&
99 (**it).root.real() >= tol)
123 std::vector<MAST::FlutterRootBase*>::const_iterator
127 for ( ; it != end; it++) {
129 if ((**it).root.imag() >= 0.) {
134 else if ((**it).root.real() >= max_g->root.real())
142 if ((**it).root.real() >= tol &&
147 else if ( (**it).V <= unstable->
V )
168 const unsigned int nvals = this->
n_roots();
169 libmesh_assert_equal_to(nvals, sol.
n_roots());
173 for (
unsigned int i=0; i<nvals-1; i++)
178 unsigned int max_val_root = nvals-1;
179 for (
unsigned int j=i; j<nvals; j++) {
192 if (abs(val) > max_val) {
199 if (i != max_val_root)
213 libmesh_assert(this->
n_roots() > 0);
215 const unsigned int nvals = this->
n_roots();
216 unsigned int n_participation_vals =
218 libmesh_assert(nvals);
221 output <<
" Flutter Root " << std::endl;
225 << std::setw(5) <<
"#" 226 << std::setw(15) <<
"V_ref" 227 << std::setw(15) <<
"Re" 228 << std::setw(15) <<
"Im" 229 << std::setw(3) <<
" | ";
232 for (
unsigned int i=0; i<n_participation_vals; i++)
234 << std::setw(2) <<
" " 235 << std::setw(5) <<
"Mode " 237 << std::setw(2) <<
" ";
240 for (
unsigned int i=0; i<nvals; i++)
242 << std::setw(10) <<
"| " 243 << std::setw(5) <<
"Mode " 245 << std::setw(10) <<
" |";
248 for (
unsigned int i=0; i<nvals; i++)
255 << std::setw(15) << root.
V 256 << std::setw(15) << std::real(root.
root)
257 << std::setw(15) << std::imag(root.
root)
258 << std::setw(3) <<
" | ";
261 for (
unsigned int j=0; j<n_participation_vals; j++)
264 << std::setw(2) <<
" ";
267 for (
unsigned int j=0; j<nvals; j++)
270 << std::setw(2) <<
"| " 272 << std::setw(2) <<
" " 274 << std::setw(2) <<
" |";
const MAST::FlutterRootBase & get_root(const unsigned int i) const
ComplexVectorX eig_vec_left
std::vector< MAST::FlutterRootBase * > _roots
virtual void print(std::ostream &output)
prints the data and modes from this solution
unsigned int n_unstable_roots_in_upper_complex_half(Real tol) const
number of unstable roots in this solution.
void init(const Real v_ref_val, const Complex num, const Complex den, const RealMatrixX &Bmat, const ComplexVectorX &evec_right, const ComplexVectorX &evec_left)
initializes the data
Matrix< Complex, Dynamic, 1 > ComplexVectorX
const RealVectorX & betas() const
TimeDomainFlutterSolution()
virtual ~TimeDomainFlutterSolution()
delete the flutter root objects
const ComplexMatrixX & right_eigenvectors() const
void init(const MAST::TimeDomainFlutterSolver &solver, const Real v_ref, const MAST::LAPACK_DGGEV &eig_sol)
initializes the root
unsigned int n_roots() const
number of roots in this solution
const RealMatrixX & B() const
const ComplexVectorX & alphas() const
const ComplexMatrixX & left_eigenvectors() const
Matrix< Complex, Dynamic, Dynamic > ComplexMatrixX
MAST::FlutterRootBase * get_critical_root(Real tol)
Matrix< Real, Dynamic, 1 > RealVectorX
RealMatrixX _Amat
Matrix used for scaling of eigenvectors, and sorting of roots.
const RealMatrixX & A() const
Real _ref_val
Reference value of the sweeping parameter for which this solution was obtained.
virtual void sort(const MAST::FlutterSolutionBase &sol)
sort this root with respect to the given solution from a previous eigen solution. ...
This implements a solver for a single parameter instability problem, for example a flutter solver whe...
RealVectorX modal_participation
ComplexVectorX eig_vec_right
right and left eigenvevtors