https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
27using namespace libMesh;
28
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
44 addMultiAppFixedPointIterationEndExecFlag(params, "execute_postprocessors_on");
45 addMultiAppFixedPointIterationEndExecFlag(params, "execute_scalars_on");
46
47 // Screen and file output toggles
48 params.addParam<bool>("output_screen", true, "Output to the screen");
49 params.addParam<bool>("output_file",
50 false,
51 "Output to the file. The default behavior is to write to file only from "
52 "the head processor. If \"--keep-cout\" is passed to the executable, then "
53 "each processor will write to its own file. The same parallel behaviour "
54 "can also be achieved by passing \"--keep-cout --redirect-stdout\" to the "
55 "executable without setting this parameter to true.");
56 params.addParam<bool>(
57 "show_multiapp_name", false, "Indent multiapp output using the multiapp name");
58
59 // Table fitting options
60 params.addParam<unsigned int>("max_rows",
61 15,
62 "The maximum number of postprocessor/scalar values "
63 "displayed on screen during a timestep (set to 0 "
64 "for unlimited)");
65 params.addParam<MooseEnum>("fit_mode",
66 pps_fit_mode,
67 "Specifies the wrapping mode for post-processor tables that are "
68 "printed to the screen (ENVIRONMENT: Read \"MOOSE_PPS_WIDTH\" for "
69 "desired width (if not set, defaults to AUTO), AUTO: Attempt to "
70 "determine width automatically (serial only), <n>: Desired width");
71
72 // Verbosity
73 params.addParam<bool>("verbose", false, "Print detailed diagnostics on timestep calculation");
74
75 // Basic table output controls
76 params.addParam<bool>(
77 "scientific_time", false, "Control the printing of time and dt in scientific notation");
78 params.addParam<unsigned int>(
79 "time_precision",
80 "The number of significant digits that are printed on time related outputs");
81 MooseEnum time_format("plain=0 second=1 minute=2 hour=3 day=4 dtime=5", "plain");
82 params.addParam<MooseEnum>(
83 "time_format",
84 time_format,
85 "The format for the printed times ('dtime' means a format like 1d 01:01:0.1)");
86
87 // Performance Logging
88 params.addDeprecatedParam<bool>("perf_log",
89 false,
90 "If true, all performance logs will be printed. The "
91 "individual log settings will override this option.",
92 "Use PerfGraphOutput");
93 params.addDeprecatedParam<unsigned int>(
94 "perf_log_interval",
95 0,
96 "If set, the performance log will be printed every n time steps",
97 "Use PerfGraphOutput instead");
98 params.addParam<bool>("solve_log", "Toggles the printing of the 'Moose Test Performance' log");
99 params.addDeprecatedParam<bool>(
100 "perf_header",
101 "Print the libMesh performance log header (requires that 'perf_log = true')",
102 "Use PerfGraphOutput instead");
103
104 params.addParam<bool>(
105 "libmesh_log",
106 true,
107 "Print the libMesh performance log, requires libMesh to be configured with --enable-perflog");
108
109 // Toggle printing of mesh information on adaptivity steps
110 params.addParam<bool>("print_mesh_changed_info",
111 false,
112 "When true, each time the mesh is changed the mesh information is printed");
113
114 // Toggle for printing variable norms
115 params.addParam<bool>("outlier_variable_norms",
116 true,
117 "If true, outlier variable norms will be printed after each solve");
118 params.addParam<bool>(
119 "all_variable_norms", false, "If true, all variable norms will be printed after each solve");
120
121 // Multipliers for coloring of variable residual norms
122 std::vector<Real> multiplier;
123 multiplier.push_back(0.8);
124 multiplier.push_back(2);
125 params.addParam<std::vector<Real>>("outlier_multiplier",
126 multiplier,
127 "Multiplier utilized to determine if a residual norm is an "
128 "outlier. If the variable residual is less than "
129 "multiplier[0] times the total residual it is colored red. "
130 "If the variable residual is less than multiplier[1] times "
131 "the average residual it is colored yellow.");
132
133 // System information controls
134 MultiMooseEnum info("framework mesh aux nonlinear linear relationship execution output",
135 "framework mesh aux nonlinear linear execution");
136 params.addParam<MultiMooseEnum>("system_info",
137 info,
138 "List of information types to display "
139 "('framework', 'mesh', 'aux', 'nonlinear', 'relationship', "
140 "'execution', 'output')");
141
142 // Advanced group
143 params.addParamNamesToGroup("verbose show_multiapp_name system_info", "Advanced");
144
145 // Performance log group
146 params.addParamNamesToGroup("perf_log solve_log perf_header libmesh_log", "Perf Log");
147
148 // Variable norms group
149 params.addParamNamesToGroup("outlier_variable_norms all_variable_norms outlier_multiplier",
150 "Variable and Residual Norms");
151
152 // Number formatting
153 params.addParamNamesToGroup("scientific_time time_precision time_format",
154 "Time output formatting");
155
156 // Table of postprocessor output formatting
157 params.addParamNamesToGroup("max_rows fit_mode", "Table formatting");
158
159 /*
160 * The following modifies the default behavior from base class parameters. Notice the extra flag
161 * on
162 * the set method. This enables "quiet mode". This is done to allow for the proper detection
163 * of user-modified parameters
164 */
165 // By default set System Information to output on initial
166 params.set<ExecFlagEnum>("execute_system_information_on", /*quite_mode=*/true) = EXEC_INITIAL;
167
168 // Change the default behavior of 'execute_on' to included nonlinear iterations and failed
169 // timesteps
170 params.set<ExecFlagEnum>("execute_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
176
177 // By default postprocessors and scalar are only output at the end of a timestep
178 params.set<ExecFlagEnum>("execute_postprocessors_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
180 params.set<ExecFlagEnum>("execute_vector_postprocessors_on",
181 /*quiet_mode=*/true) = {EXEC_INITIAL, EXEC_TIMESTEP_END};
182 params.set<ExecFlagEnum>("execute_scalars_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
184 params.set<ExecFlagEnum>("execute_reporters_on", /*quiet_mode=*/true) = {EXEC_INITIAL,
186 return params;
187}
188
190 : TableOutput(parameters),
191 _max_rows(getParam<unsigned int>("max_rows")),
192 _fit_mode(getParam<MooseEnum>("fit_mode")),
193 _scientific_time(getParam<bool>("scientific_time")),
194 _write_file(getParam<bool>("output_file")),
195 _write_screen(getParam<bool>("output_screen")),
196 _verbose(getParam<bool>("verbose")),
197 _perf_log(getParam<bool>("perf_log")),
198 _perf_log_interval(getParam<unsigned int>("perf_log_interval")),
199 _solve_log(isParamValid("solve_log") ? getParam<bool>("solve_log") : _perf_log),
200 _libmesh_log(getParam<bool>("libmesh_log")),
201 _perf_header(isParamValid("perf_header") ? getParam<bool>("perf_header") : _perf_log),
202 _all_variable_norms(getParam<bool>("all_variable_norms")),
203 _outlier_variable_norms(getParam<bool>("outlier_variable_norms")),
204 _outlier_multiplier(getParam<std::vector<Real>>("outlier_multiplier")),
205 _precision(isParamValid("time_precision") ? getParam<unsigned int>("time_precision") : 0),
206 _time_format(getParam<MooseEnum>("time_format").getEnum<TimeFormatEnum>()),
207 _write_all_procs_to_files(_app.getParam<bool>("keep_cout")),
208 _console_buffer(_app.getOutputWarehouse().consoleBuffer()),
209 _old_linear_norm(std::numeric_limits<Real>::max()),
210 _old_nonlinear_norm(std::numeric_limits<Real>::max()),
211 _print_mesh_changed_info(getParam<bool>("print_mesh_changed_info")),
212 _system_info_flags(getParam<MultiMooseEnum>("system_info")),
213 _allow_changing_sysinfo_flag(true),
214 _last_message_ended_in_newline(true)
215{
216 // Apply the special common console flags (print_...)
218 const auto actions = awh.getActions<CommonOutputAction>();
219 mooseAssert(actions.size() <= 1, "Should not be more than one CommonOutputAction");
220 const Action * common = actions.empty() ? nullptr : *actions.begin();
221
222 if (!parameters.isParamSetByUser("execute_on"))
223 {
224 // Honor the 'print_linear_residuals' option, only if 'linear' has not been set in 'execute_on'
225 // by the user
226 if (common && common->getParam<bool>("print_linear_residuals"))
228 else
229 _execute_on.eraseSetValue("linear");
230 if (common && common->getParam<bool>("print_nonlinear_residuals"))
231 _execute_on.setAdditionalValue("nonlinear");
232 else
233 _execute_on.eraseSetValue("nonlinear");
234 }
235
236 if (!_pars.isParamSetByUser("perf_log") && common && common->getParam<bool>("print_perf_log"))
237 {
238 _perf_log = true;
239 _solve_log = true;
240 }
241
242 // If --show-outputs is used, enable it
243 if (_app.getParam<bool>("show_outputs"))
245}
246
248{
249 // Write the libMesh log
250 if (_libmesh_log)
251 write(libMesh::perflog.get_perf_info(), false);
252
253 // Write the file output stream
255
256 // Disable logging so that the destructor in libMesh doesn't print
258}
259
260void
262{
263 // Only allow the main app to change the perf_log settings.
264 if (_app.name() == "main")
265 {
266 // Disable libMesh log
267 if (!_libmesh_log)
269 }
270
271 // system info flag can be changed only before console initial setup
273
274 // If execute_on = 'initial' perform the output
275 if (wantOutput("system_information", EXEC_INITIAL))
277
278 // Call the base class method
280
281 // If file output is desired, wipe out the existing file if not recovering
282 if (!_app.isRecovering())
283 writeStreamToFile(false);
284
285 // Enable verbose output if Executioner has it enabled
286 if (_app.getExecutioner()->isParamValid("verbose") &&
287 _app.getExecutioner()->getParam<bool>("verbose"))
288 _verbose = true;
289
290 // If the user explicitly set execute_on but did not set a type-specific flag,
291 // replace that type's schedule with the user's execute_on so the two are consistent.
292 if (_pars.isParamSetByUser("execute_on"))
293 {
294 if (!_pars.isParamSetByUser("execute_postprocessors_on"))
295 _advanced_execute_on["postprocessors"] = _execute_on;
296 if (!_pars.isParamSetByUser("execute_scalars_on"))
298 if (!_pars.isParamSetByUser("execute_vector_postprocessors_on"))
299 _advanced_execute_on["vector_postprocessors"] = _execute_on;
300 if (!_pars.isParamSetByUser("execute_reporters_on"))
301 _advanced_execute_on["reporters"] = _execute_on;
302 }
303}
304
305std::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
319void
321{
322 writeTimestepInformation(/*output_dt = */ true);
323}
324
325void
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)
359 _old_nonlinear_norm = std::numeric_limits<Real>::max();
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)
371 _old_linear_norm = std::numeric_limits<Real>::max();
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))
391
392 // Write the file
394
395 _console << std::flush;
396}
397
398void
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
425void
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
473std::string
475{
476 std::ostringstream oss;
478 {
479 if (_precision > 0)
480 oss << std::setw(_precision) << std::setprecision(_precision) << std::setfill('0')
481 << std::showpoint;
483 oss << std::scientific;
484
486 oss << t;
488 oss << t << "s";
490 oss << t / 60 << "m";
492 oss << t / 3600 << "h";
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;
524 oss << std::scientific;
525 oss << second;
526 }
527 else if (days == 0)
528 oss << "0s";
529 }
530 return oss.str();
531}
532
533void
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
618std::string
619Console::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
636void
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
649void
651{
653
655 {
656 std::stringstream oss;
657 oss << "\nPostprocessor Values:\n";
660 _console << oss.str() << std::endl;
661 }
662}
663
664void
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
679void
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
697void
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
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
778void
780{
782 {
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
817void
818Console::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)
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
844void
845Console::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
854void
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}
registerMooseObject("MooseApp", Console)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
const ExecFlagType EXEC_TIMESTEP_END
Definition Moose.C:36
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition Moose.C:37
const ExecFlagType EXEC_INITIAL
Definition Moose.C:30
const ExecFlagType EXEC_LINEAR
Definition Moose.C:31
const ExecFlagType EXEC_NONLINEAR
Definition Moose.C:33
const ExecFlagType EXEC_FAILED
Definition Moose.C:50
const ExecFlagType EXEC_FINAL
Definition Moose.C:48
unsigned int n_vars
void ErrorVector unsigned int
Storage for action instances.
void printInputFile(std::ostream &out)
This method uses the Actions in the warehouse to reproduce the input file.
std::vector< const T * > getActions()
Retrieve all actions in a specific type ordered by their names.
Base class for actions.
Definition Action.h:38
static InputParameters enableOutputTypes(const std::string &names=std::string())
A method for enabling individual output type control.
bool wantOutput(const std::string &name, const ExecFlagType &type)
Handles logic for determining if a step should be output.
friend class Console
Meta-action for creating common output object parameters This action serves two purpose,...
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
An output object for writing to the console (screen)
Definition Console.h:19
bool _allow_changing_sysinfo_flag
A boolean for protecting _system_info_flags from being changed undesirably.
Definition Console.h:260
virtual void outputPostprocessors() override
Prints the postprocessor table to the screen.
Definition Console.C:650
const bool _write_all_procs_to_files
Whether to write all processors to files.
Definition Console.h:226
TimeFormatEnum
Time formatting options.
Definition Console.h:94
unsigned int _max_rows
The max number of table rows.
Definition Console.h:175
bool _libmesh_log
Control the display libMesh performance log.
Definition Console.h:205
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
bool _write_file
Flag for controlling outputting console information to a file.
Definition Console.h:184
virtual ~Console()
Destructor.
Definition Console.C:247
bool _scientific_time
Toggle for outputting time in time and dt in scientific notation.
Definition Console.h:181
MultiMooseEnum _system_info_flags
Flags for controlling the what simulations information is shown.
Definition Console.h:254
void writeTimestepInformation(bool output_dt)
Prints the time step information for the screen output.
Definition Console.C:426
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
void mooseConsole(const std::string &message)
Add a message to the output streams.
Definition Console.C:845
bool _all_variable_norms
Flag for writing all variable norms.
Definition Console.h:211
void write(std::string message, bool indent=true)
Write message to screen and/or file.
Definition Console.C:818
static InputParameters validParams()
Definition Console.C:32
unsigned int _precision
Number of significant digits.
Definition Console.h:220
std::vector< Real > _outlier_multiplier
Multipliers for coloring variable residual norms (default [2, 0.8])
Definition Console.h:217
void meshChanged() override
Performs console related printing when the mesh is changed.
Definition Console.C:779
bool _perf_log
State for all performance logging.
Definition Console.h:196
TimeFormatEnum _time_format
Time format.
Definition Console.h:223
virtual void outputInput() override
Print the input file at the beginning of the simulation.
Definition Console.C:637
virtual void outputScalarVariables() override
Prints the aux scalar variables table to the screen.
Definition Console.C:680
bool _write_screen
Flag for controlling outputting console information to screen.
Definition Console.h:187
std::stringstream _file_output_stream
Stream for storing information to be written to a file.
Definition Console.h:193
bool _verbose
Flag for writing detailed time step information.
Definition Console.h:190
bool _outlier_variable_norms
Flag for writing outlier variable norms.
Definition Console.h:214
bool _last_message_ended_in_newline
Definition Console.h:262
std::string formatTime(const Real t) const
A help function to format a time.
Definition Console.C:474
virtual void initialSetup() override
Initial setup function Prints the system information, this is done here so that the system informatio...
Definition Console.C:261
void writeVariableNorms()
Print the L2-norms for each variable.
Definition Console.C:534
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
MooseEnum _fit_mode
The FormattedTable fit mode.
Definition Console.h:178
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
virtual void outputSystemInformation() override
Print system information.
Definition Console.C:698
virtual std::string filename() override
Creates the output file name Appends the user-supplied 'file_base' input parameter with a '....
Definition Console.C:306
static void petscSetupOutput()
Output string for setting up PETSC output.
Definition Console.C:855
virtual void outputReporters() override
Prints the Reporter values to the screen.
Definition Console.C:665
void writeStreamToFile(bool append=true)
Write the file stream to the file.
Definition Console.C:399
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
bool _print_mesh_changed_info
Flag for printing mesh information when the mesh changes.
Definition Console.h:251
bool _solve_log
State for solve performance log.
Definition Console.h:202
Problem for solving eigenvalue problems.
A MultiMooseEnum object to hold "execute_on" flags.
virtual std::size_t numLinearSystems() const override
virtual std::size_t numNonlinearSystems() const override
const std::vector< NonlinearSystemName > & getNonlinearSystemNames() const
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
std::string _file_base
The base filename from the input paramaters.
Definition FileOutput.h:89
static MooseEnum getWidthModes()
bool empty() const
Returns a boolean value based on whether the FormattedTable contains data or not.
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.
void sortColumns()
Sorts columns alphabetically.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
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...
bool isParamSetByUser(const std::string &name) const
Method returns true if the parameter was set by the user.
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.
void addDeprecatedParam(const std::string &name, const T &value, const std::string &doc_string, const std::string &deprecation_message)
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.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
const std::vector< std::string > & getInputFileNames() const
Definition MooseApp.C:1518
ActionWarehouse & actionWarehouse()
Return a writable reference to the ActionWarehouse associated with this app.
Definition MooseApp.h:217
unsigned int multiAppLevel() const
The MultiApp Level.
Definition MooseApp.h:855
unsigned int multiAppNumber() const
The MultiApp number.
Definition MooseApp.h:861
Executioner * getExecutioner() const
Retrieve the Executioner for this App.
Definition MooseApp.C:2015
bool isRecovering() const
Whether or not this is a "recover" calculation.
Definition MooseApp.C:1669
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
const std::string & type() const
Get the type of this class.
Definition MooseBase.h:93
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
const InputParameters & _pars
The object's parameters.
Definition MooseBase.h:384
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
Definition MooseBase.h:406
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition MooseBase.h:199
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition MooseEnum.h:55
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type.
void eraseSetValue(const std::string &names)
Un-assign, or unset a value.
void setAdditionalValue(const std::string &names)
Insert operators Operator to insert (push_back) values into the enum.
bool isValueSet(const std::string &value) const
Methods for seeing if a value is set in the MultiMooseEnum.
Nonlinear system to be solved.
Real nonlinearNorm() const
Return the last nonlinear norm.
virtual NumericVector< Number > & RHS()=0
virtual libMesh::System & system() override
Get the reference to the libMesh system.
const bool & usePreSMOResidual() const
Whether we are using pre-SMO residual in relative convergence checks.
Real & _dt_old
Old time step delta.
Definition Output.h:226
ExecFlagEnum _execute_on
The common Execution types; this is used as the default execution type for everything except system i...
Definition Output.h:203
FEProblemBase * _problem_ptr
Pointer the the FEProblemBase object for output object (use this)
Definition Output.h:185
virtual int timeStep()
Get the current time step.
Definition Output.C:387
ExecFlagType _current_execute_flag
Current execute on flag.
Definition Output.h:211
virtual Real timeOld()
Get the old output time.
Definition Output.C:360
virtual bool onInterval()
Returns true if the output interval is satisfied.
Definition Output.C:280
bool _transient
Transient flag (true = transient)
Definition Output.h:188
virtual Real dt()
Get the current time step size.
Definition Output.C:369
OutputOnWarehouse _advanced_execute_on
Storage for the individual component execute flags.
Definition Output.h:277
PetscInt _nonlinear_iter
Current non-linear iteration returned from PETSc.
Definition PetscOutput.h:84
Real _norm
Current norm returned from PETSc.
Definition PetscOutput.h:81
virtual Real getOutputTime()
Get the time that will be used for stream/file outputting.
PetscInt _linear_iter
Current linear iteration returned from PETSc.
Definition PetscOutput.h:87
virtual void initialSetup()
Gets called at the beginning of the simulation before this object is asked to do its job.
Base class for scalar variables and postprocessors output objects.
Definition TableOutput.h:29
virtual void outputScalarVariables() override
Populates the tables with scalar aux variables.
FormattedTable & _reporter_table
Table containing Real Reporter values.
static void addMultiAppFixedPointIterationEndExecFlag(InputParameters &params, const std::string &param)
Adds the exec flag MULTIAPP_FIXED_POINT_ITERATION_END to a parameter.
Definition TableOutput.C:71
FormattedTable & _scalar_table
Table containing scalar aux variables.
Definition TableOutput.h:98
virtual void outputReporters() override
Populates the tables with Reporter values.
static InputParameters validParams()
Definition TableOutput.C:26
virtual void outputPostprocessors() override
Populates the tables with postprocessor values.
FormattedTable & _postprocessor_table
Table containing postprocessor data.
Definition TableOutput.h:89
processor_id_type processor_id() const
void disable_logging()
const std::string & variable_name(const unsigned int i) const
Real calculate_norm(const NumericVector< Number > &v, unsigned int var, FEMNormType norm_type, std::set< unsigned int > *skip_dimensions=nullptr) const
unsigned int n_vars() const
std::string outputOutputInformation(MooseApp &app)
Output the output information.
std::string outputPreSMOResidualInformation()
Output the information about pre-SMO residual evaluation.
std::string outputLegacyInformation(MooseApp &app)
Output the legacy flag information.
std::string outputMeshInformation(FEProblemBase &problem, bool verbose=true)
Output the mesh information.
std::string outputSolverSystemInformation(FEProblemBase &problem, const unsigned int solver_sys_num)
Output a solver system information.
std::string outputAuxiliarySystemInformation(FEProblemBase &problem)
Output the Auxiliary system information.
std::string outputDataFilePaths()
Output the registered data paths for searching.
std::string outputExecutionInformation(const MooseApp &app, FEProblemBase &problem)
Output execution information.
std::string outputDataFileParams(MooseApp &app)
Output the (param path = value) pairs for each DataFileName parameter.
std::string outputRelationshipManagerInformation(const MooseApp &app)
Output action RelationshipManager information.
std::string outputFrameworkInformation(const MooseApp &app)
Outputs framework information.
std::string & removeColor(std::string &msg)
Definition MooseUtils.C:733
void indentMessage(const std::string &prefix, std::string &message, const char *color, bool indent_first_line, const std::string &post_prefix)
Definition MooseUtils.C:749
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
PerfLog perflog("libMesh", #ifdef LIBMESH_ENABLE_PERFORMANCE_LOGGING true #else false #endif)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)