20 #ifndef __mast__time_domain_flutter_solver_h__    21 #define __mast__time_domain_flutter_solver_h__    35     class TimeDomainFlutterSolution;
    77                         unsigned int                                n_V_divs,
    78                         std::vector<libMesh::NumericVector<Real>*>& basis);
   104         virtual std::pair<bool, MAST::FlutterRootBase*>
   106                        const unsigned int n_bisection_iters);
   115         virtual std::pair<bool, MAST::FlutterRootBase*>
   117                            const unsigned int n_bisection_iters);
   125         virtual std::pair<bool, MAST::FlutterRootBase*>
   127                                                         const unsigned int n_iters);
   144                               libMesh::NumericVector<Real>* dXdp = 
nullptr,
   145                               libMesh::NumericVector<Real>* dXdV = 
nullptr);
   177         virtual std::unique_ptr<MAST::TimeDomainFlutterSolution>
   186         virtual std::pair<bool, MAST::FlutterSolutionBase*>
   189                           const unsigned int root_num,
   191                           const unsigned int max_iters);
   209                                                  const libMesh::NumericVector<Real>& dXdp,
   256 #endif // __mast__time_domain_flutter_solver_h__ 
TimeDomainFlutterSolver()
defalut constructor 
virtual std::pair< bool, MAST::FlutterRootBase * > analyze_and_find_critical_root_without_tracking(const Real g_tol, const unsigned int n_iters)
This root starts with the lower velocity and increments the speed till a single unstable root is iden...
virtual void _identify_crossover_points()
identifies all cross-over and divergence points from analyzed roots 
MAST::Parameter * _velocity_param
Parameter that define the velocity. 
virtual std::pair< bool, MAST::FlutterSolutionBase * > _bisection_search(const std::pair< MAST::FlutterSolutionBase *, MAST::FlutterSolutionBase *> &ref_sol_range, const unsigned int root_num, const Real g_tol, const unsigned int max_iters)
bisection method search 
virtual void clear()
clears the solution and other data from this solver 
const MAST::FlutterRootBase & get_root(const unsigned int n) const
returns the n th root in terms of ascending velocity that is found by the solver 
virtual void calculate_sensitivity(MAST::FlutterRootBase &root, const MAST::FunctionBase &f, libMesh::NumericVector< Real > *dXdp=nullptr, libMesh::NumericVector< Real > *dXdV=nullptr)
Calculate the sensitivity of the flutter root with respect to the f parameter. 
virtual void print_crossover_points()
Prints the crossover points output. 
This is a scalar function whose value can be changed and one that can be used as a design variable in...
virtual unsigned int n_roots_found() const
finds the number of critical points already identified in the procedure. 
virtual std::unique_ptr< MAST::TimeDomainFlutterSolution > _analyze(const Real v_ref, const MAST::FlutterSolutionBase *prev_sol=nullptr)
performs an eigensolution at the specified reference value, and sort the roots based on the provided ...
std::multimap< Real, MAST::FlutterRootCrossoverBase * > _flutter_crossovers
the map of flutter crossover points versus average velocity of the two bounding roots ...
void _initialize_matrices(Real U_inf, RealMatrixX &A, RealMatrixX &B)
Assembles the reduced order system structural and aerodynmaic matrices for specified flight velocity ...
virtual void print_sorted_roots()
Prints the sorted roots to the output. 
Matrix< Real, Dynamic, Dynamic > RealMatrixX
virtual ~TimeDomainFlutterSolver()
void initialize(MAST::Parameter &velocity_param, Real V_lower, Real V_upper, unsigned int n_V_divs, std::vector< libMesh::NumericVector< Real > *> &basis)
initializes the data structres for a flutter solution. 
std::pair< Real, Real > _V_range
range of reference values within which to find flutter roots 
virtual void scan_for_roots()
Scans for flutter roots in the analyzed points, and identified the divergence (if k_red = 0...
virtual std::pair< bool, MAST::FlutterRootBase * > find_critical_root(const Real g_tol, const unsigned int n_bisection_iters)
This method checks if the flutter root corresponding to the lowest velocity crossover has been calcul...
This implements a solver for a single parameter instability problem, for example a flutter solver whe...
unsigned int _n_V_divs
number of division in the reference value range for initial scanning 
virtual void clear_solutions()
clears the solutions stored from a previous analysis. 
std::map< Real, MAST::FlutterSolutionBase * > _flutter_solutions
map of velocity sorted flutter solutions 
void _initialize_matrix_sensitivity_for_param(const MAST::FunctionBase &f, const libMesh::NumericVector< Real > &dXdp, Real U_inf, RealMatrixX &A, RealMatrixX &B)
Assembles the reduced order system structural and aerodynmaic matrices for specified flight velocity ...
virtual std::pair< bool, MAST::FlutterRootBase * > find_next_root(const Real g_tol, const unsigned int n_bisection_iters)
Looks through the list of flutter cross-over points and iteratively zooms in to find the cross-over p...