Skip to content
Permalink
Browse files

Merge pull request #13531 from permcody/SQA_specs

SQA specs
  • Loading branch information...
aeslaughter committed Jun 11, 2019
2 parents d7c5d81 + c77a316 commit 8234fdf27832fab04dd0a3514481b5f1124f7f81
@@ -0,0 +1,5 @@
# BilinearInterpolation

The BilinearInterpolation utility applies the Least Squares algorithm to a set of points to provide a piecewise reconstruction
of a surface in 2D. A set of points in both x and y must be provided in conjunction with a set of dependent values (z-values)
to construct the surface. This object is normally not used directly. Instead it is used throught the [PiecewiseBilinear.md] object.
@@ -0,0 +1,21 @@
# InputParameters

To simplify and unify the creation of all simulation objects in MOOSE, all input parameters must be declared and populated through
a single "InputParameters" object. This ensures that every constructor in MOOSE is uniform and ensures that every object
can be created through MOOSE's Factory pattern. The InputParameters object is a collection of parameters, each one with
seperate attributes that can be used to finely control the behavior of the underlying object. For example, parameters can be
marked as required or optional, be provided with a default or not, and be used to enhance GUI interfaces that may be used to
programmatically generate input files for MOOSE.

The complete list of attributes for each input parameter:

!listing framework/include/utils/InputParameters.h start=struct Metadata end=Metadata & at

## Applying or Transferring Common Parameters

When building a custom Action, it is often useful to read in several parameters that will be used to directly set
parameters on objects being built by the custom Action. The `InputParameters` object contains a few useful methods for
applying or transferring common parameters to avoid several manual lines for setting these parameters. See the utility methods
and corresponding documentation here:

!listing framework/include/utils/InputParameters.h start=BEGIN APPLY PARAMETER METHODS end=END APPLY PARAMETER METHODS
@@ -1,5 +1,12 @@
# Partitioner System

