LCOV - code coverage report
Current view: top level - src/vectorpostprocessors - Eigenvalues.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: #32971 (54bef8) with base c6cf66 Lines: 27 29 93.1 %
Date: 2026-05-29 20:35:17 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       3             : //*
       4             : //* All rights reserved, see COPYRIGHT for full restrictions
       5             : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
       6             : //*
       7             : //* Licensed under LGPL 2.1, please see LICENSE for details
       8             : //* https://www.gnu.org/licenses/lgpl-2.1.html
       9             : 
      10             : #include "Eigenvalues.h"
      11             : 
      12             : // MOOSE includes
      13             : #include "NonlinearEigenSystem.h"
      14             : 
      15             : #include "libmesh/libmesh_config.h"
      16             : 
      17             : #include <complex>
      18             : 
      19             : registerMooseObject("MooseApp", Eigenvalues);
      20             : 
      21             : InputParameters
      22        4082 : Eigenvalues::validParams()
      23             : {
      24        4082 :   InputParameters params = GeneralVectorPostprocessor::validParams();
      25        8164 :   params.addClassDescription("Returns the Eigen values from the nonlinear Eigen system.");
      26       12246 :   params.addParam<bool>("inverse_eigenvalue", false, "True to evaluate the inverse of eigenvalues");
      27        4082 :   return params;
      28           0 : }
      29             : 
      30         509 : Eigenvalues::Eigenvalues(const InputParameters & parameters)
      31             :   : GeneralVectorPostprocessor(parameters),
      32         509 :     _inverse(getParam<bool>("inverse_eigenvalue")),
      33        1018 :     _eigen_values_real(declareVector("eigen_values_real")),
      34        1018 :     _eigen_values_imag(declareVector("eigen_values_imag")),
      35        1018 :     _nl_eigen(dynamic_cast<const NonlinearEigenSystem *>(&_sys))
      36             : {
      37         509 :   if (!_nl_eigen)
      38           0 :     mooseError("Given system is not a NonlinearEigenSystem \n");
      39         509 : }
      40             : 
      41             : void
      42         668 : Eigenvalues::initialize()
      43             : {
      44         668 :   _eigen_values_real.clear();
      45         668 :   _eigen_values_imag.clear();
      46         668 : }
      47             : 
      48             : void
      49         668 : Eigenvalues::execute()
      50             : {
      51             : #ifdef LIBMESH_HAVE_SLEPC
      52         668 :   const std::vector<std::pair<Real, Real>> & eigenvalues = _nl_eigen->getAllConvergedEigenvalues();
      53         668 :   unsigned int n_converged_eigenvalues = eigenvalues.size();
      54         668 :   _eigen_values_real.resize(n_converged_eigenvalues);
      55         668 :   _eigen_values_imag.resize(n_converged_eigenvalues);
      56        1391 :   for (unsigned int n = 0; n < n_converged_eigenvalues; n++)
      57             :   {
      58         723 :     std::complex<Real> e(eigenvalues[n].first, eigenvalues[n].second);
      59         723 :     std::complex<Real> inv = _inverse ? 1. / e : e;
      60         723 :     _eigen_values_real[n] = inv.real();
      61         723 :     _eigen_values_imag[n] = inv.imag();
      62             :   }
      63             : #else
      64             :   _eigen_values_real.clear();
      65             :   _eigen_values_imag.clear();
      66             : #endif
      67         668 : }

Generated by: LCOV version 1.14