LCOV - code coverage report
Current view: top level - src/reporters - ParsedVectorReporter.C (source / functions) Hit Total Coverage
Test: idaholab/moose optimization: #31405 (292dce) with base fef103 Lines: 31 35 88.6 %
Date: 2025-09-04 07:54:57 Functions: 3 3 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 "ParsedVectorReporter.h"
      11             : 
      12             : registerMooseObject("OptimizationApp", ParsedVectorReporter);
      13             : 
      14             : InputParameters
      15         134 : ParsedVectorReporter::validParams()
      16             : {
      17         134 :   InputParameters params = ParsedReporterBase::validParams();
      18         134 :   params.addClassDescription("Apply parsed functions to vector entries held in reporters.");
      19         268 :   params.addRequiredParam<std::vector<ReporterName>>("reporter_names", "Reporter names ");
      20         134 :   return params;
      21           0 : }
      22             : 
      23          67 : ParsedVectorReporter::ParsedVectorReporter(const InputParameters & parameters)
      24             :   : ParsedReporterBase(parameters),
      25          67 :     _output_reporter(
      26         201 :         declareValueByName<std::vector<Real>>(getParam<std::string>("name"), REPORTER_MODE_ROOT))
      27             : {
      28             :   // get reporters to operate on
      29             :   const std::vector<ReporterName> reporter_names(
      30         201 :       getParam<std::vector<ReporterName>>("reporter_names"));
      31          67 :   if (reporter_names.size() != _reporter_symbols.size())
      32           0 :     paramError(
      33             :         "reporter_names",
      34             :         "reporter_names and reporter_symbols must be the same size:  Number of reporter_names=",
      35             :         reporter_names.size(),
      36             :         ";  Number of reporter_symbols=",
      37             :         _reporter_symbols.size());
      38             : 
      39          67 :   _reporter_data.resize(reporter_names.size());
      40         224 :   for (const auto rep_index : index_range(_reporter_data))
      41         157 :     _reporter_data[rep_index] =
      42         314 :         &getReporterValueByName<std::vector<Real>>(reporter_names[rep_index], REPORTER_MODE_ROOT);
      43          67 : }
      44             : 
      45             : void
      46         346 : ParsedVectorReporter::finalize()
      47             : {
      48             :   // check vector sizes of reporters
      49         346 :   const std::size_t entries(_reporter_data[0]->size());
      50        1052 :   for (const auto rep_index : index_range(_reporter_data))
      51         708 :     if (entries != _reporter_data[rep_index]->size())
      52             :     {
      53             :       const std::vector<ReporterName> reporter_names(
      54           4 :           getParam<std::vector<ReporterName>>("reporter_names"));
      55           4 :       mooseError("All vectors being operated on must be the same size.",
      56             :                  "\nsize of ",
      57           2 :                  reporter_names[0].getCombinedName(),
      58             :                  " = ",
      59             :                  entries,
      60             :                  "\nsize of ",
      61           2 :                  reporter_names[rep_index].getCombinedName(),
      62             :                  " = ",
      63           2 :                  _reporter_data[rep_index]->size());
      64           0 :     }
      65             : 
      66         344 :   _output_reporter.resize(entries, 0.0);
      67         716 :   for (const auto i : make_range(entries))
      68             :   {
      69        1158 :     for (const auto rep_index : index_range(_reporter_data))
      70         786 :       _func_params[rep_index] = _reporter_data[rep_index]->at(i);
      71             : 
      72         372 :     if (_use_t)
      73           0 :       _func_params[_reporter_data.size()] = _t;
      74             : 
      75         372 :     _output_reporter[i] = evaluate(_func_F);
      76             :   }
      77         344 : }

Generated by: LCOV version 1.14