Cardinal System Design Description

This template follows INL template TEM-140, "IT System Design Description."

Introduction

Many of the phenomena related to nuclear energy systems depend on the solutions to multiple physics models, which can be described by partial differential equations that provide spatially- and temporally-varying values of solution variables. When these models for individual physics depend on one another, we call this "multiphysics." Cardinal relies on the OpenMC Monte Carlo radiation transport code and the NekRS spectral element Navier-Stokes code to perform high-fidelity multiphysics and multiscale simulation. Cardinal handles the couplings that may occur between these two codes, in addition to the numerous physics models provided by the MOOSE framework (such as solid mechanics, material science, and radiative heat transfer). This document describes the system design of Cardinal.

System Purpose

The Software Design Description provided here is description of each object in the system. The pluggable architecture of the underlying framework of Cardinal makes MOOSE and MOOSE-based applications straightforward to develop as each piece of end-user (developer) code that goes into the system follows a well-defined interface for the underlying systems that those object plug into. These descriptions are provided through developer-supplied "markdown" files that are required for all new objects that are developed as part of Cardinal. More information about the design documentation for MOOSE-based applications like Cardinal can be found in Documenting MOOSE.

System Scope

Cardinal is an application for performing high-fidelity simulation of nuclear systems incorporating Monte Carlo neutron-photon transport and/or spectral element Computational Fluid Dynamics (CFD). These physics can be combined with one another and with the MOOSE modules to accomplish "multiphysics" simulation. High-fidelity simulations can also be performed independently, for the purpose of data postprocessing, to generate constitutive models suitable for lower-fidelity tools, a process referred to as "multiscale" simulation.

Interfaces to other MOOSE-based codes, including systems-level thermal-hydraulics (SAM), heat pipe flows (Sockeye), and fuel performance (Bison) are also optionally included to support Cardinal simulations. Cardinal enables high-fidelity modeling of heat transfer, fluid flow, passive scalar transport, fluid-structure interaction, nuclear heating, tritium breeding, shielding effectiveness, material activation, material damage, and sensor response. The MultiApp System is leveraged to allow for the multiscale, multiphysics coupling. Further, other MOOSE capabilities in the modules, such as the Stochastic Tools Module enable engineering studies with uncertainty quantification and sensitivity analysis. Cardinal therefore supports design, safety, engineering, and research projects.

Dependencies and Limitations

Cardinal inherits the software dependencies of: - MOOSE framework - OpenMC - NekRS - DAGMC

No additional dependencies are present.

Definitions and Acronyms

This section defines, or provides the definition of, all terms and acronyms required to properly understand this specification.

Definitions

  • Pull (Merge) Request: A proposed change to the software (e.g. usually a code change, but may also include documentation, requirements, design, and/or testing).

  • Baseline: A specification or product (e.g., project plan, maintenance and operations (M&O) plan, requirements, or design) that has been formally reviewed and agreed upon, that thereafter serves as the basis for use and further development, and that can be changed only by using an approved change control process (NQA-1, 2009).

  • Validation: Confirmation, through the provision of objective evidence (e.g., acceptance test), that the requirements for a specific intended use or application have been fulfilled (24765:2010(E), 2010).

  • Verification: (1) The process of: evaluating a system or component to determine whether the products of a given development phase satisfy the conditions imposed at the start of that phase. (2) Formal proof of program correctness (e.g., requirements, design, implementation reviews, system tests) (24765:2010(E), 2010).

Acronyms

AcronymDescription
ANLArgonne National Laboratory
APIApplication Programming Interface
CADComputer Aided Design
CFDComputational Fluid Dynamics
DOEDepartment of Energy
FEfinite element
HITHierarchical Input Text
HPCHigh Performance Computing
I/OInput/Output
INLIdaho National Laboratory
MOOSEMultiphysics Object Oriented Simulation Environment
MPIMessage Passing Interface
SDDSoftware Design Description

Design Stakeholders and Concerns

Design Stakeholders

Stakeholders for Cardinal include several of the funding sources including Department of Energy (DOE), INL, and ANL. However, since Cardinal is an open-source project, several universities, companies, and foreign governments have an interest in the development and maintenance of the Cardinal project.

Stakeholder Design Concerns

