Reconstructed Discontinuous Galerkin Requirements Traceability Matrix
This template follows INL template TEM-214, "IT System Requirements Traceability Matrix."
This document serves as an addendum to Framework Requirements Traceability Matrix and captures information for RTM specific to the Reconstructed Discontinuous Galerkin module.
Introduction
Minimum System Requirements
In general, the following is required for MOOSE-based development:
A POSIX compliant Unix-like operating system. This includes any modern Linux-based operating system (e.g., Ubuntu, Fedora, Rocky, etc.), or a Macintosh machine running either of the last two MacOS releases.
Hardware | Information |
---|---|
CPU Architecture | x86_64, ARM (Apple Silicon) |
Memory | 8 GB (16 GBs for debug compilation) |
Disk Space | 30GB |
Libraries | Version / Information |
---|---|
GCC | 9.0.0 - 12.2.1 |
LLVM/Clang | 10.0.1 - 19 |
Intel (ICC/ICX) | Not supported at this time |
Python | 3.10 - 3.13 |
Python Packages | packaging pyaml jinja2 |
System Purpose
The MOOSE rDG module is a library for the implementation of simulation tools that solve convection-dominated problems using the class of so-called reconstructed discontinuous Galerkin (rDG) methods. The specific rDG method implemented in this module is rDG(P0P1), which is equivalent to the second-order cell-centered finite volume method (FVM). Cell-centered FVMs are regarded as a subset of rDG methods in the case when the baseline polynomial solution in each element is a constant monomial. The FVMs are the most widely used numerical methods in areas such as computational fluid dynamics (CFD) and heat transfer, computational acoustics, and magnetohydrodynamics (MHD).
System Scope
The purpose of this software is to provide capability to MOOSE-based applications to use a second-order, cell-centered finite volume method (FVM). This module provides a systematic solution for implementing all required components in a second-order FVM such as slope reconstruction, slope limiting, numerical flux, and proper boundary conditions. Additionally, this module provides an implementation of these components for the scalar advection equation.
Assumptions and Dependencies
The Reconstructed Discontinuous Galerkin module is developed using MOOSE and can itself be based on various MOOSE modules, as such the RTM for the Reconstructed Discontinuous Galerkin module is dependent upon the files listed at the beginning of this document.
Pre-test Instructions/Environment/Setup
Ideally all testing should be performed on a clean test machine following one of the supported configurations setup by the test system engineer. Testing may be performed on local workstations and cluster systems containing supported operating systems.
The repository should be clean prior to building and testing. When using "git" this can be done by doing a force clean in the main repository and each one of the submodules:
git clean -xfd
git submodule foreach 'git clean -xfd'
All tests must pass in accordance with the type of test being performed. This list can be found in the Software Test Plan.
Changelog Issue Revisions
Errors in changelog references can sometimes occur as a result of typos or conversion errors. If any need to be noted by the development team, they will be noted here.
The changelog for all code residing in the MOOSE repository is located in the MOOSE RTM.
System Requirements Traceability
Functional Requirements
- rdg: Auxkernels
- 10.1.1The system shall be able compute a component of the negative gradient of a variable.
Specification(s): test
Design: NegativeVariableGradientComponent
Issue(s): #62
Collection(s): FUNCTIONAL
Type(s): Exodiff
- rdg: Benchmarking
- 10.2.1The system shall be capable of solving an ion wall loss problem, as described in chapter 1, pages 26-27 of Principles of Plasma Discharge and Material Processing (ISBN 0-471-72001-1), and reproduce the same
- field variable results, and
- kinetic particle results.
Specification(s): lieberman/field_variables, lieberman/kinetic_data
Design: NegativeVariableGradientComponentParticleDataVectorPostprocessorUniformGridParticleInitializer
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- rdg: Kernels
- 10.3.1The system shall be able to solve a simple diffusion problem.
Specification(s): test
Design: Diffusion
Issue(s): #108
Collection(s): FUNCTIONAL
Type(s): Exodiff
- rdg: Raybcs
- 10.4.1The system shall be capable of reflecting computational particles off of boundaries and maintain consistent velocity data
- in a 1D domain
- in a 2D domain
- in a 3D domain
Specification(s): reflection/1d, reflection/2d, reflection/3d
Design: ReflectParticleBC
Issue(s): #39
Collection(s): FUNCTIONAL
Type(s): CSVDiff
- rdg: Userobjects
- 10.5.1The system shall support placing particles within a bounding box uniformly in a parallel consistent manner in the element type
- EDGE2
- TRI3
- QUAD4
- HEX8
- TET4
- PYRAMID5
- PRISM6
Specification(s): rays/edge2_rays, rays/tri3_rays, rays/quad4_rays, rays/hex8_rays, rays/tet4_rays, rays/pyramid5_rays, rays/prism6_rays
Design: ParticleInitializerBaseBoundingBoxParticleInitializerElementSampler
Issue(s): #42
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.2The system return a useful error when the user
- requests an element type that initialization has not been verified for
- tries to setup a bounding box where a component of bottom_left is greater than top_right
Specification(s): errors/unsupported_element, errors/top_right_less_than_bottom_left
Design: ParticleInitializerBaseBoundingBoxParticleInitializerElementSampler
Issue(s): #42
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 10.5.3The system return a useful warning to remind the user that the
- 2 extra components of the
bottom_left
andtop_right
inputs are ignored in 1D simulations - 1 extra component of the
bottom_left
andtop_right
inputs are ignored in 2D simulations
Specification(s): warnings/unused_input_warning_1d, warnings/unused_input_warning_2d
Design: ParticleInitializerBaseBoundingBoxParticleInitializerElementSampler
Issue(s): #42
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 2 extra components of the
- 10.5.4The system shall be capable of placing particles inside of EDGE2 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): edge2/fields, edge2/rays, edge2/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.5The system shall be capable of placing particles inside of QUAD4 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): quad4/fields, quad4/rays, quad4/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.6The system shall be capable of placing particles inside of TRI3 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): tri3/fields, tri3/rays, tri3/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.7The system shall be capable of placing particles inside of HEX8 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): hex8/fields, hex8/rays, hex8/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.8The system shall be capable of placing particles inside of PRISM6 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): prism6/fields, prism6/rays, prism6/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.9The system shall be capable of placing particles inside of PYRAMID5 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): pyramid5/fields, pyramid5/rays, pyramid5/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.10The system shall be capable of placing particles inside of TET4 elements uniformly
- and solve an electrostatic potential based on the particle positions
- in a parallel consistent manner
- and compute the error between an exact electrostatic potential and the finite element solution
Specification(s): tet4/fields, tet4/rays, tet4/errors
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONAL
Type(s): ExodiffCSVDiff
- 10.5.11The system return a useful error when the user
- requests an element type that initialization has not been verified for
- tries to give particles zero mass
- tries to give particles a negative mass
- does not provide enough distributions to sample for velocity initialization.
- tries to put 0 particles in each element.
- tries to request that a particle type be initialized with zero number density
- tries to request that a particle type be initialized with a negative number density
Specification(s): errors/unsupported_element, errors/zero_mass_requested, errors/negative_mass_requested, errors/too_few_distributions, errors/zero_particles_per_element_requested, errors/zero_number_density_requested, errors/negative_number_density_requested
Design: ParticleInitializerBasePerElementParticleInitializerElementSampler
Issue(s): #36
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 10.5.12The system shall be capable of placing particles on a uniform grid on the mesh
- in one dimension.
Specification(s): uniform_grid/1d
Design: UniformGridParticleInitializer
Issue(s): #61
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.13The system shall return a useful error when the user tries to use the UniformGridParticleInitializer in
- a two-dimensional simulation, and
- a three-dimensional simulation.
Specification(s): unsupported_dimensions/2d, unsupported_dimensions/3d
Design: UniformGridParticleInitializer
Issue(s): #61
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 10.5.14The system shall be capable of contributing to the residual of a variable based on the computational particles'
- charge density, and
- number density.
Specification(s): residual_accumulation/simple_potential_solve, residual_accumulation/number_density_accumulator
Design: ChargeDensityAccumulator
Issue(s): #25
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.15The system shall be capable of accurately capturing the path of charged particles in both an electric and a magnetic field
Specification(s): e_cross_b
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.16The system shall be capable of accurately capturing the path of charged particles in a perpendicular magnetic field
Specification(s): cyclotron_motion
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.17The system shall be capable of applying a linear impluse from a force field perpendicular to a particles initial velocity using the boris stepper when there is 0 magnetic field
Specification(s): projectile_motion
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.18The system shall be capable of applying a linear impluse from a force field parallel to a particles velocity using the boris stepper when there is 0 magnetic field
Specification(s): parallel_acceleration
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.19The system shall report a reasonable error from the particle stepper when
- the user does not provide 3 components of the electric field
- the user does not provide 3 components of the magnetic field
Specification(s): errors/too_few_efield_components, errors/too_few_bfield_components
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 10.5.20The system shall be capable of applying a linear impulse from a force field perpendicular to a particle\'s initial velocity
Specification(s): projectile_motion
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.21The system shall be capable of applying a linear impulse from a force field parallel to a particle's velocity
Specification(s): parallel_acceleration
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.5.22The system shall report a reasonable error from the particle stepper when
- the user does not provide 3 components of the force field
Specification(s): errors/too_few_field_components
Design: ParticleStepperBasePICStudyBase
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 10.5.23The system shall be capable of tracking 3 velocity components within the PIC capability while propagating rays in lower dimensions
Specification(s): simple_stepping
Design: ParticleStepperBasePICStudyBase
Issue(s): #4
Collection(s): FUNCTIONAL
Type(s): Exodiff
- rdg: Utils
- 10.6.1The system shall support the accumulation of point values as if they were point sources into an auxiliary field
Specification(s): test
Design: AuxAccumulator
Issue(s): #9
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.6.2The system shall report a reasonable error when accumulating point values into an auxiliary field when the system is not properly finalized
Specification(s): error
Design: AuxAccumulator
Issue(s): #9
Collection(s): FUNCTIONALFAILURE_ANALYSIS
Type(s): RunException
- 10.6.3The system shall support mapping data from rays to an aux variable and reset the aux variable to 0 on each time step
Specification(s): charge_mapping
Design: AuxAccumulator
Issue(s): #9
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.6.4The system shall support mapping data from rays to an aux variable and reset the aux variable to 0 on each time step on a 2 dimensional mesh
Specification(s): charge_mapping2D
Design: AuxAccumulator
Issue(s): #9
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.6.5The system shall support mapping data from rays to an aux variable and then solve differential equations based on the data mapped from rays
Specification(s): simple_potential_solve_aux
Design: AuxAccumulator
Issue(s): #9
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.6.6The system shall support the accumulation of point values as if they were point sources into a nonlinear field
Specification(s): test
Design: ResidualAccumulator
Issue(s): #16
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 10.6.7The system shall allow a ray to sample the value of field variable at any point in space as it moves through space
Specification(s): variable_sampling
Design: VariableSampler
Issue(s): #12
Collection(s): FUNCTIONAL
Type(s): Exodiff