The Partitioner System allows the developer to control the partioning process
to split up a mesh among two or more processors. There are several partitioners
available in both PETSc and libMesh which can be directly dialed up through the
MOOSE input file via the [/LibmeshPartitioner.md] and [/PetscExternalPartitioner.md]
objects. Custom Partitioners may be built by inherting from MoosePartitioner.md
and overridding the special `_do_parition()` method (from libMesh's partitioner).

!syntax list /Mesh/Partitioner objects=True actions=False subsystems=False

!syntax list /Mesh/Partitioner objects=False actions=False subsystems=True
@@ -142,3 +142,9 @@ that are currently representing the domain but doesn't include "coarse parents"
active during a coarsening step. The difference however is that unique_ids are never reused, but ids +might+ be.
Generally the id is "good-enough" for almost all use, but if you need guarentees that an element id is never
recycled (because it might be a key to an important map), you should use unique_id.

## Periodic Node Map

The MooseMesh object has a method for building a map (technically a multimap) of paired periodic nodes in the
simulation. This map provides a quick lookup of all paired nodes on a periodic boundary. in the 2D and 3D cases
each corner node will map to 2 or 3 other nodes (respectively).
@@ -613,6 +613,7 @@ class InputParameters : public Parameters
*/
bool hasDefaultPostprocessorValue(const std::string & name) const;

// BEGIN APPLY PARAMETER METHODS
/**
* Method for applying common parameters
* @param common The set of parameters to apply to the parameters stored in this object
@@ -668,6 +669,7 @@ class InputParameters : public Parameters
void applyParameter(const InputParameters & common,
const std::string & common_name,
bool allow_private = false);
// END APPLY PARAMETER METHODS

/**
* Apply properties of a single coupled variable in common, to a single coupled variable stored in
@@ -0,0 +1,21 @@
# Pseudo Random Number Generation in MOOSE

MOOSE currently distributes a high-quality efficient Pseudo Random Number Generator package (mtwist) that is stable
across different machine architectures. This random number generator is tied into MOOSE's random number generator system
that can generate consistent spatial random number fields as parallel discritization changes (e.g. the number of threads/processors
does not impact generated fields). The random number interface is very straighforward to use.

!alert note
MOOSE does not currently use a forwardable PRNG - this would be a nice enhancment to the framework and would dramatically improve
the performance of random number generators on distributed meshes and at very large scales.

## Random Number Fields

The objects in MOOSE that produce fields can directly call `getRandomLong()` or `getRandomReal()` to access the parallel stable
random number objects in MOOSE. Generally, the only user parameter that needs to be called or set is `setRandomResetFrequency()`.
This method controls how often the individual generators are reset. That is when they are told to replay a set of numbers.
Typically, if the random field is used in a kernel, boundary condition, or any other object that impacts the Residual statement,
you don't want to be producing new random numbers with each linear iteration as this can impact the convergence of the solver.
You can avoid this problem If you "reset" the random number generators every "linear" iteration, meaning that the same random
numbers are replayed each and every linear iteration. Other options are "nonlinear" and "initial" (the latter option is effectively
no resetting).
@@ -4,6 +4,8 @@ MOOSE contains objects that provide utility functionality, which may be used to
Examples of these utilities include interpolation objects, function "fit" objects, file readers, tensor objects, etc.
These objects are documented here.

[FormattedTable](FormattedTable.md)
[FormattedTable.md]

[MathUtils](MathUtils.md)
[InputParameters.md]

[MathUtils.md]
@@ -17,7 +17,12 @@ template <>
InputParameters validParams<PeriodicNodeMapTester>();

/**
* Test MooseMesh::buildPeriodicNodeMap()
* Test object to verify that the map built by MooseMesh::buildPeriodicNodeMap() contains all
* necessary entries. In particular this object is designed to verify corner cases (e.g. in 2D
* with both directions being assigned periodicity this object verifies that each corner maps to
* two other corners for a total of 8 corner entries, there are 27 in 3D). This object doesn't
* return anything but produces errors for missing entries and warnings for corner nodes with fewer
* than expected pairings.
*/
class PeriodicNodeMapTester : public ElementUserObject
{
@@ -34,17 +39,16 @@ class PeriodicNodeMapTester : public ElementUserObject

protected:
/// Coupled variable id
unsigned int _v_var;
const unsigned int _v_var;

/// mesh dimension
unsigned int _dim;
const unsigned int _dim;

///@{ periodic size per component
std::array<Real, LIBMESH_DIM> _periodic_min;
std::array<Real, LIBMESH_DIM> _periodic_max;
///@}

/// We time the periodic node list build ourselves to ste the level to 1
PerfID _perf_buildmap;
const PerfID _perf_buildmap;
};

@@ -4,5 +4,9 @@
input = 'concentric_circle_mesh.i'
exodiff = 'concentric_circle_mesh_out.e'
mesh_mode = REPLICATED

requirement = 'The system shall generate a quadrilateral mesh consisting of concentric circles.'
issues = '#11656'
design = 'ConcentricCircleMesh.md'
[../]
[]
@@ -5,5 +5,9 @@
exodiff = 'gmsh_test_in.e'
cli_args = '--mesh-only'
recover = false

requirement = 'The system shall read GMesh (.msh) format file meshes.'
issues = '#2105'
design = 'FileMesh.md'
[../]
[]
@@ -3,5 +3,9 @@
type = 'Exodiff'
input = 'gmsh_bc_test.i'
exodiff = 'gmsh_bc_test_out.e'

requirement = 'The system shall read GMesh (.msh) format file meshes containing multiple boundaries.'
issues = '#1402'
design = 'FileMesh.md'
[../]
[]
Binary file not shown.
@@ -1,45 +1,51 @@
[Tests]
[./test]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_out.e'
[../]

# 2D elements
issues = '#4989 #5021'
design = 'Mesh/index.md'

[./test_quad4_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_quad4_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=QUAD4 Outputs/file_base=high_order_elems_quad4_refine_out'

requirement = 'The system shall support refinement of QUAD4 mesh elements.'
[../]

[./test_quad8_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_quad8_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=QUAD8 Variables/u/order=SECOND Outputs/file_base=high_order_elems_quad8_refine_out'

requirement = 'The system shall support refinement of QUAD8 mesh elements.'
[../]

[./test_quad9_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_quad9_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=QUAD9 Variables/u/order=SECOND Outputs/file_base=high_order_elems_quad9_refine_out'

requirement = 'The system shall support refinement of QUAD9 mesh elements.'
[../]

[./test_tri3_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_tri3_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=TRI3 Outputs/file_base=high_order_elems_tri3_refine_out'

requirement = 'The system shall support refinement of TRI3 mesh elements.'
[../]

[./test_tri6_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_tri6_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=TRI6 Variables/u/order=SECOND Outputs/file_base=high_order_elems_tri6_refine_out'

requirement = 'The system shall support refinement of TRI6 mesh elements.'
[../]

# 3D elements
@@ -49,48 +55,62 @@
input = 'high_order_elems.i'
exodiff = 'high_order_elems_hex8_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=HEX8 Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_hex8_refine_out'

requirement = 'The system shall support refinement of HEX8 mesh elements.'
[../]

[./test_hex20_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_hex20_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=HEX20 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_hex20_refine_out'

requirement = 'The system shall support refinement of HEX20 mesh elements.'
[../]

[./test_hex27_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_hex27_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=HEX27 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_hex27_refine_out'

requirement = 'The system shall support refinement of HEX27 mesh elements.'
[../]

[./test_tet4_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_tet4_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=TET4 Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_tet4_refine_out'

requirement = 'The system shall support refinement of TET4 mesh elements.'
[../]

[./test_tet10_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_tet10_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=TET10 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=1 Mesh/ny=1 Mesh/nz=1 Outputs/file_base=high_order_elems_tet10_refine_out'

requirement = 'The system shall support refinement of TET10 mesh elements.'
[../]

[./test_prism6_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_prism6_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=PRISM6 Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_prism6_refine_out'

requirement = 'The system shall support refinement of PRISM6 mesh elements.'
[../]

[./test_prism15_refine]
type = 'Exodiff'
input = 'high_order_elems.i'
exodiff = 'high_order_elems_prism15_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=PRISM15 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_prism15_refine_out'

requirement = 'The system shall support refinement of PRISM15 mesh elements.'
[../]

# Note: Paraview (as of version 4.1.0) does not correctly display Prism18 elements
@@ -99,6 +119,8 @@
input = 'high_order_elems.i'
exodiff = 'high_order_elems_prism18_refine_out.e'
cli_args = 'Mesh/uniform_refine=1 Mesh/elem_type=PRISM18 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_prism18_refine_out'

requirement = 'The system shall support refinement of PRISM18 mesh elements.'
[../]

# Libmesh (still!) does not support uniform or adaptive refinement of pyramids
@@ -107,6 +129,8 @@
input = 'high_order_elems.i'
exodiff = 'high_order_elems_pyramid5_out.e'
cli_args = 'Mesh/elem_type=PYRAMID5 Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_pyramid5_out'

requirement = 'The system shall support refinement of PYRAMID5 mesh elements.'
[../]

# Libmesh (still!) does not support uniform or adaptive refinement of pyramids
@@ -116,6 +140,8 @@
input = 'high_order_elems.i'
exodiff = 'high_order_elems_pyramid13_out.e'
cli_args = 'Mesh/elem_type=PYRAMID13 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_pyramid13_out'

requirement = 'The system shall support refinement of PYRAMID13 mesh elements.'
[../]

# Libmesh (still!) does not support uniform or adaptive refinement of pyramids
@@ -125,6 +151,8 @@
input = 'high_order_elems.i'
exodiff = 'high_order_elems_pyramid14_out.e'
cli_args = 'Mesh/elem_type=PYRAMID14 Variables/u/order=SECOND Mesh/dim=3 Mesh/nx=2 Mesh/ny=2 Mesh/nz=2 Outputs/file_base=high_order_elems_pyramid14_out'

requirement = 'The system shall support refinement of PYRAMID14 mesh elements.'
[../]

[]
@@ -1,16 +1,21 @@
[Tests]
design = "Mesh/index.md"
[./test_names]
type = 'Exodiff'
input = 'named_entities_test.i'
exodiff = 'named_entities_test_out.e'
max_parallel = 1

requirement = "The system shall support interchangeable use of integer and string identifiers for mesh entities."
issues = "#979"
[../]

[./test_names_xda]
type = 'Exodiff'
input = 'named_entities_test_xda.i'
exodiff = 'named_entities_test_xda_out.e'
max_parallel = 1

requirement = "The system shall support interchangeable use of integer and string identifiers for mesh entities read from the XDA format."
issues = "#1055"
[../]

[./test_periodic_names]
@@ -20,11 +25,17 @@
group = 'periodic'
abs_zero = 1e-6
rel_err = 1e-5

requirement = "The system shall support interchangeable use of integer and string identifiers within the BCs/Periodic block."
issues = "#979"
[../]

[./on_the_fly_test]
type = 'Exodiff'
input = 'name_on_the_fly.i'
exodiff = 'name_on_the_fly_out.e'

requirement = "The system shall support the ability to assign and use string names to mesh entities during the simulation startup."
issues = "#979"
[../]
[]
@@ -1,10 +1,15 @@
[Tests]
design = 'PatternedMesh.md'
issues = '#6950'

[./patterned_generation]
type = 'Exodiff'
input = 'patterned_mesh.i'
cli_args = '--mesh-only'
exodiff = 'patterned_mesh_in.e'
recover = false

requirement = 'The system shall generate a mesh using one or more meshes stitched into a pattern controlled by a 2D array.'
[../]

[./patterned_run]
@@ -13,5 +18,7 @@
exodiff = 'mesh_tester_out.e'
recover = false
prereq = 'patterned_generation'

requirement = 'The system shall read in a previously generated "patterned mesh" and run a simulation using that mesh.'
[../]
[]

0 comments on commit 8234fdf

Please sign in to comment.
You can’t perform that action at this time.