https://mooseframework.inl.gov
Console.C
Go to the documentation of this file.
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 // MOOSE includes
11 #include "Console.h"
12 #include "ConsoleUtils.h"
13 #include "FEProblem.h"
14 #include "EigenProblem.h"
15 #include "Postprocessor.h"
16 #include "PetscSupport.h"
17 #include "Executioner.h"
18 #include "MooseApp.h"
19 #include "Moose.h"
20 #include "FormattedTable.h"
21 #include "NonlinearSystem.h"
22 #include "CommonOutputAction.h"
23 
24 // libMesh includes
25 #include "libmesh/enum_norm_type.h"
26 
27 using namespace libMesh;
28 
29 registerMooseObject("MooseApp", Console);
30 
33 {
34  // Enum for selecting the fit mode for the table when printed to the screen
36 
37  // Get the parameters from the base class
39  params.addClassDescription("Object for screen output.");
40 
41  params += TableOutput::enableOutputTypes("system_information scalar postprocessor input");
42 
43  // Screen and file output toggles
44  params.addParam<bool>("output_screen", true, "Output to the screen");
45  params.addParam<bool>("output_file",
46  false,
47  "Output to the file. The default behavior is to write to file only from "
48  "the head processor. If \"--keep-cout\" is passed to the executable, then "
49  "each processor will write to its own file. The same parallel behaviour "
50  "can also be achieved by passing \"--keep-cout --redirect-stdout\" to the "
51  "executable without setting this parameter to true.");
52  params.addParam<bool>(
53  "show_multiapp_name", false, "Indent multiapp output using the multiapp name");
54 
55  // Table fitting options
56  params.addParam<unsigned int>("max_rows",
57  15,
58  "The maximum number of postprocessor/scalar values "
59  "displayed on screen during a timestep (set to 0 "
60  "for unlimited)");
61  params.addParam<MooseEnum>("fit_mode",
62  pps_fit_mode,
63  "Specifies the wrapping mode for post-processor tables that are "
64  "printed to the screen (ENVIRONMENT: Read \"MOOSE_PPS_WIDTH\" for "
65  "desired width (if not set, defaults to AUTO), AUTO: Attempt to "
66  "determine width automatically (serial only), <n>: Desired width");
67 
68  // Verbosity
69  params.addParam<bool>("verbose", false, "Print detailed diagnostics on timestep calculation");
70 
71  // Basic table output controls
72  params.addParam<bool>(
73  "scientific_time", false, "Control the printing of time and dt in scientific notation");
74  params.addParam<unsigned int>(
75  "time_precision",
76  "The number of significant digits that are printed on time related outputs");
77  MooseEnum time_format("plain=0 second=1 minute=2 hour=3 day=4 dtime=5", "plain");
78  params.addParam<MooseEnum>(
79  "time_format",
80  time_format,
81  "The format for the printed times ('dtime' means a format like 1d 01:01:0.1)");
82 
83  // Performance Logging
84  params.addDeprecatedParam<bool>("perf_log",
85  false,
86  "If true, all performance logs will be printed. The "
87  "individual log settings will override this option.",
88  "Use PerfGraphOutput");
89  params.addDeprecatedParam<unsigned int>(
90  "perf_log_interval",
91  0,
92  "If set, the performance log will be printed every n time steps",
93  "Use PerfGraphOutput instead");
94  params.addParam<bool>("solve_log", "Toggles the printing of the 'Moose Test Performance' log");
95  params.addDeprecatedParam<bool>(
96  "perf_header",
97  "Print the libMesh performance log header (requires that 'perf_log = true')",
98  "Use PerfGraphOutput instead");
99 
100  params.addParam<bool>(
101  "libmesh_log",
102  true,
103  "Print the libMesh performance log, requires libMesh to be configured with --enable-perflog");
104 
105  // Toggle printing of mesh information on adaptivity steps
106  params.addParam<bool>("print_mesh_changed_info",
107  false,
108  "When true, each time the mesh is changed the mesh information is printed");
109 
110  // Toggle for printing variable norms
111  params.addParam<bool>("outlier_variable_norms",
112  true,
113  "If true, outlier variable norms will be printed after each solve");
114  params.addParam<bool>(
115  "all_variable_norms", false, "If true, all variable norms will be printed after each solve");
116 
117  // Multipliers for coloring of variable residual norms
118  std::vector<Real> multiplier;
119  multiplier.push_back(0.8);
120  multiplier.push_back(2);
121  params.addParam<std::vector<Real>>("outlier_multiplier",
122  multiplier,
123  "Multiplier utilized to determine if a residual norm is an "
124  "outlier. If the variable residual is less than "
125  "multiplier[0] times the total residual it is colored red. "
126  "If the variable residual is less than multiplier[1] times "
127  "the average residual it is colored yellow.");
128 
129  // System information controls
130  MultiMooseEnum info("framework mesh aux nonlinear linear relationship execution output",
131  "framework mesh aux nonlinear linear execution");
132  params.addParam<MultiMooseEnum>("system_info",
133  info,
134  "List of information types to display "
135  "('framework', 'mesh', 'aux', 'nonlinear', 'relationship', "
136  "'execution', 'output')");
137 
138  // Advanced group
139  params.addParamNamesToGroup("verbose show_multiapp_name system_info", "Advanced");
140 
141  // Performance log group
142  params.addParamNamesToGroup("perf_log solve_log perf_header libmesh_log", "Perf Log");
143 
144  // Variable norms group
145  params.addParamNamesToGroup("outlier_variable_norms all_variable_norms outlier_multiplier",
146  "Variable and Residual Norms");
147 
148  // Number formatting
149  params.addParamNamesToGroup("scientific_time time_precision time_format",
150  "Time output formatting");
151 
152  // Table of postprocessor output formatting
153  params.addParamNamesToGroup("max_rows fit_mode", "Table formatting");
154 
155  /*
156  * The following modifies the default behavior from base class parameters. Notice the extra flag
157  * on
158  * the set method. This enables "quiet mode". This is done to allow for the proper detection
159  * of user-modified parameters
160  */
161  // By default set System Information to output on initial
162  params.set<ExecFlagEnum>("execute_system_information_on", /*quite_mode=*/true) = EXEC_INITIAL;
163 
164  // Change the default behavior of 'execute_on' to included nonlinear iterations and failed
165  // timesteps
166  params.set<ExecFlagEnum>("execute_on", /*quiet_mode=*/true) = {
168 
169  // By default postprocessors and scalar are only output at the end of a timestep
170  params.set<ExecFlagEnum>("execute_postprocessors_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
172  params.set<ExecFlagEnum>("execute_vector_postprocessors_on",
173  /*quiet_mode=*/true) = {EXEC_INITIAL, EXEC_TIMESTEP_END};
174  params.set<ExecFlagEnum>("execute_scalars_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
176  params.set<ExecFlagEnum>("execute_reporters_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
178  return params;
179 }
180 
182  : TableOutput(parameters),
183  _max_rows(getParam<unsigned int>("max_rows")),
184  _fit_mode(getParam<MooseEnum>("fit_mode")),
185  _scientific_time(getParam<bool>("scientific_time")),
186  _write_file(getParam<bool>("output_file")),
187  _write_screen(getParam<bool>("output_screen")),
188  _verbose(getParam<bool>("verbose")),
189  _perf_log(getParam<bool>("perf_log")),
190  _perf_log_interval(getParam<unsigned int>("perf_log_interval")),
191  _solve_log(isParamValid("solve_log") ? getParam<bool>("solve_log") : _perf_log),
192  _libmesh_log(getParam<bool>("libmesh_log")),
193  _perf_header(isParamValid("perf_header") ? getParam<bool>("perf_header") : _perf_log),
194  _all_variable_norms(getParam<bool>("all_variable_norms")),
195  _outlier_variable_norms(getParam<bool>("outlier_variable_norms")),
196  _outlier_multiplier(getParam<std::vector<Real>>("outlier_multiplier")),
197  _precision(isParamValid("time_precision") ? getParam<unsigned int>("time_precision") : 0),
198  _time_format(getParam<MooseEnum>("time_format").getEnum<TimeFormatEnum>()),
199  _write_all_procs_to_files(_app.getParam<bool>("keep_cout")),
200  _console_buffer(_app.getOutputWarehouse().consoleBuffer()),
201  _old_linear_norm(std::numeric_limits<Real>::max()),
202  _old_nonlinear_norm(std::numeric_limits<Real>::max()),
203  _print_mesh_changed_info(getParam<bool>("print_mesh_changed_info")),
204  _system_info_flags(getParam<MultiMooseEnum>("system_info")),
205  _allow_changing_sysinfo_flag(true),
206  _last_message_ended_in_newline(true)
207 {
208  // Apply the special common console flags (print_...)
210  const auto actions = awh.getActions<CommonOutputAction>();
211  mooseAssert(actions.size() <= 1, "Should not be more than one CommonOutputAction");
212  const Action * common = actions.empty() ? nullptr : *actions.begin();
213 
214  if (!parameters.isParamSetByUser("execute_on"))
215  {
216  // Honor the 'print_linear_residuals' option, only if 'linear' has not been set in 'execute_on'
217  // by the user
218  if (common && common->getParam<bool>("print_linear_residuals"))
220  else
221  _execute_on.eraseSetValue("linear");
222  if (common && common->getParam<bool>("print_nonlinear_residuals"))
223  _execute_on.setAdditionalValue("nonlinear");
224  else
225  _execute_on.eraseSetValue("nonlinear");
226  }
227 
228  if (!_pars.isParamSetByUser("perf_log") && common && common->getParam<bool>("print_perf_log"))
229  {
230  _perf_log = true;
231  _solve_log = true;
232  }
233 
234  // Append the common 'execute_on' to the setting for this object
235  // This is unique to the Console object, all other objects inherit from the common options
236  if (common)
237  {
238  const ExecFlagEnum & common_execute_on = common->getParam<ExecFlagEnum>("execute_on");
239  for (auto & mme : common_execute_on)
241  }
242 
243  // If --show-outputs is used, enable it
244  if (_app.getParam<bool>("show_outputs"))
246 }
247 
249 {
250  // Write the libMesh log
251  if (_libmesh_log)
252  write(libMesh::perflog.get_perf_info(), false);
253 
254  // Write the file output stream
256 
257  // Disable logging so that the destructor in libMesh doesn't print
259 }
260 
261 void
263 {
264  // Only allow the main app to change the perf_log settings.
265  if (_app.name() == "main")
266  {
267  // Disable libMesh log
268  if (!_libmesh_log)
270  }
271 
272  // system info flag can be changed only before console initial setup
274 
275  // If execute_on = 'initial' perform the output
276  if (wantOutput("system_information", EXEC_INITIAL))
278 
279  // Call the base class method
281 
282  // If file output is desired, wipe out the existing file if not recovering
283  if (!_app.isRecovering())
284  writeStreamToFile(false);
285 
286  // Enable verbose output if Executioner has it enabled
287  if (_app.getExecutioner()->isParamValid("verbose") &&
288  _app.getExecutioner()->getParam<bool>("verbose"))
289  _verbose = true;
290 
291  // If the user adds "final" to the execute on, append this to the postprocessors, scalars, etc.,
292  // but only
293  // if the parameter (e.g., postprocessor_execute_on) has not been modified by the user.
294  if (_execute_on.isValueSet("final"))
295  {
296  if (!_pars.isParamSetByUser("postprocessor_execute_on"))
297  _advanced_execute_on["postprocessors"].setAdditionalValue("final");
298  if (!_pars.isParamSetByUser("scalars_execute_on"))
299  _advanced_execute_on["scalars"].setAdditionalValue("final");
300  if (!_pars.isParamSetByUser("vector_postprocessor_execute_on"))
301  _advanced_execute_on["vector_postprocessors"].setAdditionalValue("final");
302  }
303 }
304 
305 std::string
307 {
308  std::string file_name;
310  {
311  std::string pid = std::to_string(processor_id());
312  file_name = _file_base + "_" + pid + ".txt";
313  }
314  else
315  file_name = _file_base + ".txt";
316  return file_name;
317 }
318 
319 void
321 {
322  writeTimestepInformation(/*output_dt = */ true);
323 }
324 
325 void
327 {
328  const auto & type = _current_execute_flag;
329 
330  // Return if the current output is not on the desired interval
331  if (type != EXEC_FINAL && !onInterval())
332  return;
333 
334  // Output the system information first; this forces this to be the first item to write by default
335  // However, 'output_system_information_on' still operates correctly, so it may be changed by the
336  // user
337  if (wantOutput("system_information", type) && !(type == EXEC_INITIAL))
339 
340  // Write the input
341  if (wantOutput("input", type))
342  outputInput();
343 
344  // Write the timestep information ("Time Step 0 ..."), this is controlled with "execute_on"
345  // We only write the initial and final here. All of the intermediate outputs will be written
346  // through timestepSetup.
348  writeTimestepInformation(/*output_dt = */ false);
350  {
351  if (wantOutput("postprocessors", type) || wantOutput("scalars", type))
352  _console << "\nFINAL:\n";
353  }
354 
355  // Print Non-linear Residual (control with "execute_on")
357  {
358  if (_nonlinear_iter == 0)
360 
361  _console << std::right << std::setw(2) << _nonlinear_iter
362  << " Nonlinear |R| = " << outputNorm(_old_nonlinear_norm, _norm) << '\n';
363 
365  }
366 
367  // Print Linear Residual (control with "execute_on")
369  {
370  if (_linear_iter == 0)
372 
373  _console << std::right << std::setw(7) << _linear_iter
374  << " Linear |R| = " << outputNorm(_old_linear_norm, _norm) << '\n';
375 
377  }
378 
379  // Write variable norms
380  else if (type == EXEC_TIMESTEP_END)
382 
383  if (wantOutput("postprocessors", type))
385 
386  if (wantOutput("scalars", type))
388 
389  if (wantOutput("reporters", type))
390  outputReporters();
391 
392  // Write the file
394 
395  _console << std::flush;
396 }
397 
398 void
400 {
402  return;
403 
404  // Create the stream
405  std::ofstream output;
406 
407  // Open the file
408  if (append)
409  output.open(filename().c_str(), std::ios::app | std::ios::out);
410  else
411  output.open(filename().c_str(), std::ios::trunc);
412 
413  if (output.fail())
414  mooseError("Unable to open file ", filename());
415 
416  std::string s = _file_output_stream.str();
417  // Write contents of file output stream and close the file
419  output.close();
420 
421  // Clear the file output stream
422  _file_output_stream.str("");
423 }
424 
425 void
427 {
428  // Stream to build the time step information
429  std::stringstream oss;
430 
431  // Write timestep data for transient executioners
432  if (_transient)
433  {
434  // Write time step and time information
435  oss << "\nTime Step " << timeStep();
436  unsigned int time_step_digits = oss.str().length() - 11;
437 
438  // Print the time
439  oss << ", time = " << formatTime(getOutputTime());
440 
441  if (output_dt)
442  {
443  if (!_verbose)
444  // Show the time delta information
445  oss << ", dt = " << std::left << formatTime(dt());
446 
447  // Show old time information, if desired on separate lines
448  else
449  {
450  unsigned int fillsize = 19 + time_step_digits;
451  oss << '\n'
452  << std::right << std::setw(fillsize) << std::setfill(' ') << "old time = " << std::left
453  << formatTime(timeOld()) << '\n';
454 
455  // Show the time delta information
456  oss << std::right << std::setw(fillsize) << std::setfill(' ') << "dt = " << std::left
457  << formatTime(dt()) << '\n';
458 
459  // Show the old time delta information, if desired
460  if (_verbose)
461  oss << std::right << std::setw(fillsize) << std::setfill(' ')
462  << "old dt = " << formatTime(_dt_old) << '\n';
463  }
464  }
465 
466  oss << '\n';
467 
468  // Output to the screen
469  _console << oss.str() << std::flush;
470  }
471 }
472 
473 std::string
474 Console::formatTime(const Real t) const
475 {
476  std::ostringstream oss;
478  {
479  if (_precision > 0)
480  oss << std::setw(_precision) << std::setprecision(_precision) << std::setfill('0')
481  << std::showpoint;
482  if (_scientific_time)
483  oss << std::scientific;
484 
486  oss << t;
488  oss << t << "s";
490  oss << t / 60 << "m";
492  oss << t / 3600 << "h";
493  else if (_time_format == TimeFormatEnum::DAY)
494  oss << t / 86400 << "d";
495  }
496  else
497  {
498  Real abst = t;
499  if (t < 0)
500  {
501  oss << "-";
502  abst = -t;
503  }
504  int days = std::floor(abst / 24 / 3600);
505  int hours = std::floor(abst / 3600 - days * 24);
506  int mins = std::floor(abst / 60 - days * 24 * 60 - hours * 60);
507  Real second = abst - days * 24 * 3600 - hours * 3600 - mins * 60;
508 
509  if (days != 0)
510  oss << days << "d";
511  if (hours != 0 || mins != 0 || second != 0)
512  {
513  if (days != 0)
514  oss << " ";
515  oss << std::setfill('0') << std::setw(2) << hours << ":" << std::setfill('0') << std::setw(2)
516  << mins << ":";
517 
518  if (second < 10)
519  oss << "0";
520  if (_precision > 0)
521  oss << std::setw(_precision) << std::setprecision(_precision) << std::setfill('0')
522  << std::showpoint;
523  if (_scientific_time)
524  oss << std::scientific;
525  oss << second;
526  }
527  else if (days == 0)
528  oss << "0s";
529  }
530  return oss.str();
531 }
532 
533 void
535 {
536  // If all_variable_norms is true, then so should outlier printing
539 
540  // if we are not priting anything, let's not waste time computing the norms below and just exit
541  // this call
542  if ((_all_variable_norms == false) && (_outlier_variable_norms == false))
543  return;
544 
545  // if it is an eigenvalue prolblem, we do not know to define RHS,
546  // and then we do not know how to compute variable norms
547  if (dynamic_cast<EigenProblem *>(_problem_ptr) != nullptr)
548  return;
549 
550  // Flag set when header prints
551  bool header = false;
552 
553  // String stream for variable norm information
554  std::ostringstream oss;
555 
556  for (const auto i : make_range(_problem_ptr->numNonlinearSystems()))
557  {
558  // Get a references to the NonlinearSystem and libMesh system
560  System & sys = nl.system();
561 
562  // Storage for norm outputs
563  std::map<std::string, Real> other;
564  std::map<std::string, Real> outlier;
565 
566  // Average norm
567  unsigned int n_vars = sys.n_vars();
568  Real avg_norm = (nl.nonlinearNorm() * nl.nonlinearNorm()) / n_vars;
569 
570  // Compute the norms for each of the variables
571  for (unsigned int i = 0; i < n_vars; i++)
572  {
573  // Compute the norm and extract the variable name
574  Real var_norm = sys.calculate_norm(nl.RHS(), i, DISCRETE_L2);
575  var_norm *= var_norm; // use the norm squared
576  std::string var_name = sys.variable_name(i);
577 
578  // Outlier if the variable norm is greater than twice (default) of the average norm
579  if (_outlier_variable_norms && (var_norm > _outlier_multiplier[1] * avg_norm))
580  {
581  // Print the header
582  if (!header)
583  {
584  oss << "\nOutlier Variable Residual Norms:\n";
585  header = true;
586  }
587 
588  // Set the color, RED if the variable norm is 0.8 (default) of the total norm
589  std::string color = COLOR_YELLOW;
590  if (_outlier_variable_norms && (var_norm > _outlier_multiplier[0] * avg_norm * n_vars))
591  color = COLOR_RED;
592 
593  // Display the residual
594  oss << " " << var_name << ": " << std::scientific << color << std::sqrt(var_norm)
595  << COLOR_DEFAULT << '\n';
596  }
597 
598  // GREEN
599  else if (_all_variable_norms)
600  {
601  // Print the header if it doesn't already exist
602  if (!header)
603  {
604  oss << "\nVariable Residual Norms:\n";
605  header = true;
606  }
607  oss << " " << var_name << ": " << std::scientific << COLOR_GREEN << std::sqrt(var_norm)
608  << COLOR_DEFAULT << '\n';
609  }
610  }
611  }
612 
613  // Update the output streams
614  _console << oss.str() << std::flush;
615 }
616 
617 // Quick helper to output the norm in color
618 std::string
619 Console::outputNorm(const Real & old_norm, const Real & norm, const unsigned int precision)
620 {
621  std::string color = COLOR_GREEN;
622 
623  // Red if the residual went up... or if the norm is nan
624  if (norm != norm || norm > old_norm)
625  color = COLOR_RED;
626  // Yellow if change is less than 5%
627  else if ((old_norm - norm) / old_norm <= 0.05)
628  color = COLOR_YELLOW;
629 
630  std::stringstream oss;
631  oss << std::scientific << std::setprecision(precision) << color << norm << COLOR_DEFAULT;
632 
633  return oss.str();
634 }
635 
636 void
638 {
639  if (!_write_screen && !_write_file)
640  return;
641 
642  std::ostringstream oss;
643  for (const auto & filename : _app.getInputFileNames())
644  oss << "--- " << filename << "\n";
646  _console << oss.str() << std::endl;
647 }
648 
649 void
651 {
653 
655  {
656  std::stringstream oss;
657  oss << "\nPostprocessor Values:\n";
660  _console << oss.str() << std::endl;
661  }
662 }
663 
664 void
666 {
668 
669  if (!_reporter_table.empty())
670  {
671  std::stringstream oss;
672  oss << "\nReporter Values:\n";
675  _console << oss.str() << '\n';
676  }
677 }
678 
679 void
681 {
683 
684  if (!_scalar_table.empty())
685  {
686  std::stringstream oss;
687  oss << "\nScalar Variable Values:\n";
688  if (processor_id() == 0)
689  {
692  }
693  _console << oss.str() << std::endl;
694  }
695 }
696 
697 void
699 {
700  // skip system information output for sub-apps other than the zero-th of a MultiApp
701  // because they are using the same inputs and are most likely having the same information.
702  if (_app.multiAppNumber() > 0)
703  return;
704 
705  if (_system_info_flags.isValueSet("framework"))
707 
708  if (_system_info_flags.isValueSet("mesh"))
710 
711  if (_system_info_flags.isValueSet("nonlinear"))
712  {
713  for (const auto i : make_range(_problem_ptr->numNonlinearSystems()))
714  {
716  if (!output.empty())
717  {
718  _console << "Nonlinear System";
720  _console << " [" + _problem_ptr->getNonlinearSystemNames()[i] + "]";
721  _console << ":\n" << output;
722  }
723  }
724  }
725 
726  if (_system_info_flags.isValueSet("linear"))
727  for (const auto i : make_range(_problem_ptr->numLinearSystems()))
728  {
731  if (!output.empty())
732  _console << "Linear System" +
733  (_problem_ptr->numLinearSystems() > 1 ? (" " + std::to_string(i)) : "") +
734  ":\n"
735  << output;
736  }
737 
738  if (_system_info_flags.isValueSet("aux"))
739  {
741  if (!output.empty())
742  _console << "Auxiliary System:\n" << output;
743  }
744 
745  if (_system_info_flags.isValueSet("relationship"))
746  {
748  if (!output.empty())
749  _console << "Relationship Managers:\n" << output;
750  }
751 
752  if (_system_info_flags.isValueSet("execution"))
754 
755  if (_app.getParam<bool>("show_data_paths"))
757 
758  if (_app.getParam<bool>("show_data_params"))
760 
761  if (_system_info_flags.isValueSet("output"))
763 
764  if (!_app.getParam<bool>("use_legacy_initial_residual_evaluation_behavior"))
765  for (const auto i : make_range(_problem_ptr->numNonlinearSystems()))
767  {
769  break;
770  }
771 
772  // Output the legacy flags, these cannot be turned off so they become annoying to people.
774 
775  _console << std::flush;
776 }
777 
778 void
780 {
782  {
783  _console << ConsoleUtils::outputMeshInformation(*_problem_ptr, /*verbose = */ false);
784 
785  std::string output;
786  for (const auto i : make_range(_problem_ptr->numNonlinearSystems()))
787  {
789  if (!output.empty())
790  {
791  _console << "Nonlinear System";
793  _console << " [" + _problem_ptr->getNonlinearSystemNames()[i] + "]";
794  _console << ":\n" << output;
795  }
796  }
797 
798  for (const auto i : make_range(_problem_ptr->numLinearSystems()))
799  {
802  if (!output.empty())
803  _console << "Linear System" +
804  (_problem_ptr->numLinearSystems() > 1 ? (" " + std::to_string(i)) : "") +
805  ":\n"
806  << output;
807  }
808 
810  if (!output.empty())
811  _console << "Auxiliary System:\n" << output;
812 
813  _console << std::flush;
814  }
815 }
816 
817 void
818 Console::write(std::string message, bool indent /*=true*/)
819 {
820  // Do nothing if the message is empty, writing empty strings messes with multiapp indenting
821  if (message.empty())
822  return;
823 
824  // Write the message to file
825  if (_write_file)
826  _file_output_stream << message;
827 
828  // The empty case gets the right behavior, even though the boolean is technically wrong
829  bool this_message_ends_in_newline = message.empty() ? true : (message.back() == '\n');
830  bool this_message_starts_with_newline = message.empty() ? true : (message.front() == '\n');
831 
832  // Apply MultiApp indenting
833  if ((this_message_starts_with_newline || _last_message_ended_in_newline) && indent &&
834  _app.multiAppLevel() > 0)
835  MooseUtils::indentMessage(_app.name(), message);
836 
837  // Write message to the screen
838  if (_write_screen)
839  Moose::out << message;
840 
841  _last_message_ended_in_newline = this_message_ends_in_newline;
842 }
843 
844 void
845 Console::mooseConsole(const std::string & message)
846 {
847  // Write the messages
848  write(message);
849 
850  // Flush the stream to the screen
851  Moose::out << std::flush;
852 }
853 
854 void
856 {
857  char c[] = {
858  32, 47, 94, 92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
859  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
860  32, 32, 32, 32, 32, 32, 32, 47, 94, 92, 13, 10, 124, 32, 32, 32, 92, 95, 47,
861  94, 92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
862  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 94, 92, 95, 47,
863  32, 32, 32, 124, 13, 10, 124, 32, 32, 32, 32, 32, 32, 32, 32, 92, 95, 47, 94,
864  92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
865  32, 32, 32, 47, 94, 92, 95, 47, 32, 32, 32, 32, 32, 32, 32, 32, 124, 13, 10,
866  32, 92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 92, 95, 47, 94, 92,
867  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 94, 92, 95, 47, 32, 32, 32,
868  32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 13, 10, 32, 32, 92, 95, 95, 32, 32,
869  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 92, 95, 95, 95, 45, 45, 45,
870  95, 95, 95, 47, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 95,
871  95, 47, 13, 10, 32, 32, 32, 32, 32, 45, 45, 45, 95, 95, 95, 32, 32, 32, 32,
872  32, 32, 32, 32, 32, 47, 32, 32, 32, 32, 32, 32, 32, 92, 32, 32, 32, 32, 32,
873  32, 32, 32, 32, 95, 95, 95, 45, 45, 45, 13, 10, 32, 32, 32, 32, 32, 32, 32,
874  32, 32, 32, 32, 45, 45, 45, 95, 95, 95, 32, 32, 124, 32, 32, 32, 32, 32, 32,
875  32, 32, 32, 124, 32, 32, 95, 95, 95, 45, 45, 45, 13, 10, 32, 32, 32, 32, 32,
876  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 124, 32, 32, 95, 32,
877  32, 32, 95, 32, 32, 124, 45, 45, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
878  32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 124, 111, 124, 32, 124, 111, 124,
879  32, 32, 124, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
880  32, 32, 32, 47, 32, 32, 32, 32, 45, 32, 32, 32, 45, 32, 32, 32, 32, 92, 13,
881  10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 32,
882  32, 32, 32, 32, 32, 95, 95, 95, 32, 32, 32, 32, 32, 32, 124, 13, 10, 32, 32,
883  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 32, 32, 32,
884  45, 45, 32, 32, 32, 45, 45, 32, 32, 32, 32, 32, 92, 13, 10, 32, 32, 32, 32,
885  32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 32, 32, 32, 32, 32, 32, 32,
886  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 92, 13, 10, 32, 32, 32, 32,
887  32, 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 32, 32, 32, 32, 32, 47, 92, 32,
888  32, 32, 32, 32, 47, 92, 32, 32, 32, 32, 32, 32, 32, 124, 13, 10, 32, 32, 32,
889  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 92, 32, 32, 92, 32, 32, 32, 32, 32,
890  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 47, 13, 10, 32, 32, 32,
891  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 92, 32, 32, 92, 95, 95, 95, 95,
892  95, 95, 95, 95, 95, 95, 95, 95, 32, 47, 32, 32, 47, 92, 13, 10, 32, 32, 32,
893  32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 92, 32, 32, 32, 32, 32, 32,
894  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 92, 13, 10, 32, 32,
895  32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 32, 32, 92, 32, 32, 32, 32,
896  32, 39, 95, 95, 95, 39, 32, 32, 32, 32, 32, 47, 32, 32, 32, 32, 92, 13, 10,
897  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 92, 32, 32, 32, 32, 32, 92, 32,
898  45, 45, 95, 95, 45, 45, 45, 95, 95, 45, 45, 32, 47, 32, 32, 32, 32, 32, 47,
899  92, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 92, 47, 32, 32,
900  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
901  92, 47, 32, 32, 92, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 32,
902  47, 32, 32, 32, 32, 32, 32, 32, 77, 46, 79, 46, 79, 46, 83, 46, 69, 32, 32,
903  32, 32, 32, 32, 32, 92, 32, 32, 32, 92, 13, 10, 32, 32, 32, 32, 32, 32, 32,
904  47, 32, 32, 32, 124, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
905  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 32, 92, 13, 10, 32,
906  32, 32, 32, 32, 32, 124, 32, 32, 32, 32, 124, 45, 45, 45, 45, 45, 45, 45, 45,
907  45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 124, 32,
908  32, 32, 32, 124, 13, 10, 32, 32, 32, 32, 32, 32, 32, 92, 32, 32, 32, 32, 92,
909  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
910  32, 32, 32, 32, 47, 32, 32, 32, 32, 47, 13, 10, 32, 32, 32, 32, 32, 32, 32,
911  32, 32, 92, 92, 32, 92, 95, 92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
912  32, 32, 32, 32, 32, 32, 32, 32, 47, 95, 47, 32, 47, 47, 13, 10, 32, 32, 32,
913  32, 32, 32, 32, 32, 32, 32, 32, 45, 45, 32, 32, 92, 32, 32, 32, 32, 32, 32,
914  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 32, 32, 45, 45, 13, 10, 32,
915  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 45,
916  45, 45, 95, 95, 95, 95, 95, 45, 45, 45, 32, 32, 124, 13, 10, 32, 32, 32, 32,
917  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 32, 32, 32, 124,
918  32, 32, 32, 124, 32, 32, 32, 32, 32, 124, 13, 10, 32, 32, 32, 32, 32, 32, 32,
919  32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 32, 32, 32, 124, 32, 32, 32,
920  124, 32, 32, 32, 32, 32, 124, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
921  32, 32, 32, 32, 32, 47, 32, 86, 32, 32, 32, 32, 32, 92, 32, 47, 32, 32, 32,
922  32, 86, 32, 32, 92, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
923  32, 32, 32, 124, 95, 124, 95, 95, 95, 95, 95, 124, 32, 124, 95, 95, 95, 95, 124,
924  95, 95, 124};
925  Moose::out << std::string(c) << std::endl << std::endl;
926 }
std::string indent(unsigned int spaces)
Create empty string for indenting.
Definition: ConsoleUtils.C:41
std::string formatTime(const Real t) const
A help function to format a time.
Definition: Console.C:474
bool _libmesh_log
Control the display libMesh performance log.
Definition: Console.h:205
const std::vector< NonlinearSystemName > & getNonlinearSystemNames() const
const ExecFlagType EXEC_FAILED
Definition: Moose.C:44
A MultiMooseEnum object to hold "execute_on" flags.
Definition: ExecFlagEnum.h:21
ExecFlagEnum _execute_on
The common Execution types; this is used as the default execution type for everything except system i...
Definition: Output.h:203
unsigned int _precision
Number of significant digits.
Definition: Console.h:220
void addDeprecatedParam(const std::string &name, const T &value, const std::string &doc_string, const std::string &deprecation_message)
static void petscSetupOutput()
Output string for setting up PETSC output.
Definition: Console.C:855
TimeFormatEnum _time_format
Time format.
Definition: Console.h:223
virtual std::size_t numNonlinearSystems() const override
std::string outputExecutionInformation(const MooseApp &app, FEProblemBase &problem)
Output execution information.
Definition: ConsoleUtils.C:372
MPI_Info info
OutputOnWarehouse _advanced_execute_on
Storage for the individual component execute flags.
Definition: Output.h:280
virtual bool onInterval()
Returns true if the output interval is satisfied.
Definition: Output.C:285
registerMooseObject("MooseApp", Console)
std::string outputAuxiliarySystemInformation(FEProblemBase &problem)
Output the Auxiliary system information.
Definition: ConsoleUtils.C:198
void setAdditionalValue(const std::string &names)
Insert operators Operator to insert (push_back) values into the enum.
virtual Real dt()
Get the current time step size.
Definition: Output.C:371
DISCRETE_L2
Real & _dt_old
Old time step delta.
Definition: Output.h:226
void writeVariableNorms()
Print the L2-norms for each variable.
Definition: Console.C:534
virtual void outputSystemInformation() override
Print system information.
Definition: Console.C:698
MooseEnum _fit_mode
The FormattedTable fit mode.
Definition: Console.h:178
bool _all_variable_norms
Flag for writing all variable norms.
Definition: Console.h:211
An output object for writing to the console (screen)
Definition: Console.h:18
FormattedTable & _postprocessor_table
Table containing postprocessor data.
Definition: TableOutput.h:70
bool _verbose
Flag for writing detailed time step information.
Definition: Console.h:190
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
unsigned int multiAppLevel() const
The MultiApp Level.
Definition: MooseApp.h:826
bool _write_screen
Flag for controlling outputting console information to screen.
Definition: Console.h:187
Storage for action instances.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
std::string _file_base
The base filename from the input paramaters.
Definition: FileOutput.h:89
bool _transient
Transient flag (true = transient)
Definition: Output.h:188
void printInputFile(std::ostream &out)
This method uses the Actions in the warehouse to reproduce the input file.
const ExecFlagType EXEC_TIMESTEP_END
Definition: Moose.C:34
bool empty() const
Returns a boolean value based on whether the FormattedTable contains data or not. ...
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
unsigned int multiAppNumber() const
The MultiApp number.
Definition: MooseApp.h:832
std::string outputOutputInformation(MooseApp &app)
Output the output information.
Definition: ConsoleUtils.C:456
bool _allow_changing_sysinfo_flag
A boolean for protecting _system_info_flags from being changed undesirably.
Definition: Console.h:260
PerfLog perflog("libMesh", #ifdef LIBMESH_ENABLE_PERFORMANCE_LOGGING true #else false #endif)
virtual const std::string & name() const
Get the name of the class.
Definition: MooseBase.h:57
Base class for actions.
Definition: Action.h:33
auto max(const L &left, const R &right)
virtual void output() override
Customizes the order of output for the various components as well as adds additional output such as t...
Definition: Console.C:326
std::string outputMeshInformation(FEProblemBase &problem, bool verbose=true)
Output the mesh information.
Definition: ConsoleUtils.C:97
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
bool _outlier_variable_norms
Flag for writing outlier variable norms.
Definition: Console.h:214
Nonlinear system to be solved.
static MooseEnum getWidthModes()
const bool _write_all_procs_to_files
Whether to write all processors to files.
Definition: Console.h:226
virtual Real timeOld()
Get the old output time.
Definition: Output.C:362
PetscInt _linear_iter
Current linear iteration returned from PETSc.
Definition: PetscOutput.h:87
MultiMooseEnum _system_info_flags
Flags for controlling the what simulations information is shown.
Definition: Console.h:254
virtual std::string filename() override
Creates the output file name Appends the user-supplied &#39;file_base&#39; input parameter with a &#39;...
Definition: Console.C:306
void indentMessage(const std::string &prefix, std::string &message, const char *color=COLOR_CYAN, bool dont_indent_first_line=true, const std::string &post_prefix=": ")
Indents the supplied message given the prefix and color.
Definition: MooseUtils.C:734
virtual void outputPostprocessors() override
Prints the postprocessor table to the screen.
Definition: Console.C:650
unsigned int n_vars
std::string outputDataFilePaths()
Output the registered data paths for searching.
Definition: ConsoleUtils.C:538
bool _solve_log
State for solve performance log.
Definition: Console.h:202
FormattedTable & _scalar_table
Table containing scalar aux variables.
Definition: TableOutput.h:79
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition: Moose.C:35
ExecFlagType _current_execute_flag
Current execute on flag.
Definition: Output.h:211
std::stringstream _file_output_stream
Stream for storing information to be written to a file.
Definition: Console.h:193
void write(std::string message, bool indent=true)
Write message to screen and/or file.
Definition: Console.C:818
virtual void initialSetup() override
Initial setup function Prints the system information, this is done here so that the system informatio...
Definition: Console.C:262
FEProblemBase * _problem_ptr
Pointer the the FEProblemBase object for output object (use this)
Definition: Output.h:185
Real calculate_norm(const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type, std::set< unsigned int > *skip_dimensions=nullptr) const
virtual void timestepSetup() override
Gets called at the beginning of the timestep before this object is asked to do its job...
Definition: Console.C:320
const std::string & type() const
Get the type of this class.
Definition: MooseBase.h:51
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition: MooseEnum.h:33
virtual void outputReporters() override
Populates the tables with Reporter values.
Definition: TableOutput.C:111
ActionWarehouse & actionWarehouse()
Return a writable reference to the ActionWarehouse associated with this app.
Definition: MooseApp.h:237
const std::string & variable_name(const unsigned int i) const
virtual void outputInput() override
Print the input file at the beginning of the simulation.
Definition: Console.C:637
std::string & removeColor(std::string &msg)
remove ANSI escape sequences for terminal color from msg
Definition: MooseUtils.C:718
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
MooseApp & _app
The MOOSE application this is associated with.
Definition: MooseBase.h:84
bool isValueSet(const std::string &value) const
Methods for seeing if a value is set in the MultiMooseEnum.
virtual void outputScalarVariables() override
Prints the aux scalar variables table to the screen.
Definition: Console.C:680
void mooseConsole(const std::string &message)
Add a message to the output streams.
Definition: Console.C:845
static InputParameters enableOutputTypes(const std::string &names=std::string())
A method for enabling individual output type control.
auto norm(const T &a) -> decltype(std::abs(a))
unsigned int _max_rows
The max number of table rows.
Definition: Console.h:175
const ExecFlagType EXEC_LINEAR
Definition: Moose.C:29
const bool & usePreSMOResidual() const
Whether we are using pre-SMO residual in relative convergence checks.
std::string outputFrameworkInformation(const MooseApp &app)
Outputs framework information.
Definition: ConsoleUtils.C:47
Real _norm
Current norm returned from PETSc.
Definition: PetscOutput.h:81
Real _old_nonlinear_norm
Storage for the old non linear residual (needed for color output and only when used when printing to ...
Definition: Console.h:248
bool _write_file
Flag for controlling outputting console information to a file.
Definition: Console.h:184
Executioner * getExecutioner() const
Retrieve the Executioner for this App.
Definition: MooseApp.C:2111
TimeFormatEnum
Time formatting options.
Definition: Console.h:93
virtual ~Console()
Destructor.
Definition: Console.C:248
virtual void outputPostprocessors() override
Populates the tables with postprocessor values.
Definition: TableOutput.C:86
bool _perf_log
State for all performance logging.
Definition: Console.h:196
bool wantOutput(const std::string &name, const ExecFlagType &type)
Handles logic for determining if a step should be output.
void writeStreamToFile(bool append=true)
Write the file stream to the file.
Definition: Console.C:399
const ExecFlagType EXEC_NONLINEAR
Definition: Moose.C:31
bool isParamSetByUser(const std::string &name) const
Method returns true if the parameter was set by the user.
virtual NumericVector< Number > & RHS()=0
std::vector< Real > _outlier_multiplier
Multipliers for coloring variable residual norms (default [2, 0.8])
Definition: Console.h:217
const T & getParam(const std::string &name)
Retrieve a parameter for the object.
Definition: MooseApp.h:1605
void printTable(std::ostream &out, unsigned int last_n_entries=0)
Methods for dumping the table to the stream - either by filename or by stream handle.
virtual void initialSetup()
Call init() method on setup.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static std::string outputNorm(const Real &old_norm, const Real &norm, const unsigned int precision=6)
A helper function for outputting norms in color.
Definition: Console.C:619
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
static InputParameters validParams()
Definition: Console.C:32
Real nonlinearNorm() const
Return the last nonlinear norm.
void meshChanged() override
Performs console related printing when the mesh is changed.
Definition: Console.C:779
Real _old_linear_norm
Storage for the old linear residual (needed for color output and only when used when printing to the ...
Definition: Console.h:245
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
Base class for scalar variables and postprocessors output objects.
Definition: TableOutput.h:28
const InputParameters & _pars
Parameters of this object, references the InputParameters stored in the InputParametersWarehouse.
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump...
const InputParameters & parameters() const
Get the parameters of the object.
bool _scientific_time
Toggle for outputting time in time and dt in scientific notation.
Definition: Console.h:181
FormattedTable & _reporter_table
Table containing Real Reporter values.
Definition: TableOutput.h:82
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object...
const std::vector< std::string > & getInputFileNames() const
Definition: MooseApp.C:1649
std::string outputPreSMOResidualInformation()
Output the information about pre-SMO residual evaluation.
Definition: ConsoleUtils.C:485
virtual std::size_t numLinearSystems() const override
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type...
std::string outputDataFileParams(MooseApp &app)
Output the (param path = value) pairs for each DataFileName parameter.
Definition: ConsoleUtils.C:548
void sortColumns()
Sorts columns alphabetically.
std::string outputLegacyInformation(MooseApp &app)
Output the legacy flag information.
Definition: ConsoleUtils.C:502
unsigned int n_vars() const
virtual int timeStep()
Get the current time step.
Definition: Output.C:389
std::vector< const T * > getActions()
Retrieve all actions in a specific type ordered by their names.
processor_id_type processor_id() const
std::string outputRelationshipManagerInformation(const MooseApp &app)
Output action RelationshipManager information.
Definition: ConsoleUtils.C:352
void writeTimestepInformation(bool output_dt)
Prints the time step information for the screen output.
Definition: Console.C:426
bool isRecovering() const
Whether or not this is a "recover" calculation.
Definition: MooseApp.C:1795
bool _print_mesh_changed_info
Flag for printing mesh information when the mesh changes.
Definition: Console.h:251
const ExecFlagType EXEC_FINAL
Definition: Moose.C:42
virtual Real getOutputTime()
Get the time that will be used for stream/file outputting.
Definition: PetscOutput.C:273
void ErrorVector unsigned int
bool _last_message_ended_in_newline
Definition: Console.h:262
virtual void outputReporters() override
Prints the Reporter values to the screen.
Definition: Console.C:665
Meta-action for creating common output object parameters This action serves two purpose, first it adds common output object parameters.
void eraseSetValue(const std::string &names)
Un-assign, or unset a value.
virtual void outputScalarVariables() override
Populates the tables with scalar aux variables.
Definition: TableOutput.C:173
void disable_logging()
PetscInt _nonlinear_iter
Current non-linear iteration returned from PETSc.
Definition: PetscOutput.h:84
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
This method takes a space delimited list of parameter names and adds them to the specified group name...
Console(const InputParameters &parameters)
Class constructor.
Definition: Console.C:181
const ExecFlagType EXEC_INITIAL
Definition: Moose.C:28
virtual libMesh::System & system() override
Get the reference to the libMesh system.
std::string outputSolverSystemInformation(FEProblemBase &problem, const unsigned int solver_sys_num)
Output a solver system information.
Definition: ConsoleUtils.C:335
static InputParameters validParams()
Definition: TableOutput.C:26