Concerns from many of the stakeholders are similar. These concerns include correctness, stability, and performance. The mitigation plan for each of these can be addressed. For correctness, Cardinal development requires either regression or unit testing for all new code added to the repository. The project contains several comparisons against analytical solutions where possible and also other verification methods such as MMS. For stability, Cardinal maintains multiple branches to incorporate several layers of testing both internally and for dependent applications. Finally, performance tests are also performed as part of the the normal testing suite to monitor code change impacts to performance.

System Design

Cardinal relies on OpenMC to solve for neutron-photon transport (optionally on Computer Aided Design (CAD) geometries by relying on DAGMC). Cardinal also relies on NekRS to solve for fluid flow, heat transfer, and species transport. Cardinal integrates these external libraries within the structure of a MOOSE application, allowing these external libraries to be coupled to existing capabilities and interfaces in the MOOSE framework, such as for physics modeling (e.g., with the MOOSE modules or with other MOOSE applications) or data processing. Because Cardinal is based upon MOOSE, it employs the same concept of modular code objects that define all aspects of the solutions for physics. Cardinal provides specialized

- AuxKernels classes that extract internal solution fields in NekRS and OpenMC - Controls classes that modify NekRS and OpenMC simulations on-the-fly - Mesh classes to build the NekRS and OpenMC geometries in a MOOSE-compatible format, and modify existing meshes useful for postprocessing NekRS and OpenMC simulations - Postprocessors classes that query the NekRS and OpenMC simulations at points, through spatial integrals, etc. - Problem classes to execute NekRS and OpenMC as MOOSE applications and facilitate data transfer - TimeStepper classes to control time stepping based on NekRS's adaptive time stepping routines - UserObjects classes that spatially process the NekRS and OpenMC simulations

Cardinal also provides custom syntax for creating OpenMC tallies needed for multiphysics.

System Structure

Cardinal relies on the MOOSE framework to provide the core functionality of solving multiphysics problems. Cardinal replaces the actual physics solves with external API calls to OpenMC and NekRS, but relies on MOOSE for timestepping, synchronization, data transfers, and overall parallelization. Additional physics needed beyond OpenMC and NekRS are obtained from the MOOSE modules.

A summary listing of the current modules required for complete Cardinal operation are shown below:

Cardinal's Makefile also includes other modules which are by default enabled, due to their common usage with Cardinal (though they are not strictly required).

The structure of Cardinal is based on defining C++ classes that derive from classes in the MOOSE framework or modules that provide functionality that is specifically tailored to nuclear modeling and simulation. By using the interfaces defined in MOOSE base classes for these classes, Cardinal is able to rely on MOOSE to execute these models at the appropriate times during the simulation and use their results in the desired ways.

Data Design and Control

At a high level, the system is designed to process Hierarchical Input Text (HIT) input files to construct several objects that will constitute an finite element (FE) simulation. Some of the objects in the simulation may in turn load other file-based resources to complete the simulation. Examples include meshes or data files. The system will then assemble systems of equations and solve them using the libraries of the Code Platform. The system can then output the solution in one or more supported output formats commonly used for visualization.

Human-Machine Interface Design

The Cardinal application is a command-line driven program. All interaction with Cardinal is ultimately done through the command line. This is typical for HPC applications that use the MPI interface for running on super computing clusters. Optional GUIs may be used to assist in creating input files and launching executables on the command line.

System Design Interface

All external system interaction is performed either through file Input/Output (I/O) or through local API calls. Neither Cardinal, nor the MOOSE framework, nor the MOOSE modules are designed to interact with any external system directly through remote procedure calls. Any code to code coupling performed using the framework are done directly through API calls either in a static binary or after loading shared libraries.

Security Structure

The Cardinal application does not require any elevated privileges to operate and does not run any stateful services, daemons or other network programs. Distributed runs rely on the MPI library.

