diff --git a/framework/doc/content/source/userobject/PerflogDumper.md b/framework/doc/content/source/userobject/PerflogDumper.md deleted file mode 100644 index bc3761c0c784..000000000000 --- a/framework/doc/content/source/userobject/PerflogDumper.md +++ /dev/null @@ -1,15 +0,0 @@ - -# PerflogDumper - -!syntax description /UserObjects/PerflogDumper - -## Description - -Use this to collect MOOSE's performance log information in a structured CSV format for further -extra-MOOSE analysis. - -!syntax parameters /UserObjects/PerflogDumper - -!syntax inputs /UserObjects/PerflogDumper - -!syntax children /UserObjects/PerflogDumper diff --git a/framework/include/markers/QuadraturePointMarker.h b/framework/include/markers/QuadraturePointMarker.h index 1e04d2d2138e..5f4a585cc81e 100644 --- a/framework/include/markers/QuadraturePointMarker.h +++ b/framework/include/markers/QuadraturePointMarker.h @@ -19,7 +19,9 @@ class QuadraturePointMarker; template <> InputParameters validParams(); -class QuadraturePointMarker : public Marker, public Coupleable, public MaterialPropertyInterface +class QuadraturePointMarker : public Marker, + public MooseVariableInterface, + public MaterialPropertyInterface { public: QuadraturePointMarker(const InputParameters & parameters); @@ -37,6 +39,9 @@ class QuadraturePointMarker : public Marker, public Coupleable, public MaterialP */ virtual MarkerValue computeQpMarker() = 0; + /// Holds the solution at current quadrature points + const VariableValue & _u; + /// The quadrature rule for the system QBase *& _qrule; @@ -45,6 +50,9 @@ class QuadraturePointMarker : public Marker, public Coupleable, public MaterialP /// The current quadrature point unsigned int _qp; + + /// The behavior to use when "in-between" other states (what to do on the fringe) + MarkerValue _third_state; }; #endif /* QUADRATUREPOINTMARKER_H */ diff --git a/framework/include/markers/ValueRangeMarker.h b/framework/include/markers/ValueRangeMarker.h index b97fef86e376..bc5b5d40ec8a 100644 --- a/framework/include/markers/ValueRangeMarker.h +++ b/framework/include/markers/ValueRangeMarker.h @@ -29,11 +29,8 @@ class ValueRangeMarker : public QuadraturePointMarker Real _upper_bound; Real _buffer_size; - MarkerValue _third_state; MarkerValue _inside; MarkerValue _outside; - - const VariableValue & _u; }; #endif /* VALUERANGEMARKER_H */ diff --git a/framework/include/markers/ValueThresholdMarker.h b/framework/include/markers/ValueThresholdMarker.h index dd5b4e67f2b5..91c15d7b697d 100644 --- a/framework/include/markers/ValueThresholdMarker.h +++ b/framework/include/markers/ValueThresholdMarker.h @@ -31,9 +31,6 @@ class ValueThresholdMarker : public QuadraturePointMarker Real _refine; bool _invert; - MarkerValue _third_state; - - const VariableValue & _u; }; #endif /* VALUETHRESHOLDMARKER_H */ diff --git a/framework/include/userobject/PerflogDumper.h b/framework/include/userobject/PerflogDumper.h deleted file mode 100644 index 2a469082b433..000000000000 --- a/framework/include/userobject/PerflogDumper.h +++ /dev/null @@ -1,31 +0,0 @@ -//* This file is part of the MOOSE framework -//* https://www.mooseframework.org -//* -//* All rights reserved, see COPYRIGHT for full restrictions -//* https://github.com/idaholab/moose/blob/master/COPYRIGHT -//* -//* Licensed under LGPL 2.1, please see LICENSE for details -//* https://www.gnu.org/licenses/lgpl-2.1.html - -#ifndef PERFLOGDUMPER_H -#define PERFLOGDUMPER_H - -#include "GeneralUserObject.h" - -class PerflogDumper; - -template <> -InputParameters validParams(); - -/// Records all post processor data in a CSV file. -class PerflogDumper : public GeneralUserObject -{ -public: - PerflogDumper(const InputParameters & parameters); - - virtual void initialize() override{}; - virtual void execute() override; - virtual void finalize() override{}; -}; - -#endif diff --git a/framework/include/userobject/UserObject.h b/framework/include/userobject/UserObject.h index f913dbf0cbf0..19717fd05205 100644 --- a/framework/include/userobject/UserObject.h +++ b/framework/include/userobject/UserObject.h @@ -46,7 +46,7 @@ class UserObject : public MooseObject, { public: UserObject(const InputParameters & params); - virtual ~UserObject(); + virtual ~UserObject() = default; /** * Execute method. @@ -64,18 +64,6 @@ class UserObject : public MooseObject, */ virtual void finalize() = 0; - /** - * Load user data object from a stream - * @param stream Stream to load from - */ - virtual void load(std::ifstream & stream); - - /** - * Store user data object to a stream - * @param stream Stream to store to - */ - virtual void store(std::ofstream & stream); - /** * Returns a reference to the subproblem that * this postprocessor is tied to diff --git a/framework/src/markers/QuadraturePointMarker.C b/framework/src/markers/QuadraturePointMarker.C index aa7ce63f8855..89a47e193ef7 100644 --- a/framework/src/markers/QuadraturePointMarker.C +++ b/framework/src/markers/QuadraturePointMarker.C @@ -25,12 +25,7 @@ validParams() "third_state", third_state, "The Marker state to apply to values falling in-between the coarsen and refine thresholds."); - params.addParam("coarsen", - "The threshold value for coarsening. Elements with variable " - "values beyond this will be marked for coarsening."); - params.addParam("refine", - "The threshold value for refinement. Elements with variable " - "values beyond this will be marked for refinement."); + params.addParam("invert", false, "If this is true then values _below_ 'refine' will be " @@ -44,15 +39,19 @@ validParams() QuadraturePointMarker::QuadraturePointMarker(const InputParameters & parameters) : Marker(parameters), - Coupleable(this, false), + MooseVariableInterface(this, + false, + "variable", + Moose::VarKindType::VAR_ANY, + Moose::VarFieldType::VAR_FIELD_STANDARD), MaterialPropertyInterface(this, blockIDs(), Moose::EMPTY_BOUNDARY_IDS), + _u(mooseVariable()->sln()), _qrule(_assembly.qRule()), _q_point(_assembly.qPoints()), - _qp(0) + _qp(0), + _third_state(getParam("third_state").getEnum()) { - const std::vector & coupled_vars = getCoupledMooseVars(); - for (const auto & var : coupled_vars) - addMooseVariableDependency(var); + addMooseVariableDependency(mooseVariable()); } Marker::MarkerValue diff --git a/framework/src/markers/ValueRangeMarker.C b/framework/src/markers/ValueRangeMarker.C index 8e38b1e3485c..994a69b0367b 100644 --- a/framework/src/markers/ValueRangeMarker.C +++ b/framework/src/markers/ValueRangeMarker.C @@ -17,25 +17,15 @@ template <> InputParameters validParams() { - InputParameters params = validParams(); + InputParameters params = validParams(); - MooseEnum third_state("DONT_MARK=-1 COARSEN DO_NOTHING REFINE", "DONT_MARK"); - params.addParam( - "third_state", - third_state, - "The Marker state to apply to values in the buffer zone (both ends of the range)."); params.addRequiredParam("lower_bound", "The lower bound value for the range."); params.addRequiredParam("upper_bound", "The upper bound value for the range."); params.addParam("buffer_size", 0.0, "A buffer zone value added to both ends of the range " "where a third_state marker can be returned."); - params.addParam("invert", - false, - "If this is true then values inside the range will be " - "coarsened, and values outside the range will be " - "refined."); - params.addRequiredCoupledVar("variable", "The variable whose values are used in this marker."); + params.addClassDescription("Mark elements for adaptivity based on the supplied upper and lower " "bounds and the specified variable."); return params; @@ -46,11 +36,8 @@ ValueRangeMarker::ValueRangeMarker(const InputParameters & parameters) _lower_bound(parameters.get("lower_bound")), _upper_bound(parameters.get("upper_bound")), _buffer_size(parameters.get("buffer_size")), - _third_state(getParam("third_state").getEnum()), _inside(getParam("invert") ? COARSEN : REFINE), - _outside(getParam("invert") ? REFINE : COARSEN), - - _u(coupledValue("variable")) + _outside(getParam("invert") ? REFINE : COARSEN) { if (_upper_bound < _lower_bound) mooseError("Invalid bounds specified (upper_bound < lower_bound)"); diff --git a/framework/src/markers/ValueThresholdMarker.C b/framework/src/markers/ValueThresholdMarker.C index d6f936de2c7f..bd9847ff800b 100644 --- a/framework/src/markers/ValueThresholdMarker.C +++ b/framework/src/markers/ValueThresholdMarker.C @@ -17,27 +17,14 @@ template <> InputParameters validParams() { - InputParameters params = validParams(); + InputParameters params = validParams(); - MooseEnum third_state("DONT_MARK=-1 COARSEN DO_NOTHING REFINE", "DONT_MARK"); - params.addParam( - "third_state", - third_state, - "The Marker state to apply to values falling in-between the coarsen and refine thresholds."); params.addParam("coarsen", "The threshold value for coarsening. Elements with variable " "values beyond this will be marked for coarsening."); params.addParam("refine", "The threshold value for refinement. Elements with variable " "values beyond this will be marked for refinement."); - params.addParam("invert", - false, - "If this is true then values _below_ 'refine' will be " - "refined and _above_ 'coarsen' will be coarsened."); - params.addRequiredCoupledVar("variable", - "The values of this variable will be compared to " - "'refine' and 'coarsen' to see what should be done with " - "the element"); params.addClassDescription( "The the refinement state based on a threshold value compared to the specified variable."); return params; @@ -49,11 +36,7 @@ ValueThresholdMarker::ValueThresholdMarker(const InputParameters & parameters) _coarsen(parameters.get("coarsen")), _refine_set(parameters.isParamValid("refine")), _refine(parameters.get("refine")), - - _invert(parameters.get("invert")), - _third_state(getParam("third_state").getEnum()), - - _u(coupledValue("variable")) + _invert(parameters.get("invert")) { if (_refine_set && _coarsen_set) { diff --git a/framework/src/meshgenerators/AllSideSetsByNormalsGenerator.C b/framework/src/meshgenerators/AllSideSetsByNormalsGenerator.C index 96d396e01d1c..04d4c8f69261 100644 --- a/framework/src/meshgenerators/AllSideSetsByNormalsGenerator.C +++ b/framework/src/meshgenerators/AllSideSetsByNormalsGenerator.C @@ -39,15 +39,14 @@ validParams() AllSideSetsByNormalsGenerator::AllSideSetsByNormalsGenerator(const InputParameters & parameters) : SideSetsGeneratorBase(parameters), _input(getMesh("input")) { - if (typeid(_input).name() == typeid(DistributedMesh).name()) - mooseError("AllSideSetsByNormalsGenerator only works with ReplicatedMesh."); } std::unique_ptr AllSideSetsByNormalsGenerator::generate() { - std::unique_ptr mesh = std::move(_input); + _mesh->errorIfDistributedMesh("AddAllSideSetsByNormals"); + std::unique_ptr mesh = std::move(_input); setup(*mesh); // Get the current list of boundaries so we can generate new ones that won't conflict diff --git a/framework/src/userobject/PerflogDumper.C b/framework/src/userobject/PerflogDumper.C deleted file mode 100644 index 8d6e6bd3ccd0..000000000000 --- a/framework/src/userobject/PerflogDumper.C +++ /dev/null @@ -1,56 +0,0 @@ -//* This file is part of the MOOSE framework -//* https://www.mooseframework.org -//* -//* All rights reserved, see COPYRIGHT for full restrictions -//* https://github.com/idaholab/moose/blob/master/COPYRIGHT -//* -//* Licensed under LGPL 2.1, please see LICENSE for details -//* https://www.gnu.org/licenses/lgpl-2.1.html - -#include "PerflogDumper.h" -#include "libmesh/perf_log.h" - -#include - -registerMooseObject("MooseApp", PerflogDumper); - -template <> -InputParameters -validParams() -{ - InputParameters params = validParams(); - params.set("execute_on") = EXEC_FINAL; - params.addParam("outfile", "perflog.csv", "name of perf log output file"); - params.addClassDescription("Dumps perlog information to a csv file for further analysis."); - return params; -} - -PerflogDumper::PerflogDumper(const InputParameters & parameters) : GeneralUserObject(parameters) {} - -void -PerflogDumper::execute() -{ -#ifdef LIBMESH_ENABLE_DEPRECATED - auto & log = Moose::perf_log.get_log_raw(); - std::ofstream f(_pars.get("outfile")); - if (!f.good()) - mooseError("PerfLogDumper: error opening file '", _pars.get("outfile"), "'"); - - f << "category,subcategory,n_calls,tot_time_self,tot_time_cum\n"; - for (auto & entry : log) - { - const std::string & cat = entry.first.first; - const std::string & subcat = entry.first.second; - const PerfData & data = entry.second; - - f << "\"" << cat << "\"" - << ",\"" << subcat << "\"" - << "," << data.count << "," << data.tot_time << "," << data.tot_time_incl_sub << "\n"; - } - if (!f.good()) - mooseError("PerfLogDumper: error writing file '", _pars.get("outfile"), "'"); -#else - mooseWarning("The version of libMesh you are using does not support direct access " - "to the underlying PerfLog container, no log information will be dumped."); -#endif -} diff --git a/framework/src/userobject/UserObject.C b/framework/src/userobject/UserObject.C index 225cee205977..b8920d2d0775 100644 --- a/framework/src/userobject/UserObject.C +++ b/framework/src/userobject/UserObject.C @@ -62,15 +62,3 @@ UserObject::UserObject(const InputParameters & parameters) _duplicate_initial_execution(getParam("allow_duplicate_execution_on_initial")) { } - -UserObject::~UserObject() {} - -void -UserObject::load(std::ifstream & /*stream*/) -{ -} - -void -UserObject::store(std::ofstream & /*stream*/) -{ -} diff --git a/test/src/markers/QPointMarker.C b/test/src/markers/QPointMarker.C index 6cddfffc929c..55ca99a0672c 100644 --- a/test/src/markers/QPointMarker.C +++ b/test/src/markers/QPointMarker.C @@ -17,7 +17,7 @@ template <> InputParameters validParams() { - InputParameters params = validParams(); + InputParameters params = validParams(); return params; } diff --git a/test/tests/markers/q_point_marker/q_point_marker.i b/test/tests/markers/q_point_marker/q_point_marker.i index 8825d9dce0c4..e4f062a8812e 100644 --- a/test/tests/markers/q_point_marker/q_point_marker.i +++ b/test/tests/markers/q_point_marker/q_point_marker.i @@ -51,6 +51,7 @@ [./Markers] [./marker] type = QPointMarker + variable = u [../] [../] [] @@ -58,4 +59,3 @@ [Outputs] exodus = true [] - diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/gold/less_simple_in.e b/test/tests/meshgenerators/add_all_side_sets_generators/gold/less_simple_in.e new file mode 100644 index 000000000000..1f9a8d20b42a Binary files /dev/null and b/test/tests/meshgenerators/add_all_side_sets_generators/gold/less_simple_in.e differ diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/gold/simple_in.e b/test/tests/meshgenerators/add_all_side_sets_generators/gold/simple_in.e new file mode 100644 index 000000000000..664a6f43d579 Binary files /dev/null and b/test/tests/meshgenerators/add_all_side_sets_generators/gold/simple_in.e differ diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/less_simple.i b/test/tests/meshgenerators/add_all_side_sets_generators/less_simple.i new file mode 100644 index 000000000000..5a6373971f38 --- /dev/null +++ b/test/tests/meshgenerators/add_all_side_sets_generators/less_simple.i @@ -0,0 +1,17 @@ +[MeshGenerators] + [read] + type = FileMeshGenerator + file = reactor.e + [] + [block_1] + type = AllSideSetsByNormalsGenerator + input = read + [] +[] + +[Mesh] + type = MeshGeneratorMesh +[] + +# This input file is intended to be run with the "--mesh-only" option so +# no other sections are required diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/reactor.e b/test/tests/meshgenerators/add_all_side_sets_generators/reactor.e new file mode 100644 index 000000000000..57e4dda9a191 Binary files /dev/null and b/test/tests/meshgenerators/add_all_side_sets_generators/reactor.e differ diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/simple.i b/test/tests/meshgenerators/add_all_side_sets_generators/simple.i new file mode 100644 index 000000000000..d65d38bd8ed1 --- /dev/null +++ b/test/tests/meshgenerators/add_all_side_sets_generators/simple.i @@ -0,0 +1,17 @@ +[MeshGenerators] + [read] + type = FileMeshGenerator + file = twoblocks.e + [] + [block_1] + type = AllSideSetsByNormalsGenerator + input = read + [] +[] + +[Mesh] + type = MeshGeneratorMesh +[] + +# This input file is intended to be run with the "--mesh-only" option so +# no other sections are required diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/tests b/test/tests/meshgenerators/add_all_side_sets_generators/tests new file mode 100644 index 000000000000..ef3b8debe4c3 --- /dev/null +++ b/test/tests/meshgenerators/add_all_side_sets_generators/tests @@ -0,0 +1,27 @@ +[Tests] + [./simple] + type = 'Exodiff' + input = 'simple.i' + exodiff = 'simple_in.e' + cli_args = '--mesh-only' + recover = false + mesh_mode = 'REPLICATED' + + requirement = "The system shall support automatic addition of sidesets based on outward facing normals of the mesh." + issues = '#3306' + design = 'AllSideSetsByNormalsGenerator.md' + [../] + + [./less_simple] + type = 'Exodiff' + input = 'less_simple.i' + exodiff = 'less_simple_in.e' + cli_args = '--mesh-only' + recover = false + mesh_mode = 'REPLICATED' + + requirement = "The system shall group automatically added sidesets when multiple surfaces share the same outward facing normal." + issues = '#3306' + design = 'AllSideSetsByNormalsGenerator.md' + [../] +[] \ No newline at end of file diff --git a/test/tests/meshgenerators/add_all_side_sets_generators/twoblocks.e b/test/tests/meshgenerators/add_all_side_sets_generators/twoblocks.e new file mode 100644 index 000000000000..6e2193cd5634 Binary files /dev/null and b/test/tests/meshgenerators/add_all_side_sets_generators/twoblocks.e differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.0 b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.0 new file mode 100644 index 000000000000..dc94629c4c0a Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.0 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.1 b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.1 new file mode 100644 index 000000000000..e63d469a26cd Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.1 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.2 b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.2 new file mode 100644 index 000000000000..edf068fc7451 Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.2 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.3 b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.3 new file mode 100644 index 000000000000..5cf109411578 Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_distributed.e.4.3 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.0 b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.0 new file mode 100644 index 000000000000..9b571dc67757 Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.0 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.1 b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.1 new file mode 100644 index 000000000000..3b7af1fae348 Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.1 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.2 b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.2 new file mode 100644 index 000000000000..c333b4c247d3 Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.2 differ diff --git a/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.3 b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.3 new file mode 100644 index 000000000000..d90761a7e8f1 Binary files /dev/null and b/test/tests/outputs/nemesis/gold/nemesis_scalar_replicated.e.4.3 differ diff --git a/test/tests/outputs/nemesis/nemesis_elemental.i b/test/tests/outputs/nemesis/nemesis_elemental.i index 4c7bb60350bc..f6ff607569a5 100644 --- a/test/tests/outputs/nemesis/nemesis_elemental.i +++ b/test/tests/outputs/nemesis/nemesis_elemental.i @@ -55,8 +55,5 @@ [Outputs] execute_on = 'timestep_end' - console = true - [./out] - type = Nemesis - [../] + nemesis = true [] diff --git a/test/tests/outputs/nemesis/nemesis_scalar.i b/test/tests/outputs/nemesis/nemesis_scalar.i new file mode 100644 index 000000000000..7d29665eaf77 --- /dev/null +++ b/test/tests/outputs/nemesis/nemesis_scalar.i @@ -0,0 +1,90 @@ +[Mesh] + type = GeneratedMesh + dim = 1 + xmin = 0 + xmax = 1 + nx = 4 +[] + + +[Variables] + [./f] + family = SCALAR + order = FIRST + initial_condition = 1 + [../] + [./f_times_mult] + family = SCALAR + order = FIRST + initial_condition = 1 + [../] +[] + +[ScalarKernels] + [./dT] + type = CoupledODETimeDerivative + variable = f + v = f_times_mult + [../] + + [./src] + type = ParsedODEKernel + variable = f + function = '-1' + [../] + + [./f_times_mult_1] + type = ParsedODEKernel + variable = f_times_mult + function = 'f_times_mult' + [../] + + [./f_times_mult_2] + type = ParsedODEKernel + variable = f_times_mult + function = '-f * g' + args = 'f g' + [../] +[] + +[AuxVariables] + [./g] + family = SCALAR + order = FIRST + [../] +[] + +[Functions] + [./function_g] + type = ParsedFunction + value = '(1 + t)' + [../] +[] + +[AuxScalarKernels] + [./set_g] + type = FunctionScalarAux + function = function_g + variable = g + execute_on = 'linear initial' + [../] +[] + +[Postprocessors] + [./f] + type = ScalarVariable + variable = f + execute_on = 'initial timestep_end' + [../] +[] + +[Executioner] + type = Transient + dt = 1 + num_steps = 3 + nl_abs_tol = 1e-9 +[] + +[Outputs] + nemesis = true +[] diff --git a/test/tests/outputs/nemesis/tests b/test/tests/outputs/nemesis/tests index 30612ec24236..00a3c11c9c3a 100644 --- a/test/tests/outputs/nemesis/tests +++ b/test/tests/outputs/nemesis/tests @@ -5,6 +5,10 @@ input = 'nemesis.i' check_files = 'nemesis_out.e.1.0' max_parallel = 1 + + requirement = "The Nemesis Output object shall output separate files per process for visualization purposes." + design = 'Outputs/index.md' + issues = '#2122' [../] [./nemesis_elemental_replicated] type = 'Exodiff' @@ -15,12 +19,12 @@ # different in the DistributedMesh case, so we can't reuse the # gold file. mesh_mode = replicated - cli_args = 'Outputs/out/file_base=nemesis_elemental_replicated' + cli_args = 'Outputs/file_base=nemesis_elemental_replicated' min_parallel = 4 max_parallel = 4 # We require a recent version of PETSc so that a version of METIS/ParMETIS with a portable RNG is used. petsc_version = '>=3.8.0' - requirement = "The Nemesis Ouput object shall support writing elemental variables." + requirement = "The Nemesis Output object shall support writing elemental variables." design = 'Outputs/index.md' issues = '#2122' [../] @@ -29,13 +33,47 @@ input = nemesis_elemental.i exodiff = 'nemesis_elemental_distributed.e.4.0 nemesis_elemental_distributed.e.4.1 nemesis_elemental_distributed.e.4.2 nemesis_elemental_distributed.e.4.3' mesh_mode = distributed - cli_args = 'Outputs/out/file_base=nemesis_elemental_distributed' + cli_args = 'Outputs/file_base=nemesis_elemental_distributed' + min_parallel = 4 + max_parallel = 4 + # We require a recent version of PETSc so that a version of METIS/ParMETIS with a portable RNG is used. + petsc_version = '>=3.8.0' + requirement = "The Nemesis Output object shall support writing elemental variables with the same numbering on DistributedMesh." + design = 'Outputs/index.md' + issues = '#2122' + [../] + [./nemesis_scalar_replicated] + type = 'Exodiff' + input = nemesis_scalar.i + exodiff = 'nemesis_scalar_replicated.e.4.0 nemesis_scalar_replicated.e.4.1 nemesis_scalar_replicated.e.4.2 nemesis_scalar_replicated.e.4.3' + # We want to make sure scalar variable writing works for + # ReplicatedMesh too, and the node numbering/partitioning will be + # different in the DistributedMesh case, so we can't reuse the + # gold file. + mesh_mode = replicated + cli_args = 'Outputs/file_base=nemesis_scalar_replicated' + min_parallel = 4 + max_parallel = 4 + # We require a recent version of PETSc so that a version of METIS/ParMETIS with a portable RNG is used. + petsc_version = '>=3.8.0' + requirement = "The Nemesis Ouput object shall support writing scalar variables." + design = 'Outputs/index.md' + issues = '#2122' + recover = false + [../] + [./nemesis_scalar_distributed] + type = 'Exodiff' + input = nemesis_scalar.i + exodiff = 'nemesis_scalar_distributed.e.4.0 nemesis_scalar_distributed.e.4.1 nemesis_scalar_distributed.e.4.2 nemesis_scalar_distributed.e.4.3' + mesh_mode = distributed + cli_args = 'Outputs/file_base=nemesis_scalar_distributed' min_parallel = 4 max_parallel = 4 # We require a recent version of PETSc so that a version of METIS/ParMETIS with a portable RNG is used. petsc_version = '>=3.8.0' - requirement = "The Nemesis Ouput object shall support writing elemental variables." + requirement = "The Nemesis Ouput object shall support writing scalar variables when using DistributedMesh." design = 'Outputs/index.md' issues = '#2122' + recover = false [../] [] diff --git a/test/tests/outputs/output_on/tests b/test/tests/outputs/output_on/tests index 1f27fbcb7625..5470d39df97c 100644 --- a/test/tests/outputs/output_on/tests +++ b/test/tests/outputs/output_on/tests @@ -1,8 +1,21 @@ [test] + issues = '#4454' + design = 'outputs/Console.md' [./postprocessor] # Test the the postprocessors are outputting on nonlinear residuals type = 'RunApp' input = 'postprocessors.i' expect_out = '\|\s*1.003000e-01\s\|' + + requirement = 'The system shall allow the user to select different console output intervals.' + [../] + [./show_outputs] + # Test the the postprocessors are outputting on nonlinear residuals + type = 'RunApp' + input = 'postprocessors.i' + cli_args = '--show-outputs Outputs/exodus=true' + expect_out = 'Outputs.*?console.*?INITIAL.*exodus.*?INITIAL' + + requirement = 'The system shall display active output information with corresponding execute flags.' [../] [] diff --git a/test/tests/parser/hit_dump/tests b/test/tests/parser/hit_dump/tests new file mode 100644 index 000000000000..8b966fc904e5 --- /dev/null +++ b/test/tests/parser/hit_dump/tests @@ -0,0 +1,28 @@ +[Tests] + [./hit_registry] + # Make sure --registry-hit CLI option is working + type = RunApp + cli_args = '--registry-hit' + expect_out = "label =.*?type =.*?name =.*?class =.*?file =.*?" + input = 'IGNORED' + input_switch = '' + method = '!DBG' + + requirement = "The system shall output all registered objects in HIT format." + design = 'command_line_usage.md' + issues = '#10952' + [../] + [./registry] + # Make sure --registry CLI option is working + type = RunApp + cli_args = '--registry' + expect_out = "MooseApp\s+object\s+FileMesh\s+FileMesh.*?FileMesh.C" + input = 'IGNORED' + input_switch = '' + method = '!DBG' + + requirement = "The system shall output all registered objects in single line format." + design = 'command_line_usage.md' + issues = '#10952' + [../] +[] diff --git a/unit/src/MathUtilsTest.C b/unit/src/MathUtilsTest.C index 629a12004854..2abd7f1fd027 100644 --- a/unit/src/MathUtilsTest.C +++ b/unit/src/MathUtilsTest.C @@ -18,3 +18,95 @@ TEST(MathUtilsTest, pow) ASSERT_DOUBLE_EQ(MathUtils::pow(1.2345, -13), std::pow(1.2345, -13)); ASSERT_DOUBLE_EQ(MathUtils::pow(-0.99542, -8), std::pow(-0.99542, -8)); } + +TEST(MathUtilsTest, poly1Log) +{ + std::vector> table = {{0.2, 0.001, 0, -1.60944}, + {0.2, 0.001, 1, 5.0}, + {0.2, 0.001, 2, -25.0}, + {0.2, 0.001, 3, 250.0}, + {0.001, 0.002, 0, -6.71461}, + {0.001, 0.002, 1, 500.0}, + {0.001, 0.002, 2, 0.0}, + {0.001, 0.002, 3, 0.0}}; + + for (unsigned int i = 0; i < table.size(); ++i) + EXPECT_NEAR(MathUtils::poly1Log(table[i][0], table[i][1], static_cast(table[i][2])), + table[i][3], + 1.e-5); +} + +TEST(MathUtilsTest, poly2Log) +{ + std::vector> table = {{0.2, 0.001, 0, -1.60944}, + {0.2, 0.001, 1, 5.0}, + {0.2, 0.001, 2, -25.0}, + {0.2, 0.001, 3, 250.0}, + {0.001, 0.002, 0, -6.83961}, + {0.001, 0.002, 1, 750.0}, + {0.001, 0.002, 2, -250000}, + {0.001, 0.002, 3, 0.0}}; + + for (unsigned int i = 0; i < table.size(); ++i) + EXPECT_NEAR(MathUtils::poly2Log(table[i][0], table[i][1], static_cast(table[i][2])), + table[i][3], + 1.e-5); +} + +TEST(MathUtilsTest, poly3Log) +{ + std::vector> table = {{0.2, 0.001, 0, -1.60944}, + {0.2, 0.001, 1, 5.0}, + {0.2, 0.001, 2, -25.0}, + {0.2, 0.001, 3, 250.0}, + {0.001, 0.002, 0, -6.88127}, + {0.001, 0.002, 1, 875.0}, + {0.001, 0.002, 2, -500000}, + {0.001, 0.002, 3, 2.5e+08}}; + + for (unsigned int i = 0; i < table.size(); ++i) + EXPECT_NEAR(MathUtils::poly3Log(table[i][0], table[i][1], static_cast(table[i][2])), + table[i][3], + 1.e-5); +} + +TEST(MathUtilsTest, poly4Log) +{ + std::vector> table = {{0.2, 0.001, 0, -1.60944}, + {0.2, 0.001, 1, 5.0}, + {0.2, 0.001, 2, -25.0}, + {0.2, 0.001, 3, 250.0}, + {0.001, 0.002, 0, -6.90575}, + {0.001, 0.002, 1, 984.375}, + {0.001, 0.002, 2, -890625}, + {0.001, 0.002, 3, 1.3125e+09}}; + + for (unsigned int i = 0; i < table.size(); ++i) + EXPECT_NEAR(MathUtils::poly4Log(table[i][0], table[i][1], static_cast(table[i][2])), + table[i][3], + 1.e-5); +} + +TEST(MathUtilsTest, TaylorLog) +{ + std::vector> table = {{0.0, -2.5119769}, + {0.01, -2.4384881}, + {0.1, -1.9049717}, + {1.0, 0.0}, + {2.5, 0.92910611}, + {17.9, 2.8807267}, + {123.1, 3.6048257}, + {32846.7, 3.7558348}}; + + for (unsigned int i = 0; i < table.size(); ++i) + EXPECT_NEAR(MathUtils::taylorLog(table[i][0]), table[i][1], 1.e-5); +} + +TEST(MathUtilsTest, round) +{ + std::vector> table = { + {0.2, 0}, {0.5, 1}, {0.7, 1}, {1.2, 1}, {10.7, 11}, {-0.1, -0}, {-0.7, -1}, {-10.5, -11}}; + + for (unsigned int i = 0; i < table.size(); ++i) + EXPECT_NEAR(MathUtils::round(table[i][0]), table[i][1], 1.e-5); +}