const std::pair<Real, Real> NonlinearEigenSystem::getNthConvergedEigenvalue(dof_id_type n) { unsigned int n_converged_eigenvalues = getNumConvergedEigenvalues(); if (n >= n_converged_eigenvalues) mooseError(n, " not in [0, ", n_converged_eigenvalues, ")"); return _transient_sys.get_eigenpair(n); }
void NonlinearEigenSystem::solve() { // Clear the iteration counters _current_l_its.clear(); _current_nl_its = 0; // Initialize the solution vector using a predictor and known values from nodal bcs setInitialSolution(); _time_integrator->solve(); _time_integrator->postSolve(); // store eigenvalues unsigned int n_converged_eigenvalues = getNumConvergedEigenvalues(); if (_n_eigen_pairs_required < n_converged_eigenvalues) n_converged_eigenvalues = _n_eigen_pairs_required; _eigen_values.resize(n_converged_eigenvalues); for (unsigned int n = 0; n < n_converged_eigenvalues; n++) _eigen_values[n] = getNthConvergedEigenvalue(n); }
void NonlinearEigenSystem::solve() { // Clear the iteration counters _current_l_its.clear(); _current_nl_its = 0; // Initialize the solution vector using a predictor and known values from nodal bcs setInitialSolution(); // In DEBUG mode, Libmesh will check the residual automatically. This may cause // an error because B does not need to assembly by default. #ifdef DEBUG if (_eigen_problem.isGeneralizedEigenvalueProblem()) sys().matrix_B->close(); #endif // Solve the transient problem if we have a time integrator; the // steady problem if not. if (_time_integrator) { _time_integrator->solve(); _time_integrator->postSolve(); } else system().solve(); // store eigenvalues unsigned int n_converged_eigenvalues = getNumConvergedEigenvalues(); _n_eigen_pairs_required = _eigen_problem.getNEigenPairsRequired(); if (_n_eigen_pairs_required < n_converged_eigenvalues) n_converged_eigenvalues = _n_eigen_pairs_required; _eigen_values.resize(n_converged_eigenvalues); for (unsigned int n = 0; n < n_converged_eigenvalues; n++) _eigen_values[n] = getNthConvergedEigenvalue(n); }