Requirements Cross-Reference

  • cardinal: HeatTransferCoefficientAux
  • 1.1.2The system shall compute a convective heat transfer coefficient using userobjects for the wall heat flux, wall temperature, and bulk temperature.

    Specification(s): h

    Design: HeatTransferCoefficientAux

    Issue(s): #1081

    Collection(s): FUNCTIONAL

    Type(s): CSVDiff

  • cardinal: NekRSProblem
  • 1.3.7A coupled MOOSE-nekRS pincell-fluid flow problem shall predict correct conservation of energy and realistic thermal solutions. Exact conservation of energy (based on the power imposed in the solid) will not be observed because some heat flux GLL points are also on Dirichlet boundaries, which win in boundary condition ties.

    Specification(s): sfr_pincell

    Design: NekRSProblem

    Collection(s): FUNCTIONAL

    Type(s): Exodiff

  • 1.3.8Individually conserving heat flux sideset by sideset shall give equivalent results to the all-combined option when there is just one coupling sideset. The gold file for this test is identical to that for the sfr_pincell case.

    Specification(s): sfr_pincell_vpp

    Design: NekRSProblem

    Collection(s): FUNCTIONAL

    Type(s): Exodiff

  • 1.3.9The system shall allow imposing heat flux through a dummy main application, instead of coupling NekRS via conjugate heat transfer. This is verified by computing the heat flux on the NekRS mesh, which adequately matches an initial value set in a postprocessor. This gold file is also identical to that obtained by running a dummy main app (solid_dummy) that passes in the desired flux_integral initial condition.

    Specification(s): impose_heat_flux

    Design: NekRSProblem

    Issue(s): #797

    Collection(s): FUNCTIONAL

    Type(s): CSVDiff

  • cardinal: FDTallyGradAux
  • 1.23.208The system shall allow for the approximation of tally gradients using finite differences.

    Specification(s): gradients

    Design: FDTallyGradAux

    Issue(s): #1031

    Collection(s): FUNCTIONAL

    Type(s): Exodiff

  • 1.23.209The system shall error if the variable provided to FDTallyGradAux is not of type CONSTANT MONOMIAL_VEC.

    Specification(s): not_const_mon

    Design: FDTallyGradAux

    Issue(s): #1031

    Collection(s): FUNCTIONALFAILURE_ANALYSIS

    Type(s): RunException

  • 1.23.210The system shall error if a score is requested, but not available in a tally.

    Specification(s): missing_score

    Design: FDTallyGradAux

    Issue(s): #1031

    Collection(s): FUNCTIONALFAILURE_ANALYSIS

    Type(s): RunException

  • 1.23.211The system shall error if the external filter bin provided by the user is out of bounds for the filters applied to the given score.

    Specification(s): invalid_bin_index

    Design: FDTallyGradAux

    Issue(s): #1031

    Collection(s): FUNCTIONALFAILURE_ANALYSIS

    Type(s): RunException

  • cardinal: NekPointValue
  • 1.25.12The system shall interpolate the NekRS solution onto a given point. This is tested by analytically comparing known initial conditions from NekRS against function evaluations for
    1. dimensional form
    2. non-dimensional form
    3. non-dimensional scaling of usrwrk slots for which the units are known

    Specification(s): pp/points, pp/nondimensional, pp/usrwrk_units

    Design: NekPointValue

    Issue(s): #1015#1016#1079

    Collection(s): FUNCTIONAL

    Type(s): CSVDiff

  • 1.25.13The system shall warn the user if dimensionalization is requested and cannot be performed, for
    1. usrwrk slot 0
    2. usrwrk slot 1
    3. usrwrk slot 2

    Specification(s): warn/u00, warn/u01, warn/u02

    Design: NekPointValue

    Issue(s): #1015#1016#1079

    Collection(s): FUNCTIONALFAILURE_ANALYSIS

    Type(s): RunException

  • cardinal: NekSideAverage
  • 1.25.17NekSideAverage shall correctly compute area-averaged temperatures on the nekRS mesh. The gold file was created by running the moose.i input, which computes the same averages using existing MOOSE postprocessors on the same mesh on auxvariables that match the functional form of the solution fields initialized in the pyramid.udf. Perfect agreement is not to be expected, since the underlying basis functions and quadrature rules are different between nekRS and MOOSE's linear Lagrange variables - we just require that they are reasonably close.

    Specification(s): nek_side_average

    Design: NekSideAverage

    Issue(s): #1015

    Collection(s): FUNCTIONAL

    Type(s): CSVDiff

  • cardinal: Reactivity
  • 1.25.34The k-eigenvalue and its standard deviation shall be correctly retrieved from the OpenMC solution.

    Specification(s): k_eigenvalue

    Design: Reactivity

    Issue(s): #1051

    Collection(s): FUNCTIONAL

    Type(s): CSVDiff

