LCOV - code coverage report
Current view: top level - src/reporters - RestartableDataReporter.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 65 66 98.5 %
Date: 2025-07-17 01:28:37 Functions: 7 7 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 "RestartableDataReporter.h"
      11             : 
      12             : #include "MooseUtils.h"
      13             : 
      14             : registerMooseObject("MooseApp", RestartableDataReporter);
      15             : 
      16             : InputParameters
      17       28678 : RestartableDataReporter::validParams()
      18             : {
      19       28678 :   InputParameters params = GeneralReporter::validParams();
      20       28678 :   params.addClassDescription("Reports restartable data and restartable meta data.");
      21             : 
      22       28678 :   MultiMooseEnum entries("value type declared loaded stored has_context", "value type");
      23       28678 :   params.addParam<MultiMooseEnum>(
      24             :       "entries", entries, "The entries to output for each restartable value");
      25             : 
      26       86034 :   params.addParam<bool>("allow_unimplemented",
      27       57356 :                         false,
      28             :                         "Set to true to allow the empty output of data that does not have a JSON "
      29             :                         "output implementation");
      30             : 
      31       28678 :   params.addParam<std::string>(
      32             :       "map", "", "The data map to use; if unset, use system restartable data");
      33             : 
      34       28678 :   params.addParam<std::vector<std::string>>(
      35             :       "include",
      36             :       {},
      37             :       "The data name patterns to include (* for matching all, ? for matching a single character)");
      38       28678 :   params.addParam<std::vector<std::string>>(
      39             :       "exclude",
      40             :       {},
      41             :       "The data name patterns to exclude (* for matching all, ? for matching a single character)");
      42             : 
      43       57356 :   return params;
      44       28678 : }
      45             : 
      46          74 : RestartableDataReporter::RestartableDataReporter(const InputParameters & parameters)
      47             :   : GeneralReporter(parameters),
      48          74 :     _data_params(getDataParams()),
      49          74 :     _allow_unimplemented(getParam<bool>("allow_unimplemented")),
      50          74 :     _include(getParam<std::vector<std::string>>("include")),
      51          74 :     _exclude(getParam<std::vector<std::string>>("exclude")),
      52          74 :     _values(declareValueByName<std::map<std::string, RestartableDataReporter::Value>>(
      53             :         "values",
      54         148 :         getParam<std::string>("map").size() ? REPORTER_MODE_ROOT : REPORTER_MODE_DISTRIBUTED)),
      55         148 :     _data_map(getParam<std::string>("map").size()
      56         124 :                   ? _app.getRestartableDataMap(getParam<std::string>("map"))
      57         124 :                   : _app.getRestartableData()[0])
      58             : {
      59          74 : }
      60             : 
      61             : RestartableDataValue::StoreJSONParams
      62          74 : RestartableDataReporter::getDataParams() const
      63             : {
      64          74 :   const auto & entries = getParam<MultiMooseEnum>("entries");
      65             : 
      66          74 :   RestartableDataValue::StoreJSONParams params;
      67          74 :   params.value = entries.isValueSet("value");
      68          74 :   params.type = entries.isValueSet("type");
      69          74 :   params.name = false;
      70          74 :   params.declared = entries.isValueSet("declared");
      71          74 :   params.loaded = entries.isValueSet("loaded");
      72          74 :   params.stored = entries.isValueSet("stored");
      73          74 :   params.has_context = entries.isValueSet("has_context");
      74             : 
      75          74 :   return params;
      76             : }
      77             : 
      78             : void
      79         123 : RestartableDataReporter::execute()
      80             : {
      81         123 :   _values.clear();
      82             : 
      83        4219 :   for (const auto & value : _data_map)
      84             :   {
      85             :     mooseAssert(!_values.count(value.name()), "Non-unique name");
      86             : 
      87             :     // Don't output JSON entries
      88        4100 :     if (typeid(nlohmann::json) == value.typeId())
      89        3660 :       continue;
      90             :     // Don't output Reporter data due to recursion
      91        4014 :     if (MooseUtils::globCompare(value.name(),
      92        8028 :                                 ReporterName::REPORTER_RESTARTABLE_DATA_PREFIX + "/*"))
      93          86 :       continue;
      94             :     // Does not match include patterns
      95       11168 :     if (_include.size() && std::find_if(_include.begin(),
      96             :                                         _include.end(),
      97        3620 :                                         [&value](const auto & pattern) {
      98        3620 :                                           return MooseUtils::globCompare(value.name(), pattern);
      99       11168 :                                         }) == _include.end())
     100        3466 :       continue;
     101             :     // Matches exclude patterns
     102         462 :     if (std::find_if(_exclude.begin(),
     103             :                      _exclude.end(),
     104          44 :                      [&value](const auto & pattern)
     105         968 :                      { return MooseUtils::globCompare(value.name(), pattern); }) != _exclude.end())
     106          22 :       continue;
     107             : 
     108         440 :     RestartableDataReporter::Value entry;
     109         440 :     entry.value = &value;
     110         440 :     entry.params = _data_params;
     111             : 
     112         440 :     if (!value.hasStoreJSON())
     113             :     {
     114          26 :       if (!_allow_unimplemented)
     115           4 :         mooseError("The method for outputting restartable data of type '",
     116           0 :                    value.type(),
     117             :                    "' is not implemented.\n\nTo omit data values that are not able to be "
     118             :                    "output, set Reporters/",
     119           4 :                    name(),
     120             :                    "/"
     121             :                    "allow_unimplemented=true,\nor skip the data with Reporters/",
     122           4 :                    name(),
     123             :                    "/[include/exclude].");
     124          22 :       entry.params.value = false;
     125             :     }
     126             : 
     127         436 :     _values.emplace(value.name(), entry);
     128             :   }
     129         119 : }
     130             : 
     131             : void
     132         352 : to_json(nlohmann::json & json, const RestartableDataReporter::Value & value)
     133             : {
     134             :   mooseAssert(value.value, "Not set");
     135         352 :   value.value->store(json, value.params);
     136         352 : }

Generated by: LCOV version 1.14