LCOV - code coverage report
Current view: top level - src/vectorpostprocessors - Eigenvalues.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 27 29 93.1 %
Date: 2025-07-17 01:28:37 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       15301 : Eigenvalues::validParams()
      23             : {
      24       15301 :   InputParameters params = GeneralVectorPostprocessor::validParams();
      25       15301 :   params.addClassDescription("Returns the Eigen values from the nonlinear Eigen system.");
      26       15301 :   params.addParam<bool>("inverse_eigenvalue", false, "True to evaluate the inverse of eigenvalues");
      27       15301 :   return params;
      28           0 : }
      29             : 
      30         516 : Eigenvalues::Eigenvalues(const InputParameters & parameters)
      31             :   : GeneralVectorPostprocessor(parameters),
      32         516 :     _inverse(getParam<bool>("inverse_eigenvalue")),
      33         516 :     _eigen_values_real(declareVector("eigen_values_real")),
      34         516 :     _eigen_values_imag(declareVector("eigen_values_imag")),
      35        1032 :     _nl_eigen(dynamic_cast<const NonlinearEigenSystem *>(&_sys))
      36             : {
      37         516 :   if (!_nl_eigen)
      38           0 :     mooseError("Given system is not a NonlinearEigenSystem \n");
      39         516 : }
      40             : 
      41             : void
      42         673 : Eigenvalues::initialize()
      43             : {
      44         673 :   _eigen_values_real.clear();
      45         673 :   _eigen_values_imag.clear();
      46         673 : }
      47             : 
      48             : void
      49         673 : Eigenvalues::execute()
      50             : {
      51             : #ifdef LIBMESH_HAVE_SLEPC
      52         673 :   const std::vector<std::pair<Real, Real>> & eigenvalues = _nl_eigen->getAllConvergedEigenvalues();
      53         673 :   unsigned int n_converged_eigenvalues = eigenvalues.size();
      54         673 :   _eigen_values_real.resize(n_converged_eigenvalues);
      55         673 :   _eigen_values_imag.resize(n_converged_eigenvalues);
      56        1401 :   for (unsigned int n = 0; n < n_converged_eigenvalues; n++)
      57             :   {
      58         728 :     std::complex<Real> e(eigenvalues[n].first, eigenvalues[n].second);
      59         728 :     std::complex<Real> inv = _inverse ? 1. / e : e;
      60         728 :     _eigen_values_real[n] = inv.real();
      61         728 :     _eigen_values_imag[n] = inv.imag();
      62             :   }
      63             : #else
      64             :   _eigen_values_real.clear();
      65             :   _eigen_values_imag.clear();
      66             : #endif
      67         673 : }

Generated by: LCOV version 1.14