References

  1. ISO/IEC/IEEE 24765:2010(E). Systems and software engineering—Vocabulary. first edition, December 15 2010.[BibTeX]
  2. ASME NQA-1. ASME NQA-1-2008 with the NQA-1a-2009 addenda: Quality Assurance Requirements for Nuclear Facility Applications. first edition, August 31 2009.[BibTeX]

ActionComponents

Adaptivity

Adaptivity/Indicators

Adaptivity/Markers

Application

AuxKernels

AuxScalarKernels

AuxVariables

BCs

BCs/CavityPressure

BCs/CoupledPressure

BCs/InclinedNoDisplacementBC

BCs/Periodic

BCs/Pressure

Bounds

Cardinal

Cardinal/ICs

Cardinal/ICs/BulkEnergyConservation

Cardinal/ICs/VolumetricHeatSource

Closures

Components

Constraints

ControlLogic

Controls

Correctors

CoupledHeatTransfers

Covariance

DGKernels

Dampers

Debug

Debug/MaterialDerivativeTest

DeprecatedBlock

DiracKernels

Distributions

DomainIntegral

Executioner

Executioner/Adaptivity

Executioner/Predictor

Executioner/Quadrature

Executioner/TimeIntegrator

Executioner/TimeIntegrators

Executioner/TimeStepper

Executioner/TimeSteppers

Executors

FVBCs

FVICs

FVInterfaceKernels

FVKernels

FluidProperties

FluidPropertiesInterrogator

Functions

FunctorMaterials

GlobalParams

GrayDiffuseRadiation

HDGBCs

HDGKernels

HeatStructureMaterials

ICs

InterfaceKernels

Kernels

Kernels/DynamicSolidMechanics

Kernels/DynamicTensorMechanics

Kernels/PoroMechanics

Kernels/SolidMechanics

Kernels/TensorMechanics

Likelihood

LinearFVBCs

LinearFVKernels

Materials

Mesh

Mesh/Partitioner

MeshDivisions

MeshModifiers

Modules

Modules/CompressibleNavierStokes

Modules/FluidProperties

Modules/HeatTransfer

Modules/HeatTransfer/ThermalContact

Modules/HeatTransfer/ThermalContact/BC

Modules/IncompressibleNavierStokes

Modules/NavierStokesFV

Modules/SolidProperties

Modules/TensorMechanics

Modules/TensorMechanics/CohesiveZoneMaster

Modules/TensorMechanics/DynamicMaster

Modules/TensorMechanics/GeneralizedPlaneStrain

Modules/TensorMechanics/GlobalStrain

Modules/TensorMechanics/LineElementMaster

Modules/TensorMechanics/Master

Modules/TensorMechanics/MaterialVectorBodyForce

MortarGapHeatTransfer

MultiApps

NEML2

NodalKernels

NodalNormals

Outputs

ParameterStudy

Physics

Physics/Diffusion

Physics/Diffusion/ContinuousGalerkin

Physics/Diffusion/FiniteVolume

Physics/HeatConduction

Physics/HeatConduction/FiniteElement

Physics/HeatConduction/FiniteVolume

Physics/NavierStokes

Physics/NavierStokes/Flow

Physics/NavierStokes/FlowSegregated

Physics/NavierStokes/FluidHeatTransfer

Physics/NavierStokes/ScalarTransport

Physics/NavierStokes/SolidHeatTransfer

Physics/NavierStokes/Turbulence

Physics/NavierStokes/TwoPhaseMixture

Physics/SolidMechanics

Physics/SolidMechanics/CohesiveZone

Physics/SolidMechanics/Dynamic

Physics/SolidMechanics/GeneralizedPlaneStrain

Physics/SolidMechanics/GlobalStrain

Physics/SolidMechanics/LineElement

Physics/SolidMechanics/LineElement/QuasiStatic

Physics/SolidMechanics/MaterialVectorBodyForce

Physics/SolidMechanics/QuasiStatic

Positions

Postprocessors

Preconditioning

Problem

Problem/Dimensionalize

Problem/Filters

Problem/Tallies

ProjectedStatefulMaterialStorage

RayBCs

RayKernels

Reporters

Samplers

ScalarKernels

SolidProperties

StochasticTools

Surrogates

ThermalContact

Times

Trainers

Transfers

UserObjects

VariableMappings

Variables

VectorPostprocessors