Shifted Boundary Method 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 Requirement Traceability Matrix (RTM) specific to the Shifted Boundary Method 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 - 13.3.1 |
| LLVM/Clang | 14.0.6 - 19 |
| Intel (ICC/ICX) | Not supported at this time |
| Python | 3.10 - 3.13 |
| Python Packages | packaging pyaml jinja2 |
System Purpose
Summarize the reason(s) for the system being developed or modified.
The document must include the "system-purpose" template item, this can be included by adding the following to the markdown file (sqa/shifted_boundary_method_rtm.md):
!template! item key=system-purpose
Include text (in MooseDocs format) regarding the "system-purpose" template item here.
!template-end!System Scope
Delineate the following:
Identify the product(s) to be produced by name (Network Infrastructure, Host DBMS, Report Generator, HPC Server, etc.)
Explain what the product(s) will, and, if necessary, will not do
Describe the application of the product being specified, including relevant benefits, objectives, and goals.
Be consistent with similar statements in higher level specifications (e.g., business requirements specification).
The document must include the "system-scope" template item, this can be included by adding the following to the markdown file (sqa/shifted_boundary_method_rtm.md):
!template! item key=system-scope
Include text (in MooseDocs format) regarding the "system-scope" template item here.
!template-end!Assumptions and Dependencies
The Shifted Boundary Method module is developed using MOOSE and can itself be based on various MOOSE modules, as such the RTM for the Shifted Boundary Method 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.
If errors are found in issue references related to the changelog (e.g., commit history), these should be noted here. The commit in which the incorrect issue reference occurs should be listed, and the correct issue should be added alongside each entry. Relevant links to all items are required. An example of this is shown below:
| MOOSE Commit | Incorrect Referenced Issue | Correct Referenced Issue |
|---|---|---|
| 48db61 | idaholab/sockeye#19845 | idaholab/sockeye#130 |
The document must include the "log-revisions" template item, this can be included by adding the following to the markdown file (sqa/shifted_boundary_method_rtm.md):
!template! item key=log-revisions
Include text (in MooseDocs format) regarding the "log-revisions" template item here.
!template-end!System Requirements Traceability
Functional Requirements
- shifted_boundary_method: Coverage
- 18.1.1The system shall
- report the closest distance vector and surface normal at element centroids when parsed-function and mesh-based surfaces are combined in a single query.
- build boundary element representations from an SBM surface mesh without a KDTree when KDTree construction is disabled.
- report when an SBM surface mesh is not watertight.
- return zero distance when the query point lies on the surface mesh.
Specification(s): coverage/omnibus, coverage/build_kd_tree_false, coverage/non_watertight, coverage/gradient_on_surface
Design: SBMSurfaceMeshBuilderShortestDistanceToSurfaceUnsignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): RunAppExodiff
- shifted_boundary_method: Distance Calc
- 18.2.1The system shall compute
- the distance field in 2D.
- the distance field in 3D.
- the distance field in 2D when signed level-set and mesh-based surfaces are combined.
- the distance field in 3D when signed level-set and mesh-based surfaces are combined.
- a signed distance field in 2D using a point-in-polyhedron in-out test to set the sign, including a gradient that points outward across the surface on both the interior and exterior sides.
- a signed distance field whose sign is supplied by a union checker through the point-in-surface check interface.
Specification(s): distance_test/2D_distance_refine, distance_test/3D_distance_refine, distance_test/2D_multiple_distance_refine, distance_test/3D_multiple_distance_refine, distance_test/2D_signed_distance, distance_test/2D_signed_distance_union_in_out_test
Design: UnsignedDistanceToSurfaceMeshSignedDistanceToSurfaceMeshShortestDistanceToSurface
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.2.2The system shall throw an error
- if ElementCentroidToSurfaceDistanceAux is applied to a nodal variable.
- if ShortestDistanceToSurface receives a function whose type is not ParsedFunction, UnsignedDistanceToSurfaceMesh, or SignedDistanceToSurfaceMesh.
- if the embedding mesh dimension does not match the SBM surface mesh dimension plus one.
- if the SBM surface mesh contains element types other than EDGE2 or TRI3.
- if the SBM surface mesh is distributed, since SBMSurfaceMeshBuilder requires a replicated mesh for its In-Out test.
- if an UnsignedDistanceToSurfaceMesh function is paired with an SBMSurfaceMeshBuilder that was configured without a KDTree.
- if a signed distance is requested from a function that is neither a ParsedFunction nor a SignedDistanceToSurfaceMesh.
- if SignedDistanceToSurfaceMesh receives an in-out test user object that does not implement the point-in-surface check interface.
Specification(s): error_test/nodal_variable, error_test/unsupported_surface_function, error_test/dim_mismatch, error_test/unsupported_element_type, error_test/distributed_surface_mesh, error_test/unsigned_distance_without_kd_tree, error_test/signed_distance_invalid_strategy, error_test/signed_distance_in_out_test_wrong_type
Design: UnsignedDistanceToSurfaceMeshSignedDistanceToSurfaceMeshShortestDistanceToSurface
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- shifted_boundary_method: In Out Test
- 18.3.1The system shall be capable of performing point-in-polyhedron in-out testing to reclassify elements inside/outside a closed surface for different lambda cut fractions
- in 2D with lambda = 1.
- in 2D with lambda = 0.5.
- in 2D with lambda = 0.
- in 3D with lambda = 1.
- in 3D with lambda = 0.5.
- in 3D with lambda = 0.
Specification(s): sbm_test/2D_lambda_1, sbm_test/2D_lambda_0p5, sbm_test/2D_lambda_0, sbm_test/3D_lambda_1, sbm_test/3D_lambda_0p5, sbm_test/3D_lambda_0
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.2The system shall produce an in-out classification from an explicit axis-aligned ray that matches the classification from the automatically selected PCA ray direction, confirming the auto direction is reproducible for an anisotropic surface
- in 2D.
- in 3D.
Specification(s): auto_reproducibility/2D_auto_matches_fixed, auto_reproducibility/3D_auto_matches_fixed
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
Prerequisite(s): 18.3.1
- 18.3.3The system shall reject an InterceptedElementModifier lambda outside the inclusive range from zero to one.
Specification(s): invalid_lambda
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- 18.3.4The system shall reject a non-positive tolerance for the point-in-polyhedron in-out test.
Specification(s): zero_tolerance
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- 18.3.5The system shall reclassify elements inside/outside a surface described by a signed level-set function supplied to InterceptedElementModifier instead of a geometric in-out user object.
Specification(s): signed_function
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.6The system shall allow an InterceptedElementModifier to classify points using any user object implementing the point-in-surface check interface, including a signed-function checker.
Specification(s): signed_function_in_out_test
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
Prerequisite(s): 18.3.1
- 18.3.7The system shall assign a dedicated intercepted subdomain ID to elements the surface cuts through when mark_intercepted is enabled.
Specification(s): mark_intercepted
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.8The system shall classify an element as intercepted when a closed surface lies within the element without enclosing any element nodes.
Specification(s): enclosed_surface
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.9The system shall classify an element as intercepted when a closed signed level-set surface lies within the element without enclosing any element nodes.
Specification(s): enclosed_surface_function
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.10The system shall classify an element whose nodes all lie outside a surface as intercepted rather than outside when the surface clips a finite region of the element interior, using the quadrature occupied-ratio check.
Specification(s): edge_clip_outside_guard
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.11The system shall apply the occupied-ratio in-out classification to a polygonal surface with sharp corners on a refined mesh, marking an element whose nodes all lie outside the polygon as intercepted where a corner clips the element interior.
Specification(s): triangle_clip_outside_guard
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.12The system shall write the oriented bounding box and ray meshes used by the in-out test to file when the corresponding file names are provided.
Specification(s): debug_mesh_output
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.3.13The system shall write the oriented bounding box and shortest-axis ray meshes built for the in-out test to standalone mesh files.
Specification(s): obb_write
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): CheckFiles
- 18.3.14The system shall report an error when mark_intercepted is enabled without specifying the intercepted subdomain ID.
Specification(s): mark_intercepted_missing_id
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- 18.3.15The system shall report an error when an InterceptedElementModifier is configured with neither an in-out test user object nor a signed distance function.
Specification(s): no_in_out_test
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- 18.3.16The system shall report an error when an InterceptedElementModifier receives an in-out test user object that does not implement the point-in-surface check interface.
Specification(s): in_out_test_wrong_type
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- 18.3.17The system shall report an error when an InterceptedElementModifier is configured with both an in-out test user object and a signed distance function.
Specification(s): both_geometry_sources
Design: InterceptedElementModifierPointInPolyhedronCheckUOSBMSurfaceMeshBuilder
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- shifted_boundary_method: Subdomain Element Modifier
- 18.4.1The system shall assign subdomain IDs to a background mesh from grain-boundary loops using per-subdomain in-out tests, marking each element with the grain that occupies the largest area fraction when several grains meet at interior corners.
Specification(s): grain_corner
Design: SubdomainElementModifierSurfaceMeshBySubdomainBuilderPointInSubdomainCheckUO
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.4.2The system shall assign a dedicated intercepted subdomain ID to background elements straddling a grain boundary when mark_intercepted is enabled in SubdomainElementModifier.
Specification(s): mark_intercepted
Design: SubdomainElementModifierSurfaceMeshBySubdomainBuilderPointInSubdomainCheckUO
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.4.3The system shall report, for an arbitrary point, which grain (subdomain) of a SurfaceMeshBySubdomainBuilder surface mesh contains it and whether it lies inside any grain, returning the invalid-subdomain sentinel and a not-inside result for points outside every grain.
Specification(s): subdomain_point_query
Design: SubdomainElementModifierSurfaceMeshBySubdomainBuilderPointInSubdomainCheckUO
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): Exodiff
- 18.4.4The system shall report whether the SurfaceMeshBySubdomainBuilder surface mesh is watertight when watertightness checking is enabled.
Specification(s): watertight_report
Design: SubdomainElementModifierSurfaceMeshBySubdomainBuilderPointInSubdomainCheckUO
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): RunApp
- 18.4.5The system shall throw an error
- if the SurfaceMeshBySubdomainBuilder surface mesh is distributed, since it requires a replicated mesh for its In-Out test.
- if the embedding mesh dimension does not match the surface mesh dimension plus one.
- if the SurfaceMeshBySubdomainBuilder surface mesh contains element types other than EDGE2 or TRI3.
- if the fixed_x_ray method is requested for PointInSubdomainCheckUO, which performs per-subdomain ray-casting and cannot use the whole-mesh TriangleManifold engine.
- if a point is contained in more than one subdomain of a PointInSubdomainCheckUO surface mesh, since a single-subdomain query is then ambiguous.
Specification(s): error_test/distributed_surface_mesh, error_test/dim_mismatch, error_test/unsupported_element_type, error_test/fixed_x_ray_unsupported, error_test/ambiguous_subdomain
Design: SubdomainElementModifierSurfaceMeshBySubdomainBuilderPointInSubdomainCheckUO
Issue(s): #33397
Collection(s): FAILURE_ANALYSISFUNCTIONAL
Type(s): RunException
- shifted_boundary_method: Activeelementfractiontest.Unit Tests
- 18.5.1The system shall compute the fraction of a quadrilateral element occupied by the physical domain when the element is fully inside, fully outside, or cut in half by the true boundary.
Specification(s): unit_square
Design: InterceptedElementModifier
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- shifted_boundary_method: Classifypartialelementtest.Unit Tests
- 18.6.1The system shall classify fully active and fully inactive elements independently of partial-element options.
Specification(s): fully_active_or_inactive
Design: InterceptedElementModifier
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.6.2The system shall assign the intercepted subdomain to partial elements when intercepted-element marking is enabled.
Specification(s): mark_intercepted
Design: InterceptedElementModifier
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.6.3The system shall classify partial elements by comparing their inactive fraction with the lambda threshold.
Specification(s): lambda_threshold
Design: InterceptedElementModifier
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.6.4The system shall apply partial-element classification when all nodes are active but the active fraction is not one.
Specification(s): enclosed_surface
Design: InterceptedElementModifier
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.6.5The system shall determine element inactivity from active fraction and the endpoint and interior values of the lambda threshold.
Specification(s): inactive_predicate
Design: InterceptedElementModifier
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- shifted_boundary_method: Orientedboundingboxtest.Unit Tests
- 18.7.1The system shall write an oriented three-dimensional bounding box as a mesh containing a first-order hexahedral element whose vertices coincide with the corners of the box.
Specification(s): write_3d_box
Design: AdaptiveRayContainmentCheck
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.7.2The system shall write an oriented two-dimensional bounding box as a mesh containing a first-order quadrilateral element whose vertices coincide with the corners of the box.
Specification(s): write_2d_box
Design: AdaptiveRayContainmentCheck
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.7.3The system shall write a ray along the shortest axis of an oriented bounding box as a mesh containing a first-order line element.
Specification(s): write_ray
Design: AdaptiveRayContainmentCheck
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.7.4The system shall report geometry, projected coordinates, and point containment for an axis-aligned oriented bounding box.
Specification(s): axis_aligned_queries
Design: AdaptiveRayContainmentCheck
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.7.5The system shall report projected coordinates and point containment in the local basis of a rotated oriented bounding box.
Specification(s): rotated_queries
Design: AdaptiveRayContainmentCheck
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.7.6The system shall initialize the corners and centroid of an oriented bounding box constructed without geometric data at the origin.
Specification(s): default_construction
Design: AdaptiveRayContainmentCheck
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- shifted_boundary_method: Sbmdistancefunctiontest.Unit Tests
- 18.8.1The system shall compute the vector from a point to the zero level set of a signed-distance function.
Specification(s): plane_distance
Design: SignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.8.2The system shall return a zero distance vector for a function with zero gradient.
Specification(s): zero_gradient
Design: SignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.8.3The system shall compute the unit gradient normal of a signed-distance function.
Specification(s): plane_normal
Design: SignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.8.4The system shall select the distance and normal vectors of the nearest surface from multiple functions.
Specification(s): closest_surface
Design: SignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.8.5The system shall compute the signed distance to a union as the minimum signed distance of its component functions.
Specification(s): union_distance
Design: SignedDistanceToSurfaceMesh
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.8.6The system shall reject unsupported function types when computing signed distance to a union.
Specification(s): unsupported_union_function
Design: SignedDistanceToSurfaceMesh
Issue(s): #33397
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- shifted_boundary_method: Sbmsurfacedistancetest.Unit Tests
- 18.9.1The system shall compute the normal distance vector from a point to a first-order line element when the normal projection of the point lies within the element.
Specification(s): edge_projection
Design: UnsignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.9.2The system shall compute the distance vector from a point to the nearest endpoint of a first-order line element when the normal projection of the point lies outside the element.
Specification(s): edge_node_fallback
Design: UnsignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.9.3The system shall compute the direction and magnitude of the distance vector from a point to a tilted first-order line element.
Specification(s): tilted_edge
Design: UnsignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.9.4The system shall compute the normal distance vector from a point to a first-order triangular surface element when the normal projection of the point lies within the element.
Specification(s): triangle_projection
Design: UnsignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.9.5The system shall compute distance vectors from points on and off a tilted first-order triangular surface element to their nearest points on the element.
Specification(s): tilted_triangle
Design: UnsignedDistanceToSurfaceMesh
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- shifted_boundary_method: Watertighttest.Unit Tests
- 18.10.1The system shall identify open and closed two-dimensional boundary loops as non-watertight and watertight, respectively.
Specification(s): two_d_open_and_closed_geometry
Design: SBMSurfaceMeshBuilder
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest
- 18.10.2The system shall identify open and closed three-dimensional boundary surfaces as non-watertight and watertight, respectively.
Specification(s): three_d_open_and_closed_geometry
Design: SBMSurfaceMeshBuilder
Issue(s): #31937
Collection(s): FUNCTIONAL
Type(s): GoogleTest