From 1d6731692347dd535b27dc487165833857d1be75 Mon Sep 17 00:00:00 2001 From: yardasol Date: Mon, 25 Oct 2021 17:54:52 -0500 Subject: [PATCH 01/35] copy current saltproc PR and issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 31 +++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 16 ++++++++ .../pull_request_template.md | 38 +++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..406b9e9cfd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Report software bugs +title: "[Bug]: " +labels: Type:Bug +assignees: '' + +--- + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. +2. +3. +4. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**System Specifications:** + - Version: + - Platform: + - Subsystem: + +**How can this issue be closed?** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..3fffba210a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,16 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: 'Feature: ' +labels: Status:1-New, Type:Feature +assignees: '' + +--- + +**Background and motivation** + +**Description of idea** + +**Implementation details** + +**Potential snags** diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 0000000000..40ec999d2e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,38 @@ +## Summary of changes + + + + +## Types of changes + + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) + +## Required for Merging +- [ ] I have read the **CONTRIBUTING** document. +- [ ] My code follows the code style of this project. +- [ ] My change requires a change to the documentation. +- [ ] I have updated the documentation accordingly. +- [ ] I have added tests to cover my changes. +- [ ] All new and existing tests passed. + - [ ] CI tests pass + - [ ] Local tests pass (including Serpent2 integration tests) + +## Associated Issues and PRs + + +- Issue: # + + +## Associated Developers + + +- Dev: @ + + +## Checklist for Reviewers + +Reviewers should use [this link](https://arfc.github.io/manual/guides/pull_requests) to get to the +Review Checklist before they begin their review. From a3aa5c7b48a0672df167b08027ec3f389b81f718 Mon Sep 17 00:00:00 2001 From: yardasol Date: Mon, 25 Oct 2021 17:56:13 -0500 Subject: [PATCH 02/35] update formatting --- .github/ISSUE_TEMPLATE/bug_report.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 406b9e9cfd..ce48accd20 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,25 +7,25 @@ assignees: '' --- -**Expected behavior** +## Expected behavior A clear and concise description of what you expected to happen. -**Describe the bug** +## Describe the bug A clear and concise description of what the bug is. -**To Reproduce** +## To Reproduce Steps to reproduce the behavior: 1. 2. 3. 4. -**Screenshots** -If applicable, add screenshots to help explain your problem. +## Screenshots/output +If applicable, add screenshots or program output to help explain your problem. -**System Specifications:** +## System Specifications: - Version: - Platform: - Subsystem: -**How can this issue be closed?** +## How can this issue be closed? From e44872db56f68c6e54e32f507202a281280d90d9 Mon Sep 17 00:00:00 2001 From: yardasol Date: Mon, 25 Oct 2021 17:56:50 -0500 Subject: [PATCH 03/35] update formatting --- .github/ISSUE_TEMPLATE/feature_request.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 3fffba210a..b4eff87996 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,10 +7,10 @@ assignees: '' --- -**Background and motivation** +## Background and motivation -**Description of idea** +## Description of idea -**Implementation details** +## Implementation details -**Potential snags** +## Potential snags From 4960bbb66e0a275eca5e90c39aa9b90279db2a6e Mon Sep 17 00:00:00 2001 From: yardasol Date: Mon, 25 Oct 2021 18:26:21 -0500 Subject: [PATCH 04/35] move pr template to where github can see it --- .github/{PULL_REQUEST_TEMPLATE => }/pull_request_template.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{PULL_REQUEST_TEMPLATE => }/pull_request_template.md (100%) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/pull_request_template.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE/pull_request_template.md rename to .github/pull_request_template.md From c3a8ed0778fff2b054aa3f054f353fadde744213 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Sun, 26 May 2024 23:52:21 -0400 Subject: [PATCH 05/35] Add Multi-Group diffusion theory to Moltres website --- doc/content/getting_started/theory.md | 42 ++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/doc/content/getting_started/theory.md b/doc/content/getting_started/theory.md index 154adff0e4..6e34412815 100644 --- a/doc/content/getting_started/theory.md +++ b/doc/content/getting_started/theory.md @@ -16,7 +16,47 @@ the MOOSE finite element framework, enabling highly flexible and scalable reacto ## Multigroup Neutron Diffusion -More information to be added in future. +The neutron diffusion equation is an approximation to the Boltzmann transport equation, and is derived by taking the zeroth and first moment with respect to $\hat\Omega$, the solid angle. A full derivation of the diffusion equation will not be presented here for the sake of conciceness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. This assumption yields an equation with 2 fewer phase spaces, but also has reduced fidelity when compared to the transport equation, particularly in regions in which the neutron flux has strong angular dependence. A non-exhaustive list of regions in which the neutron flux strongly depends on angle is near material interfaces, external boundaries, strong absorbers, and weak scaterrers. + + + +The general neutron diffusion equation has exceedingly few analytical solutions and thus, for real-world problems, is solved with numerical methods. A common method utilized is [Finite Element Method](https://mooseframework.inl.gov/help/faq/what_is_fem.html), which is the methodology employed in Moltres. To solve the diffusion equation over complex geometries, Moltres discretizes over space, time, and energy. Discretization through space is done with the use of volume meshes. Discretization with respect to time is accomplished with discrete time-steps. Finally, the energy spectrum of the scalar neutron flux is discretized into user defined bins, called energy groups. The energy discretization of the neutron diffusion equation is called the multi-group neutron diffusion equation and is presented below. Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. Importantly, the $\lambda_i$ in the delayed-precursor term is not the overall decay constant of the precursor group, but rather the decay constant for specifically neutron emission. + +  +  + +The multi-group neutron diffusion equation: + +!equation +\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}-\nabla \cdot D_g \nabla \phi_g +\Sigma^R_{g} \phi_g =\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}+ \chi^p_{g} \sum^G_{g'=1} {\left(1- \beta \right) \nu_{g'} \Sigma^f_{g'}\phi_{g'} }+\chi^d_{g} \sum^I_i {\lambda_i C_i} + +  + +|Term in Multi-Group Diffusion Equation | Associated Kernel |Definition of Term| +| - | - | - | +| [!eq](\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}) | [NtTimeDerivative](https://arfc.github.io/moltres/source/kernels/NtTimeDerivative.html) | Time rate of change of energy group g | +| [!eq](- \nabla \cdot D_g \nabla \phi_g) | [GroupDiffusion](https://arfc.github.io/moltres/source/kernels/GroupDiffusion.html) | Streaming term of energy group g | +| [!eq](\Sigma^R_{g} \phi_g) | [SigmaR](https://arfc.github.io/moltres/source/kernels/SigmaR.html) | Removal from energy group g | +| [!eq](\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}) | [InScatter](https://arfc.github.io/moltres/source/kernels/InScatter.html) | In-scattering into energy group g | +| [!eq](\chi^p_{g} \sum^G_{g'=1} {\left[1- \beta \right] \nu_{g'} \Sigma^f_{g'}\phi_{g'} } ) | [CoupledFissionKernel](https://arfc.github.io/moltres/source/kernels/CoupledFissionKernel.html) | Prompt fission neutron source | +| [!eq](\chi^d_{g} \sum^I_i {\lambda_i C_i}) | [DelayedNeutronSource](https://arfc.github.io/moltres/source/kernels/DelayedNeutronSource.html) | Delayed fission neutron source | + +  +  + +The governing equation for the delayed neutron precursor population: + +!equation +\frac{\partial C_i}{\partial t}=\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}-\lambda_i C_i-\vec{u} \cdot \nabla C_i + +  + +| Term in Delayed Precursor Equation | Definition of Term | Associated Kernel | +| - | - | - | +| [!eq](\frac{\partial C_i}{\partial t}) | [ScalarTransportTimeDerivative](https://arfc.github.io/moltres/source/kernels/ScalarTransportTimeDerivative.html) | Time rate of change of precursor population | +| [!eq](\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}) | [PrecursorSource](https://arfc.github.io/moltres/source/kernels/PrecursorSource.html) | Production of precursor from fission +| [!eq](-\lambda_i C_i) | [PrecursorDecay](https://arfc.github.io/moltres/source/kernels/PrecursorDecay.html) | Loss of precusor due to radioactive decay | +| [!eq](-\vec{u} \cdot \nabla C_i) | [DivFreeCoupledScalarAdvection](https://arfc.github.io/moltres/source/kernels/DivFreeCoupledScalarAdvection.html) | Advection of the precursor | ## Heat Transfer and Fluid Flow From 5d7dbd2cf0354a7bacee93cb898ac93b1837552c Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Tue, 28 May 2024 14:45:14 -0400 Subject: [PATCH 06/35] Add table captions and replaces   with \\ for standard markdown syntax not HTML --- doc/content/getting_started/theory.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/content/getting_started/theory.md b/doc/content/getting_started/theory.md index 6e34412815..bf1af4b595 100644 --- a/doc/content/getting_started/theory.md +++ b/doc/content/getting_started/theory.md @@ -22,16 +22,17 @@ The neutron diffusion equation is an approximation to the Boltzmann transport eq The general neutron diffusion equation has exceedingly few analytical solutions and thus, for real-world problems, is solved with numerical methods. A common method utilized is [Finite Element Method](https://mooseframework.inl.gov/help/faq/what_is_fem.html), which is the methodology employed in Moltres. To solve the diffusion equation over complex geometries, Moltres discretizes over space, time, and energy. Discretization through space is done with the use of volume meshes. Discretization with respect to time is accomplished with discrete time-steps. Finally, the energy spectrum of the scalar neutron flux is discretized into user defined bins, called energy groups. The energy discretization of the neutron diffusion equation is called the multi-group neutron diffusion equation and is presented below. Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. Importantly, the $\lambda_i$ in the delayed-precursor term is not the overall decay constant of the precursor group, but rather the decay constant for specifically neutron emission. -  -  + +\\ The multi-group neutron diffusion equation: !equation \frac{1}{v_g} \frac{\partial\phi_g}{\partial t}-\nabla \cdot D_g \nabla \phi_g +\Sigma^R_{g} \phi_g =\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}+ \chi^p_{g} \sum^G_{g'=1} {\left(1- \beta \right) \nu_{g'} \Sigma^f_{g'}\phi_{g'} }+\chi^d_{g} \sum^I_i {\lambda_i C_i} -  +\\ +!table id=diff_table caption= Terms in multi-group neutron diffusion equation and their associated kernels |Term in Multi-Group Diffusion Equation | Associated Kernel |Definition of Term| | - | - | - | | [!eq](\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}) | [NtTimeDerivative](https://arfc.github.io/moltres/source/kernels/NtTimeDerivative.html) | Time rate of change of energy group g | @@ -41,16 +42,17 @@ The multi-group neutron diffusion equation: | [!eq](\chi^p_{g} \sum^G_{g'=1} {\left[1- \beta \right] \nu_{g'} \Sigma^f_{g'}\phi_{g'} } ) | [CoupledFissionKernel](https://arfc.github.io/moltres/source/kernels/CoupledFissionKernel.html) | Prompt fission neutron source | | [!eq](\chi^d_{g} \sum^I_i {\lambda_i C_i}) | [DelayedNeutronSource](https://arfc.github.io/moltres/source/kernels/DelayedNeutronSource.html) | Delayed fission neutron source | -  -  + +\\ The governing equation for the delayed neutron precursor population: !equation \frac{\partial C_i}{\partial t}=\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}-\lambda_i C_i-\vec{u} \cdot \nabla C_i -  +\\ +!table id=prec_table caption= Terms in delayed neutron precursor equation and their associated kernels | Term in Delayed Precursor Equation | Definition of Term | Associated Kernel | | - | - | - | | [!eq](\frac{\partial C_i}{\partial t}) | [ScalarTransportTimeDerivative](https://arfc.github.io/moltres/source/kernels/ScalarTransportTimeDerivative.html) | Time rate of change of precursor population | From 68add7dd143bed4d831c44e7afd0c0b9d3237310 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Wed, 29 May 2024 17:09:18 -0400 Subject: [PATCH 07/35] Breaking apart paragraphs into sentences, so review comments are more clear as to which line they are referring to --- doc/content/getting_started/theory.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/content/getting_started/theory.md b/doc/content/getting_started/theory.md index bf1af4b595..cad93b5080 100644 --- a/doc/content/getting_started/theory.md +++ b/doc/content/getting_started/theory.md @@ -16,11 +16,23 @@ the MOOSE finite element framework, enabling highly flexible and scalable reacto ## Multigroup Neutron Diffusion -The neutron diffusion equation is an approximation to the Boltzmann transport equation, and is derived by taking the zeroth and first moment with respect to $\hat\Omega$, the solid angle. A full derivation of the diffusion equation will not be presented here for the sake of conciceness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. This assumption yields an equation with 2 fewer phase spaces, but also has reduced fidelity when compared to the transport equation, particularly in regions in which the neutron flux has strong angular dependence. A non-exhaustive list of regions in which the neutron flux strongly depends on angle is near material interfaces, external boundaries, strong absorbers, and weak scaterrers. - - - -The general neutron diffusion equation has exceedingly few analytical solutions and thus, for real-world problems, is solved with numerical methods. A common method utilized is [Finite Element Method](https://mooseframework.inl.gov/help/faq/what_is_fem.html), which is the methodology employed in Moltres. To solve the diffusion equation over complex geometries, Moltres discretizes over space, time, and energy. Discretization through space is done with the use of volume meshes. Discretization with respect to time is accomplished with discrete time-steps. Finally, the energy spectrum of the scalar neutron flux is discretized into user defined bins, called energy groups. The energy discretization of the neutron diffusion equation is called the multi-group neutron diffusion equation and is presented below. Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. Importantly, the $\lambda_i$ in the delayed-precursor term is not the overall decay constant of the precursor group, but rather the decay constant for specifically neutron emission. +The neutron diffusion equation is an approximation to the Boltzmann transport equation, and is derived by taking the zeroth and first moment with respect to $\hat\Omega$, the solid angle. +A full derivation of the diffusion equation will not be presented here for the sake of conciceness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. +This assumption yields an equation with 2 fewer phase spaces, but also has reduced fidelity when compared to the transport equation, particularly in regions in which the neutron flux has strong angular dependence. +A non-exhaustive list of regions in which the neutron flux strongly depends on angle is near material interfaces, external boundaries, strong absorbers, and weak scaterrers. + + + +The general neutron diffusion equation has exceedingly few analytical solutions and thus, for real-world problems, is solved with numerical methods. +A common method utilized is [Finite Element Method](https://mooseframework.inl.gov/help/faq/what_is_fem.html), which is the methodology employed in Moltres. +To solve the diffusion equation over complex geometries, Moltres discretizes over space, time, and energy. +Discretization through space is done with the use of volume meshes. +Discretization with respect to time is accomplished with discrete time-steps. +Finally, the energy spectrum of the scalar neutron flux is discretized into user defined bins, called energy groups. +The energy discretization of the neutron diffusion equation is called the multi-group neutron diffusion equation and is presented below. +Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. +The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. +Importantly, the $\lambda_i$ in the delayed-precursor term is not the overall decay constant of the precursor group, but rather the decay constant for specifically neutron emission. \\ From 1b682a4c6530b189cfdbe4da690b67bda4566a59 Mon Sep 17 00:00:00 2001 From: smpark7 Date: Wed, 29 May 2024 18:41:44 -0700 Subject: [PATCH 08/35] Add Mark and Milne vacuum BCs --- doc/content/source/bcs/VacuumConcBC.md | 11 +++- include/bcs/VacuumConcBC.h | 19 +++++-- src/actions/NtAction.C | 12 +++-- src/bcs/VacuumConcBC.C | 19 ++++++- tests/bcs/gold/vacuum_bc_mark_out.e | Bin 0 -> 46420 bytes tests/bcs/gold/vacuum_bc_milne_out.e | Bin 0 -> 46420 bytes tests/bcs/gold/vacuum_bc_out.e | Bin 0 -> 46248 bytes tests/bcs/tests | 44 +++++++++++++++- tests/bcs/vacuum_bc.i | 68 +++++++++++++++++++++++++ 9 files changed, 159 insertions(+), 14 deletions(-) create mode 100644 tests/bcs/gold/vacuum_bc_mark_out.e create mode 100644 tests/bcs/gold/vacuum_bc_milne_out.e create mode 100644 tests/bcs/gold/vacuum_bc_out.e create mode 100644 tests/bcs/vacuum_bc.i diff --git a/doc/content/source/bcs/VacuumConcBC.md b/doc/content/source/bcs/VacuumConcBC.md index 8d20ba5d27..f172c4d8c0 100644 --- a/doc/content/source/bcs/VacuumConcBC.md +++ b/doc/content/source/bcs/VacuumConcBC.md @@ -4,12 +4,19 @@ ## Overview -This object adds the $\frac{\phi}{4}-\frac{D_g}{2}\hat{n}\cdot\nabla\phi_g = 0$ vacuum boundary +This object adds the $\phi_g+\alpha D_g\hat{n}\cdot\nabla\phi_g = 0$ vacuum boundary condition of the multigroup neutron diffusion equations. The weak form after applying integration by parts to the neutron diffusion term ([GroupDiffusion](/GroupDiffusion.md)) is: !equation -\int_{\partial V}\psi D_g\nabla\phi_g\cdot\hat{n}\ dS = \int_{\partial V}\psi\frac{\phi_g}{2}\ dS +-\int_{\partial V}\psi D_g\nabla\phi_g\cdot\hat{n}\ dS = +\int_{\partial V}\psi\frac{\phi_g}{\alpha}\ dS + +The value of $\alpha$ varies depending on the formulation selected using the `vacuum_bc_type` +parameter. +1. Marshak: $\alpha=2$ +2. Mark: $\alpha=\sqrt{3}$ +3. Milne: $\alpha=3\times 0.710446$ ## Example Input File Syntax diff --git a/include/bcs/VacuumConcBC.h b/include/bcs/VacuumConcBC.h index 7170ad1e44..1a087b2bff 100644 --- a/include/bcs/VacuumConcBC.h +++ b/include/bcs/VacuumConcBC.h @@ -4,10 +4,13 @@ #include "ScalarTransportBase.h" /** - * Implements a simple VacuumConc BC for neutron diffusion on the boundary. - * VacuumConc BC is defined as \f$ D\frac{du}{dn}+\frac{u}{2} = 0\f$, where u is neutron flux. - * Hence, \f$ D\frac{du}{dn}=-\frac{u}{2} \f$ and \f$ -\frac{u}{2} \f$ is substituted into - * the Neumann BC term produced from integrating the diffusion operator by parts. + * Implements a simple VacuumConc BC for neutron diffusion on vacuum boundaries. + * VacuumConc BC is defined as \f$ D\frac{du}{dn}+\frac{u}{\alpha} = 0\f$, where u is neutron flux. + * Hence, \f$ D\frac{du}{dn}=-\frac{u}{\alpha} \f$ and \f$ -\frac{u}{\alpha} \f$ is substituted + * into the Neumann BC term produced from integrating the diffusion operator by parts. + * + * The three types of vacuum BCs available are Marshak ($\alpha=2$), Mark ($\alpha=\sqrt{3}$), and + * Milne ($\alpha=3\times 0.710446$). VacuumConcBC defaults to Marshak if `bc_type` is not set. */ class VacuumConcBC : public IntegratedBC, public ScalarTransportBase { @@ -22,9 +25,15 @@ class VacuumConcBC : public IntegratedBC, public ScalarTransportBase protected: virtual Real computeQpResidual() override; - virtual Real computeQpJacobian() override; + enum BC_TYPE + { + MARSHAK, + MARK, + MILNE + }; + /// Ratio of u to du/dn Real _alpha; }; diff --git a/src/actions/NtAction.C b/src/actions/NtAction.C index d9fd95f9f1..3ff027cca2 100644 --- a/src/actions/NtAction.C +++ b/src/actions/NtAction.C @@ -27,7 +27,8 @@ NtAction::validParams() params.addRequiredParam("num_precursor_groups", "specifies the total number of precursors to create"); - params.addRequiredParam("var_name_base", "specifies the base name of the variables"); + params.addRequiredParam("var_name_base", + "specifies the base name of the variables"); params.addRequiredCoupledVar("temperature", "Name of temperature variable"); params.addCoupledVar("pre_concs", "All the variables that hold the precursor concentrations. " @@ -42,8 +43,12 @@ NtAction::validParams() "random initial conditions for the precursors."); params.addParam("nt_ic_function", "An initial condition function for the neutrons."); - params.addParam>("vacuum_boundaries", - "The boundaries on which to apply vacuum boundaries."); + params.addParam>( + "vacuum_boundaries", + "The boundaries on which to apply vacuum boundaries."); + MooseEnum vacuum_bc_type("marshak mark milne", "marshak"); + params.addParam("vacuum_bc_type", vacuum_bc_type, + "Whether to apply Marshak, Mark, or Milne vacuum boundary conditions. Defaults to Marshak."); params.addParam( "create_temperature_var", true, "Whether to create the temperature variable."); params.addParam( @@ -147,6 +152,7 @@ NtAction::act() params.set("variable") = var_name; if (isParamValid("use_exp_form")) params.set("use_exp_form") = getParam("use_exp_form"); + params.set("vacuum_bc_type") = getParam("vacuum_bc_type"); std::string bc_name = "VacuumConcBC_" + var_name; _problem->addBoundaryCondition("VacuumConcBC", bc_name, params); } diff --git a/src/bcs/VacuumConcBC.C b/src/bcs/VacuumConcBC.C index cfb9a24bf6..1fd70f1e31 100644 --- a/src/bcs/VacuumConcBC.C +++ b/src/bcs/VacuumConcBC.C @@ -7,22 +7,37 @@ VacuumConcBC::validParams() { InputParameters params = IntegratedBC::validParams(); params += ScalarTransportBase::validParams(); + MooseEnum vacuum_bc_type("marshak mark milne", "marshak"); + params.addParam("vacuum_bc_type", vacuum_bc_type, + "Whether to apply Marshak, Mark, or Milne vacuum boundary conditions. Defaults to Marshak."); return params; } VacuumConcBC::VacuumConcBC(const InputParameters & parameters) : IntegratedBC(parameters), ScalarTransportBase(parameters) { + switch (getParam("vacuum_bc_type")) + { + case MARSHAK: + _alpha = 2.; + break; + case MARK: + _alpha = std::sqrt(3.); + break; + case MILNE: + _alpha = 3 * 0.710446; + break; + } } Real VacuumConcBC::computeQpResidual() { - return _test[_i][_qp] * computeConcentration(_u, _qp) / 2.; + return _test[_i][_qp] * computeConcentration(_u, _qp) / _alpha; } Real VacuumConcBC::computeQpJacobian() { - return _test[_i][_qp] * computeConcentrationDerivative(_u, _phi, _j, _qp) / 2.; + return _test[_i][_qp] * computeConcentrationDerivative(_u, _phi, _j, _qp) / _alpha; } diff --git a/tests/bcs/gold/vacuum_bc_mark_out.e b/tests/bcs/gold/vacuum_bc_mark_out.e new file mode 100644 index 0000000000000000000000000000000000000000..0fe8a2fe3b9889dbfd146cdb3f332f8c42170e75 GIT binary patch literal 46420 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 literal 0 HcmV?d00001 diff --git a/tests/bcs/gold/vacuum_bc_milne_out.e b/tests/bcs/gold/vacuum_bc_milne_out.e new file mode 100644 index 0000000000000000000000000000000000000000..83e3ec48c10914944168b1675fe1263df4c96c76 GIT binary patch literal 46420 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 V`N>}%Km7Oq{ev|BPHO4N{{zI~Lreew literal 0 HcmV?d00001 diff --git a/tests/bcs/tests b/tests/bcs/tests index f44f2d9ed4..e8b547e0e4 100644 --- a/tests/bcs/tests +++ b/tests/bcs/tests @@ -1,7 +1,47 @@ [Tests] - [./coupled_bc] + [coupled_bc] type = 'Exodiff' input = 'coupled_bc_test.i' exodiff = 'coupled_bc_test_out.e' - [../] + requirement = 'The system shall be able to impose PostprocessorCoupledInflowBC and + CoupledOutflowBC for advection with flow from coupled velocity variables.' + [] + [vacuum_bc] + type = 'Exodiff' + input = 'vacuum_bc.i' + exodiff = 'vacuum_bc_out.e' + requirement = 'The system shall impose Marshak vacuum boundary conditions by default if + `vacuum_bc_type` is not set.' + [] + [vacuum_bc_marshak] + type = 'Exodiff' + input = 'vacuum_bc.i' + # Left boundary value = 1 + 2 * 0.001 = 1.002 + # Right boundary value = 2 * 0.001 = 0.002 + cli_args = 'BCs/vacuum/vacuum_bc_type=marshak' + exodiff = 'vacuum_bc_out.e' + requirement = 'The system shall impose Marshak vacuum boundary conditions.' + [] + [vacuum_bc_mark] + type = 'Exodiff' + input = 'vacuum_bc.i' + # Left boundary value = 1 + sqrt(3) * 0.001 = 1.0017320508 + # Right boundary value = sqrt(3) * 0.001 = 0.0017320508 + cli_args = 'BCs/vacuum/vacuum_bc_type=mark + BCs/dirichlet/value=1.0017320508 + Outputs/out/file_base=vacuum_bc_mark_out' + exodiff = 'vacuum_bc_mark_out.e' + requirement = 'The system shall impose Mark vacuum boundary conditions.' + [] + [vacuum_bc_milne] + type = 'Exodiff' + input = 'vacuum_bc.i' + # Left boundary value = 1 + 3 * 0.710446 * 0.001 = 1.002131338 + # Right boundary value = 3 * 0.710446 * 0.001 = 0.002131338 + cli_args = 'BCs/vacuum/vacuum_bc_type=milne + BCs/dirichlet/value=1.0017320508 + Outputs/out/file_base=vacuum_bc_milne_out' + exodiff = 'vacuum_bc_milne_out.e' + requirement = 'The system shall impose Milne vacuum boundary conditions.' + [] [] diff --git a/tests/bcs/vacuum_bc.i b/tests/bcs/vacuum_bc.i new file mode 100644 index 0000000000..0d6f00de77 --- /dev/null +++ b/tests/bcs/vacuum_bc.i @@ -0,0 +1,68 @@ +[GlobalParams] + use_exp_form = false +[] + +[Mesh] + [gmg] + type = GeneratedMeshGenerator + dim = 2 + [] +[] + +[Variables] + [flux] + [] +[] + +[Kernels] + [diffusion] + type = GroupDiffusion + variable = flux + group_number = 1 + [] +[] + +[BCs] + [dirichlet] + type = DirichletBC + variable = flux + boundary = 'left' + value = 1.002 + [] + [vacuum] + type = VacuumConcBC + variable = flux + boundary = 'right' + vacuum_bc_type = marshak + [] +[] + +[Materials] + [mat] + type = MoltresJsonMaterial + base_file = 'xsdata.json' + material_key = 0 + interp_type = none + num_groups = 1 + num_precursor_groups = 1 + [] +[] + +[Executioner] + type = Steady + solve_type = PJFNK +[] + +[Postprocessors] + [boundary_value] + type = SideAverageValue + variable = flux + boundary = 'right' + [] +[] + +[Outputs] + [out] + type = Exodus + [] +[] From be00726c79f0b4588160e52359cbbc525c651519 Mon Sep 17 00:00:00 2001 From: smpark7 Date: Thu, 30 May 2024 10:36:09 -0700 Subject: [PATCH 09/35] Add xsdata for vacuum bc tests --- tests/bcs/xsdata.json | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/bcs/xsdata.json diff --git a/tests/bcs/xsdata.json b/tests/bcs/xsdata.json new file mode 100644 index 0000000000..f8705e06f3 --- /dev/null +++ b/tests/bcs/xsdata.json @@ -0,0 +1,45 @@ +{ + "0": { + "900": { + "BETA_EFF": [ + 0.0 + ], + "CHI_D": [ + 0.0 + ], + "CHI_P": [ + 0.0 + ], + "CHI_T": [ + 0.0 + ], + "DECAY_CONSTANT": [ + 0.0 + ], + "DIFFCOEF": [ + 1e-3 + ], + "FISSE": [ + 0.0 + ], + "FISSXS": [ + 0.0 + ], + "GTRANSFXS": [ + 0.0 + ], + "NSF": [ + 0.0 + ], + "RECIPVEL": [ + 0.0 + ], + "REMXS": [ + 0.0 + ] + }, + "temp": [ + 900 + ] + } +} From f402cfd820078ff3c9c6373d62816833a09c8d6a Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Thu, 30 May 2024 17:58:56 -0400 Subject: [PATCH 10/35] Address initial review comments --- doc/content/getting_started/theory.md | 72 +++++++++++---------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/doc/content/getting_started/theory.md b/doc/content/getting_started/theory.md index cad93b5080..720a281402 100644 --- a/doc/content/getting_started/theory.md +++ b/doc/content/getting_started/theory.md @@ -16,61 +16,47 @@ the MOOSE finite element framework, enabling highly flexible and scalable reacto ## Multigroup Neutron Diffusion -The neutron diffusion equation is an approximation to the Boltzmann transport equation, and is derived by taking the zeroth and first moment with respect to $\hat\Omega$, the solid angle. -A full derivation of the diffusion equation will not be presented here for the sake of conciceness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. -This assumption yields an equation with 2 fewer phase spaces, but also has reduced fidelity when compared to the transport equation, particularly in regions in which the neutron flux has strong angular dependence. -A non-exhaustive list of regions in which the neutron flux strongly depends on angle is near material interfaces, external boundaries, strong absorbers, and weak scaterrers. +The neutron diffusion equation is an approximation to the Boltzmann transport equation, and is derived by taking the zeroth and first moment with respect to $\hat\Omega$, the direction of neutron travel. +A full derivation of the diffusion equation will not be presented here for conciceness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. +The approximations reduce the phase space through the elimination of angular dependence, but the resulting equation also has reduced fidelity when compared to the transport equation, particularly in regions where the neutron flux has strong angular dependence. +A non-exhaustive list of regions in which the neutron flux strongly depends on angle is near material interfaces between materials with highly dissimilar neutronic properties, within strong absorbers, and within near-void regions. +As a dertiministic method, the neutron diffusion method also requires discretization of the continuous energy dependence into energy groups consisting of non-overlapping, finite energy ranges across the entire energy spectrum. +This energy discretization creates a system of equations referred to as the multigroup neutron diffusion equations: +!equation +\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}-\nabla \cdot D_g \nabla \phi_g +\Sigma^R_{g} \phi_g =\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}+ \chi^p_{g} \sum^G_{g'=1} {\left(1- \beta \right) \nu_{g'} \Sigma^f_{g'}\phi_{g'} }+\chi^d_{g} \sum^I_i {\lambda_i C_i} - -The general neutron diffusion equation has exceedingly few analytical solutions and thus, for real-world problems, is solved with numerical methods. -A common method utilized is [Finite Element Method](https://mooseframework.inl.gov/help/faq/what_is_fem.html), which is the methodology employed in Moltres. -To solve the diffusion equation over complex geometries, Moltres discretizes over space, time, and energy. -Discretization through space is done with the use of volume meshes. -Discretization with respect to time is accomplished with discrete time-steps. -Finally, the energy spectrum of the scalar neutron flux is discretized into user defined bins, called energy groups. -The energy discretization of the neutron diffusion equation is called the multi-group neutron diffusion equation and is presented below. -Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. -The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. -Importantly, the $\lambda_i$ in the delayed-precursor term is not the overall decay constant of the precursor group, but rather the decay constant for specifically neutron emission. - - -\\ - -The multi-group neutron diffusion equation: +where the precursor distributions are governed by: !equation -\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}-\nabla \cdot D_g \nabla \phi_g +\Sigma^R_{g} \phi_g =\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}+ \chi^p_{g} \sum^G_{g'=1} {\left(1- \beta \right) \nu_{g'} \Sigma^f_{g'}\phi_{g'} }+\chi^d_{g} \sum^I_i {\lambda_i C_i} +\frac{\partial C_i}{\partial t}=\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}-\lambda_i C_i-\vec{u} \cdot \nabla C_i -\\ + +Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. +The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. +The multigroup neutron diffusion equations are generally impossible to solve analytically for realistic problems and are therefore typically solved with numerical methods. +Moltres utilizes the [Finite Element Method](https://mooseframework.inl.gov/help/faq/what_is_fem.html) (FEM) capabilities provided by the MOOSE framework. +In FEM, the spatial domain is discretized into finite mesh elements and the time dependence is modeled through discrete time steps and time integration methods. !table id=diff_table caption= Terms in multi-group neutron diffusion equation and their associated kernels |Term in Multi-Group Diffusion Equation | Associated Kernel |Definition of Term| | - | - | - | -| [!eq](\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}) | [NtTimeDerivative](https://arfc.github.io/moltres/source/kernels/NtTimeDerivative.html) | Time rate of change of energy group g | -| [!eq](- \nabla \cdot D_g \nabla \phi_g) | [GroupDiffusion](https://arfc.github.io/moltres/source/kernels/GroupDiffusion.html) | Streaming term of energy group g | -| [!eq](\Sigma^R_{g} \phi_g) | [SigmaR](https://arfc.github.io/moltres/source/kernels/SigmaR.html) | Removal from energy group g | -| [!eq](\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}) | [InScatter](https://arfc.github.io/moltres/source/kernels/InScatter.html) | In-scattering into energy group g | -| [!eq](\chi^p_{g} \sum^G_{g'=1} {\left[1- \beta \right] \nu_{g'} \Sigma^f_{g'}\phi_{g'} } ) | [CoupledFissionKernel](https://arfc.github.io/moltres/source/kernels/CoupledFissionKernel.html) | Prompt fission neutron source | -| [!eq](\chi^d_{g} \sum^I_i {\lambda_i C_i}) | [DelayedNeutronSource](https://arfc.github.io/moltres/source/kernels/DelayedNeutronSource.html) | Delayed fission neutron source | - - -\\ - -The governing equation for the delayed neutron precursor population: - -!equation -\frac{\partial C_i}{\partial t}=\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}-\lambda_i C_i-\vec{u} \cdot \nabla C_i - -\\ +| [!eq](\frac{1}{v_g} \frac{\partial\phi_g}{\partial t}) | [NtTimeDerivative](NtTimeDerivative.md) | Time rate of change of energy group g | +| [!eq](- \nabla \cdot D_g \nabla \phi_g) | [GroupDiffusion](GroupDiffusion.md) | Streaming term of energy group g | +| [!eq](\Sigma^R_{g} \phi_g) | [SigmaR](SigmaR.md) | Removal from energy group g | +| [!eq](\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}) | [InScatter](InScatter.md) | In-scattering into energy group g | +| [!eq](\chi^p_{g} \sum^G_{g'=1} {\left[1- \beta \right] \nu_{g'} \Sigma^f_{g'}\phi_{g'} } ) | [CoupledFissionKernel](CoupledFissionKernel.md) | Prompt fission neutron source | +| [!eq](\chi^d_{g} \sum^I_i {\lambda_i C_i}) | [DelayedNeutronSource](DelayedNeutronSource.md) | Delayed fission neutron source | !table id=prec_table caption= Terms in delayed neutron precursor equation and their associated kernels -| Term in Delayed Precursor Equation | Definition of Term | Associated Kernel | +| Term in Delayed Precursor Equation | Associated Kernel(s) | Definition of Term | | - | - | - | -| [!eq](\frac{\partial C_i}{\partial t}) | [ScalarTransportTimeDerivative](https://arfc.github.io/moltres/source/kernels/ScalarTransportTimeDerivative.html) | Time rate of change of precursor population | -| [!eq](\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}) | [PrecursorSource](https://arfc.github.io/moltres/source/kernels/PrecursorSource.html) | Production of precursor from fission -| [!eq](-\lambda_i C_i) | [PrecursorDecay](https://arfc.github.io/moltres/source/kernels/PrecursorDecay.html) | Loss of precusor due to radioactive decay | -| [!eq](-\vec{u} \cdot \nabla C_i) | [DivFreeCoupledScalarAdvection](https://arfc.github.io/moltres/source/kernels/DivFreeCoupledScalarAdvection.html) | Advection of the precursor | +| [!eq](\frac{\partial C_i}{\partial t}) | [ScalarTransportTimeDerivative](ScalarTransportTimeDerivative.md) | Time rate of change of precursor population | +| [!eq](\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}) | [PrecursorSource](PrecursorSource.md) | Production of precursor from fission +| [!eq](-\lambda_i C_i) | [PrecursorDecay](PrecursorDecay.md) | Loss of precusors due to radioactive decay | +| [!eq](-\vec{u} \cdot \nabla C_i) | [DGCoupledAdvection](DGCoupledAdvection.md), [DGFunctionConvection](DGFunctionConvection.md), [DGConvection](https://mooseframework.inl.gov/source/dgkernels/DGConvection.html) | Advection of the precursors | + +For the advective term in the delayed neutron precursor equation, $-\vec{u}\cdot \nabla C_i$, there are three kernels. DGCoupledAdvection is used when the velocity is a variable in the simulation, DGFunctionConvection is used when the velocity is a function, and DGConvection is for when the velocity is constant. ## Heat Transfer and Fluid Flow From 4d4cd74651ac40fbfef05178be37ea0af8134061 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Thu, 30 May 2024 20:42:06 -0400 Subject: [PATCH 11/35] Fix spelling errors from second round of review comments --- doc/content/getting_started/theory.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/content/getting_started/theory.md b/doc/content/getting_started/theory.md index 720a281402..2a869e5011 100644 --- a/doc/content/getting_started/theory.md +++ b/doc/content/getting_started/theory.md @@ -17,21 +17,20 @@ the MOOSE finite element framework, enabling highly flexible and scalable reacto ## Multigroup Neutron Diffusion The neutron diffusion equation is an approximation to the Boltzmann transport equation, and is derived by taking the zeroth and first moment with respect to $\hat\Omega$, the direction of neutron travel. -A full derivation of the diffusion equation will not be presented here for conciceness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. +A full derivation of the diffusion equation will not be presented here for conciseness. Importantly, when taking the first moment of the transport equation the angular flux is assumed to be linearly anisotropic. The approximations reduce the phase space through the elimination of angular dependence, but the resulting equation also has reduced fidelity when compared to the transport equation, particularly in regions where the neutron flux has strong angular dependence. A non-exhaustive list of regions in which the neutron flux strongly depends on angle is near material interfaces between materials with highly dissimilar neutronic properties, within strong absorbers, and within near-void regions. -As a dertiministic method, the neutron diffusion method also requires discretization of the continuous energy dependence into energy groups consisting of non-overlapping, finite energy ranges across the entire energy spectrum. +As a deterministic method, the neutron diffusion method also requires discretization of the continuous energy dependence into energy groups consisting of non-overlapping, finite energy ranges across the entire energy spectrum. This energy discretization creates a system of equations referred to as the multigroup neutron diffusion equations: !equation \frac{1}{v_g} \frac{\partial\phi_g}{\partial t}-\nabla \cdot D_g \nabla \phi_g +\Sigma^R_{g} \phi_g =\sum^G_{g \neq g'} {\Sigma^s_{g'\rightarrow g} \phi_{g'}}+ \chi^p_{g} \sum^G_{g'=1} {\left(1- \beta \right) \nu_{g'} \Sigma^f_{g'}\phi_{g'} }+\chi^d_{g} \sum^I_i {\lambda_i C_i} -where the precursor distributions are governed by: +The delayed neutron precursor distributions are governed by: !equation \frac{\partial C_i}{\partial t}=\sum^G_{g'=1}{\beta_i \nu \Sigma^f_{g'}\phi_{g'}}-\lambda_i C_i-\vec{u} \cdot \nabla C_i - Notably, there are two production terms of neutrons, the prompt fission source and delayed neutron precursor decay source. The first term describes the neutrons immediately born from fission, and the second term describes the neutrons born from the radioactive decay of neutron-emitting radionuclides, commonly called delayed neutron precursors. The multigroup neutron diffusion equations are generally impossible to solve analytically for realistic problems and are therefore typically solved with numerical methods. From 9562efbb3f131facc9cdb4f2610c40e6f8f428d9 Mon Sep 17 00:00:00 2001 From: smpark7 Date: Fri, 24 May 2024 12:30:40 -0700 Subject: [PATCH 12/35] Move template code to fix macos errors --- include/materials/SATauMaterial.h | 144 ++++++++++++++++++++++++ include/materials/SATauStabilized3Eqn.h | 5 +- src/materials/SATauMaterial.C | 140 ----------------------- 3 files changed, 145 insertions(+), 144 deletions(-) diff --git a/include/materials/SATauMaterial.h b/include/materials/SATauMaterial.h index 5d5cc328af..3e368b12f6 100644 --- a/include/materials/SATauMaterial.h +++ b/include/materials/SATauMaterial.h @@ -54,6 +54,150 @@ class SATauMaterialTempl : public T using T::_velocity; using T::_grad_velocity; using T::_tau; + using Coupleable::adCoupledValue; + using Coupleable::adCoupledGradient; + using Coupleable::coupledValue; + using Coupleable::adCoupledDot; }; typedef SATauMaterialTempl SATauMaterial; + +template +InputParameters +SATauMaterialTempl::validParams() +{ + InputParameters params = T::validParams(); + params.addClassDescription( + "This is the material class used to compute the stabilization parameter tau_viscosity " + "for the Spalart-Allmaras turbulent viscosity equation."); + params.addRequiredCoupledVar("mu_tilde", "Spalart-Allmaras turbulence viscosity variable"); + params.addRequiredCoupledVar("wall_distance_var", "Wall distance aux variable name"); + params.addParam("use_ft2_term", false, "Whether to apply the f_t2 term in the equation"); + return params; +} + +template +SATauMaterialTempl::SATauMaterialTempl(const InputParameters & parameters) + : T(parameters), + _sigma(2.0/3.0), + _cb1(0.1355), + _cb2(0.622), + _kappa(0.41), + _cw1(_cb1 / _kappa / _kappa + (1 + _cb2) / _sigma), + _cw2(0.3), + _cw3(2.0), + _cv1(7.1), + _ct1(1.0), + _ct2(2.0), + _ct3(1.2), + _ct4(0.5), + _mu_tilde(adCoupledValue("mu_tilde")), + _grad_mu(adCoupledGradient("mu_tilde")), + _tau_visc(this->template declareADProperty("tau_viscosity")), + _wall_dist(coupledValue("wall_distance_var")), + _use_ft2_term(this->template getParam("use_ft2_term")), + _strain_mag(this->template declareADProperty("strain_mag")), + _convection_strong_residual(this->template + declareADProperty("convection_strong_residual")), + _destruction_strong_residual(this->template + declareADProperty("destruction_strong_residual")), + _diffusion_strong_residual(this->template + declareADProperty("diffusion_strong_residual")), + _source_strong_residual(this->template + declareADProperty("source_strong_residual")), + _time_strong_residual(this->template + declareADProperty("time_strong_residual")), + _visc_strong_residual(this->template + declareADProperty("visc_strong_residual")) +{ +} + +template +void +SATauMaterialTempl::subdomainSetup() +{ + T::subdomainSetup(); + + if (_has_transient) + _visc_dot = & adCoupledDot("mu_tilde"); + else + _visc_dot = nullptr; +} + +template +void +SATauMaterialTempl::computeQpProperties() +{ + T::computeQpProperties(); + + // Compute strain rate and vorticity magnitudes + _strain_mag[_qp] = 2.0 * Utility::pow<2>(_grad_velocity[_qp](0, 0)) + + 2.0 * Utility::pow<2>(_grad_velocity[_qp](1, 1)) + + 2.0 * Utility::pow<2>(_grad_velocity[_qp](2, 2)) + + Utility::pow<2>(_grad_velocity[_qp](0, 2) + _grad_velocity[_qp](2, 0)) + + Utility::pow<2>(_grad_velocity[_qp](0, 1) + _grad_velocity[_qp](1, 0)) + + Utility::pow<2>(_grad_velocity[_qp](1, 2) + _grad_velocity[_qp](2, 1)); + _strain_mag[_qp] = std::sqrt(_strain_mag[_qp] + 1e-16); + ADReal vorticity_mag = + Utility::pow<2>(_grad_velocity[_qp](0, 2) - _grad_velocity[_qp](2, 0)) + + Utility::pow<2>(_grad_velocity[_qp](0, 1) - _grad_velocity[_qp](1, 0)) + + Utility::pow<2>(_grad_velocity[_qp](1, 2) - _grad_velocity[_qp](2, 1)); + vorticity_mag = std::sqrt(vorticity_mag + 1e-16); + + // Compute relevant parameters for the SA equation + const Real d = std::max(_wall_dist[_qp], 1e-16); // Avoid potential division by zero + const ADReal chi = _mu_tilde[_qp] / _mu[_qp]; + const ADReal fv1 = Utility::pow<3>(chi) / (Utility::pow<3>(chi) + Utility::pow<3>(_cv1)); + const ADReal fv2 = 1.0 - chi / (1. + chi * fv1); + const ADReal S_tilde = + vorticity_mag + _mu_tilde[_qp] * fv2 / (_kappa * _kappa * d * d * _rho[_qp]); + const ADReal S = S_tilde + 2 * std::min(0.0, _strain_mag[_qp] - vorticity_mag); + ADReal r; + if (S_tilde <= 0.0) // Avoid potential division by zero + r = 10.; + else + r = std::min(_mu_tilde[_qp] / (S_tilde * _kappa * _kappa * d * d * _rho[_qp]), 10.0); + const ADReal g = r + _cw2 * (Utility::pow<6>(r) - r); + const ADReal fw = g * std::pow((1. + Utility::pow<6>(_cw3)) / + (Utility::pow<6>(g) + Utility::pow<6>(_cw3)), + 1.0 / 6.0); + + // Compute strong forms of the SA equation + if (_use_ft2_term) // Whether to apply the f_t2 term in the SA equation + { + const ADReal ft2 = _ct3 * std::exp(-_ct4 * chi * chi); + _destruction_strong_residual[_qp] = + (_cw1 * fw - _cb1 * ft2 / _kappa / _kappa) * Utility::pow<2>(_mu_tilde[_qp] / d); + _source_strong_residual[_qp] = -(1 - ft2) * _rho[_qp] * _cb1 * S * _mu_tilde[_qp]; + } + else + { + _destruction_strong_residual[_qp] = _cw1 * fw * Utility::pow<2>(_mu_tilde[_qp] / d); + _source_strong_residual[_qp] = -_rho[_qp] * _cb1 * S * _mu_tilde[_qp]; + } + _convection_strong_residual[_qp] = _rho[_qp] * _velocity[_qp] * _grad_mu[_qp]; + _diffusion_strong_residual[_qp] = -1.0 / _sigma * _cb2 * (_grad_mu[_qp] * _grad_mu[_qp]); + if (_has_transient) + _time_strong_residual[_qp] = (*_visc_dot)[_qp] * _rho[_qp]; + _visc_strong_residual[_qp] = _has_transient ? _time_strong_residual[_qp] : 0.0; + _visc_strong_residual[_qp] += (_convection_strong_residual[_qp] + + _destruction_strong_residual[_qp] + + _diffusion_strong_residual[_qp] + + _source_strong_residual[_qp]); + + // Compute the tau stabilization parameter for mu_tilde SUPG stabilization + const auto nu_visc = (_mu[_qp] + _mu_tilde[_qp]) / _rho[_qp] / _sigma; + const auto transient_part = _has_transient ? 4.0 / (_dt * _dt) : 0.0; + const auto speed = NS::computeSpeed(_velocity[_qp]); + _tau_visc[_qp] = _alpha / std::sqrt(transient_part + + (2.0 * speed / _hmax) * (2.0 * speed / _hmax) + + 9.0 * (4.0 * nu_visc / (_hmax * _hmax)) * + 4.0 * (nu_visc / (_hmax * _hmax))); + + // Replace the nu value in the tau stabilization parameter for INS SUPG stabilization + const auto nu = (_mu[_qp] + _mu_tilde[_qp] * fv1) / _rho[_qp]; + _tau[_qp] = _alpha / std::sqrt(transient_part + + (2.0 * speed / _hmax) * (2.0 * speed / _hmax) + + 9.0 * (4.0 * nu / (_hmax * _hmax)) * + 4.0 * (nu / (_hmax * _hmax))); +} diff --git a/include/materials/SATauStabilized3Eqn.h b/include/materials/SATauStabilized3Eqn.h index 41a02d5172..8fb53afef6 100644 --- a/include/materials/SATauStabilized3Eqn.h +++ b/include/materials/SATauStabilized3Eqn.h @@ -1,13 +1,10 @@ #pragma once #include "SATauMaterial.h" +#include "INSADStabilized3Eqn.h" -class INSADMaterial; class INSADStabilized3Eqn; -#include "SATauMaterial.h" -#include "INSADStabilized3Eqn.h" - class SATauStabilized3Eqn : public SATauMaterialTempl { public: diff --git a/src/materials/SATauMaterial.C b/src/materials/SATauMaterial.C index 54eebf5972..30bf407569 100644 --- a/src/materials/SATauMaterial.C +++ b/src/materials/SATauMaterial.C @@ -3,144 +3,4 @@ registerMooseObject("MoltresApp", SATauMaterial); -template -InputParameters -SATauMaterialTempl::validParams() -{ - InputParameters params = T::validParams(); - params.addClassDescription( - "This is the material class used to compute the stabilization parameter tau_viscosity " - "for the Spalart-Allmaras turbulent viscosity equation."); - params.addRequiredCoupledVar("mu_tilde", "Spalart-Allmaras turbulence viscosity variable"); - params.addRequiredCoupledVar("wall_distance_var", "Wall distance aux variable name"); - params.addParam("use_ft2_term", false, "Whether to apply the f_t2 term in the equation"); - return params; -} - -template -SATauMaterialTempl::SATauMaterialTempl(const InputParameters & parameters) - : T(parameters), - _sigma(2.0/3.0), - _cb1(0.1355), - _cb2(0.622), - _kappa(0.41), - _cw1(_cb1 / _kappa / _kappa + (1 + _cb2) / _sigma), - _cw2(0.3), - _cw3(2.0), - _cv1(7.1), - _ct1(1.0), - _ct2(2.0), - _ct3(1.2), - _ct4(0.5), - _mu_tilde(this->template adCoupledValue("mu_tilde")), - _grad_mu(this->template adCoupledGradient("mu_tilde")), - _tau_visc(this->template declareADProperty("tau_viscosity")), - _wall_dist(this->template coupledValue("wall_distance_var")), - _use_ft2_term(this->template getParam("use_ft2_term")), - _strain_mag(this->template declareADProperty("strain_mag")), - _convection_strong_residual(this->template - declareADProperty("convection_strong_residual")), - _destruction_strong_residual(this->template - declareADProperty("destruction_strong_residual")), - _diffusion_strong_residual(this->template - declareADProperty("diffusion_strong_residual")), - _source_strong_residual(this->template - declareADProperty("source_strong_residual")), - _time_strong_residual(this->template - declareADProperty("time_strong_residual")), - _visc_strong_residual(this->template - declareADProperty("visc_strong_residual")) -{ -} - -template -void -SATauMaterialTempl::subdomainSetup() -{ - T::subdomainSetup(); - - if (_has_transient) - _visc_dot = & this->template adCoupledDot("mu_tilde"); - else - _visc_dot = nullptr; -} - -template -void -SATauMaterialTempl::computeQpProperties() -{ - T::computeQpProperties(); - - // Compute strain rate and vorticity magnitudes - _strain_mag[_qp] = 2.0 * Utility::pow<2>(_grad_velocity[_qp](0, 0)) + - 2.0 * Utility::pow<2>(_grad_velocity[_qp](1, 1)) + - 2.0 * Utility::pow<2>(_grad_velocity[_qp](2, 2)) + - Utility::pow<2>(_grad_velocity[_qp](0, 2) + _grad_velocity[_qp](2, 0)) + - Utility::pow<2>(_grad_velocity[_qp](0, 1) + _grad_velocity[_qp](1, 0)) + - Utility::pow<2>(_grad_velocity[_qp](1, 2) + _grad_velocity[_qp](2, 1)); - _strain_mag[_qp] = std::sqrt(_strain_mag[_qp] + 1e-16); - ADReal vorticity_mag = - Utility::pow<2>(_grad_velocity[_qp](0, 2) - _grad_velocity[_qp](2, 0)) + - Utility::pow<2>(_grad_velocity[_qp](0, 1) - _grad_velocity[_qp](1, 0)) + - Utility::pow<2>(_grad_velocity[_qp](1, 2) - _grad_velocity[_qp](2, 1)); - vorticity_mag = std::sqrt(vorticity_mag + 1e-16); - - // Compute relevant parameters for the SA equation - const Real d = std::max(_wall_dist[_qp], 1e-16); // Avoid potential division by zero - const ADReal chi = _mu_tilde[_qp] / _mu[_qp]; - const ADReal fv1 = Utility::pow<3>(chi) / (Utility::pow<3>(chi) + Utility::pow<3>(_cv1)); - const ADReal fv2 = 1.0 - chi / (1. + chi * fv1); - const ADReal S_tilde = - vorticity_mag + _mu_tilde[_qp] * fv2 / (_kappa * _kappa * d * d * _rho[_qp]); - const ADReal S = S_tilde + 2 * std::min(0.0, _strain_mag[_qp] - vorticity_mag); - ADReal r; - if (S_tilde <= 0.0) // Avoid potential division by zero - r = 10.; - else - r = std::min(_mu_tilde[_qp] / (S_tilde * _kappa * _kappa * d * d * _rho[_qp]), 10.0); - const ADReal g = r + _cw2 * (Utility::pow<6>(r) - r); - const ADReal fw = g * std::pow((1. + Utility::pow<6>(_cw3)) / - (Utility::pow<6>(g) + Utility::pow<6>(_cw3)), - 1.0 / 6.0); - - // Compute strong forms of the SA equation - if (_use_ft2_term) // Whether to apply the f_t2 term in the SA equation - { - const ADReal ft2 = _ct3 * std::exp(-_ct4 * chi * chi); - _destruction_strong_residual[_qp] = - (_cw1 * fw - _cb1 * ft2 / _kappa / _kappa) * Utility::pow<2>(_mu_tilde[_qp] / d); - _source_strong_residual[_qp] = -(1 - ft2) * _rho[_qp] * _cb1 * S * _mu_tilde[_qp]; - } - else - { - _destruction_strong_residual[_qp] = _cw1 * fw * Utility::pow<2>(_mu_tilde[_qp] / d); - _source_strong_residual[_qp] = -_rho[_qp] * _cb1 * S * _mu_tilde[_qp]; - } - _convection_strong_residual[_qp] = _rho[_qp] * _velocity[_qp] * _grad_mu[_qp]; - _diffusion_strong_residual[_qp] = -1.0 / _sigma * _cb2 * (_grad_mu[_qp] * _grad_mu[_qp]); - if (_has_transient) - _time_strong_residual[_qp] = (*_visc_dot)[_qp] * _rho[_qp]; - _visc_strong_residual[_qp] = _has_transient ? _time_strong_residual[_qp] : 0.0; - _visc_strong_residual[_qp] += (_convection_strong_residual[_qp] + - _destruction_strong_residual[_qp] + - _diffusion_strong_residual[_qp] + - _source_strong_residual[_qp]); - - // Compute the tau stabilization parameter for mu_tilde SUPG stabilization - const auto nu_visc = (_mu[_qp] + _mu_tilde[_qp]) / _rho[_qp] / _sigma; - const auto transient_part = _has_transient ? 4.0 / (_dt * _dt) : 0.0; - const auto speed = NS::computeSpeed(_velocity[_qp]); - _tau_visc[_qp] = _alpha / std::sqrt(transient_part + - (2.0 * speed / _hmax) * (2.0 * speed / _hmax) + - 9.0 * (4.0 * nu_visc / (_hmax * _hmax)) * - 4.0 * (nu_visc / (_hmax * _hmax))); - - // Replace the nu value in the tau stabilization parameter for INS SUPG stabilization - const auto nu = (_mu[_qp] + _mu_tilde[_qp] * fv1) / _rho[_qp]; - _tau[_qp] = _alpha / std::sqrt(transient_part + - (2.0 * speed / _hmax) * (2.0 * speed / _hmax) + - 9.0 * (4.0 * nu / (_hmax * _hmax)) * - 4.0 * (nu / (_hmax * _hmax))); -} - template class SATauMaterialTempl; From 06f7e003dfd2dd09652ce9b61ddede44e7f54ac4 Mon Sep 17 00:00:00 2001 From: smpark7 Date: Fri, 31 May 2024 14:51:16 -0700 Subject: [PATCH 13/35] Add more documentation and references for the Milne BC --- doc/content/bib/references.bib | 36 ++++++++++++++++++++++++++ doc/content/source/bcs/VacuumConcBC.md | 10 +++++-- src/bcs/VacuumConcBC.C | 2 ++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 doc/content/bib/references.bib diff --git a/doc/content/bib/references.bib b/doc/content/bib/references.bib new file mode 100644 index 0000000000..1644211776 --- /dev/null +++ b/doc/content/bib/references.bib @@ -0,0 +1,36 @@ + +@article{placzek_milnes_1947, + title = {Milne's {Problem} in {Transport} {Theory}}, + volume = {72}, + url = {https://link.aps.org/doi/10.1103/PhysRev.72.550}, + doi = {10.1103/PhysRev.72.550}, + abstract = {A modified derivation of the Wiener-Hopf solution of Milne's problem is given in a form suitable for application to problems in the theory of neutron diffusion.}, + number = {7}, + urldate = {2024-05-31}, + journal = {Physical Review}, + author = {Placzek, G. and Seidel, W.}, + month = oct, + year = {1947}, + note = {Publisher: American Physical Society}, + pages = {550--555}, + file = {APS Snapshot:C\:\\Users\\Sun Myung\\Zotero\\storage\\IJVWPMDS\\PhysRev.72.html:text/html;Full Text PDF:C\:\\Users\\Sun Myung\\Zotero\\storage\\TVUWZQ6J\\Placzek and Seidel - 1947 - Milne's Problem in Transport Theory.pdf:application/pdf}, +} + +@article{rulko_variational_1995, + title = {Variational {P1} {Approximations} of {General}-{Geometry} {Multigroup} {Transport} {Problems}}, + volume = {121}, + issn = {0029-5639}, + url = {https://doi.org/10.13182/NSE121-393}, + doi = {10.13182/NSE121-393}, + abstract = {A variational approximation is developed for general-geometry multigroup transport problems with arbitrary anisotropic scattering. The variational principle is based on a functional that approximates a reaction rate in a subdomain of the system. In principle, approximations that result from this functional “optimally”determine such reaction rates. The functional contains an arbitrary parameter α and requires the approximate solutions of a forward and an adjoint transport problem. If the basis functions for the forward and adjoint solutions are chosen to be linear functions of the angular variable Ω, the functional yields the familiar multigroup P1 equations for all values of α. However, the boundary conditions that result from the functional depend on α. In particular, for problems with vacuum boundaries, one obtains the conventional mixed boundary condition, but with an extrapolation distance that depends continuously on α. The choice α = 0 yields a generalization of boundary conditions derived earlier by Federighi and Pomraning for a more limited class of problems. The choice α = 1 yields a generalization of boundary conditions derived previously by Davis for mono-energetic problems. Other boundary conditions are obtained by choosing different values of α. We discuss this indeterminancy of a in conjunction with numerical experiments.}, + number = {3}, + urldate = {2024-05-31}, + journal = {Nuclear Science and Engineering}, + author = {Rulko, Robert P. and Tomašević, Djordje and Larsen, Edward W.}, + month = dec, + year = {1995}, + note = {Publisher: Taylor \& Francis +\_eprint: https://doi.org/10.13182/NSE121-393}, + pages = {393--404}, + file = {Full Text PDF:C\:\\Users\\Sun Myung\\Zotero\\storage\\8NHDX7DM\\Rulko et al. - 1995 - Variational P1 Approximations of General-Geometry .pdf:application/pdf}, +} diff --git a/doc/content/source/bcs/VacuumConcBC.md b/doc/content/source/bcs/VacuumConcBC.md index f172c4d8c0..a2d13cd142 100644 --- a/doc/content/source/bcs/VacuumConcBC.md +++ b/doc/content/source/bcs/VacuumConcBC.md @@ -12,12 +12,18 @@ by parts to the neutron diffusion term ([GroupDiffusion](/GroupDiffusion.md)) is -\int_{\partial V}\psi D_g\nabla\phi_g\cdot\hat{n}\ dS = \int_{\partial V}\psi\frac{\phi_g}{\alpha}\ dS -The value of $\alpha$ varies depending on the formulation selected using the `vacuum_bc_type` -parameter. +The value of $\alpha$ varies depending on the BC type selected using the `vacuum_bc_type` +parameter. The available options are: + 1. Marshak: $\alpha=2$ 2. Mark: $\alpha=\sqrt{3}$ 3. Milne: $\alpha=3\times 0.710446$ +The Marshak and Mark BCs are derived from vacuum boundary condition approximations using +$P_1$ and $S_2$ transport methods, respectively. The Milne BC is derived from the exact analytical +solution of the Milne problem [!citep](placzek_milnes_1947) and has been proven to be accurate for +a wide range of diffusive problems [!citep](rulko_variational_1995). + ## Example Input File Syntax !! Describe and include an example of how to use the VacuumConcBC object. diff --git a/src/bcs/VacuumConcBC.C b/src/bcs/VacuumConcBC.C index 1fd70f1e31..42a951133f 100644 --- a/src/bcs/VacuumConcBC.C +++ b/src/bcs/VacuumConcBC.C @@ -25,6 +25,8 @@ VacuumConcBC::VacuumConcBC(const InputParameters & parameters) _alpha = std::sqrt(3.); break; case MILNE: + // Derived from the exact analytical solution to the Milne problem. See MooseDocs-based + // documentation for more information. _alpha = 3 * 0.710446; break; } From 4b53cc35e4430a2825ca2a91fec1fec4d2542d85 Mon Sep 17 00:00:00 2001 From: smpark7 Date: Tue, 4 Jun 2024 11:06:19 -0700 Subject: [PATCH 14/35] Assign a protected variable name to the milne extrapolation coefficient value --- include/bcs/VacuumConcBC.h | 7 ++++++- src/bcs/VacuumConcBC.C | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/bcs/VacuumConcBC.h b/include/bcs/VacuumConcBC.h index 1a087b2bff..0b92826f68 100644 --- a/include/bcs/VacuumConcBC.h +++ b/include/bcs/VacuumConcBC.h @@ -34,6 +34,11 @@ class VacuumConcBC : public IntegratedBC, public ScalarTransportBase MILNE }; - /// Ratio of u to du/dn + // Ratio of u to du/dn Real _alpha; + + // Milne vacuum boundary extrapolation coefficient + // Derived from the exact analytical solution to the Milne problem. See MooseDocs-based + // documentation for more information. + Real _milne_extrapolation_coefficient = 3 * 0.710446; }; diff --git a/src/bcs/VacuumConcBC.C b/src/bcs/VacuumConcBC.C index 42a951133f..71718bc413 100644 --- a/src/bcs/VacuumConcBC.C +++ b/src/bcs/VacuumConcBC.C @@ -25,9 +25,7 @@ VacuumConcBC::VacuumConcBC(const InputParameters & parameters) _alpha = std::sqrt(3.); break; case MILNE: - // Derived from the exact analytical solution to the Milne problem. See MooseDocs-based - // documentation for more information. - _alpha = 3 * 0.710446; + _alpha = _milne_extrapolation_coefficient; break; } } From ad373dbf18823f5e1e25207a6fb6378f1c6c30ea Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Thu, 13 Jun 2024 17:08:12 -0500 Subject: [PATCH 15/35] Address Issue #271, all tests pass --- include/kernels/INSBoussinesqBodyForce.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/kernels/INSBoussinesqBodyForce.h b/include/kernels/INSBoussinesqBodyForce.h index 7d2f64b8e3..838d949f1b 100644 --- a/include/kernels/INSBoussinesqBodyForce.h +++ b/include/kernels/INSBoussinesqBodyForce.h @@ -19,7 +19,7 @@ class INSBoussinesqBodyForce : public Kernel protected: virtual Real computeQpResidual() override; virtual Real computeQpJacobian() override; - virtual Real computeQpOffDiagJacobian(unsigned jvar); + virtual Real computeQpOffDiagJacobian(unsigned jvar) override; // Parameters const VariableValue & _T; From 5db4455f770be80ad46509a2fa2e5a316e456aca Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Sun, 16 Jun 2024 19:02:14 -0500 Subject: [PATCH 16/35] Add preliminary, brief documentation to NtAction --- doc/content/source/actions/NtAction.md | 100 +++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 6 deletions(-) diff --git a/doc/content/source/actions/NtAction.md b/doc/content/source/actions/NtAction.md index c83824310f..b09f9263bd 100644 --- a/doc/content/source/actions/NtAction.md +++ b/doc/content/source/actions/NtAction.md @@ -1,16 +1,104 @@ # NtAction -!alert construction title=Undocumented Action Class -The NtAction has not been documented. The content listed below should be used as a starting point for -documenting the class, which includes the typical automatic documentation associated with an Action; -however, what is contained is ultimately determined by what is necessary to make the documentation -clear for users. +!alert warning +This action sets up ONLY the variables and kernels for neutron diffusion, NOT the variables and kernels for precursor tracking. +To generate the precursor variables and kernels, see [PrecursorAction](PrecursorAction.md). !syntax description /Nt/NtAction ## Overview -!! Replace these lines with information regarding the NtAction action. ++NtAction+ greatly reduces input file length and complexity by internally generating diffusion variables and kernels. +When including only the required input parameters, this action constructs the neutron group variables and their associated kernels: +[SigmaR](SigmaR.md), [GroupDiffusion](GroupDiffusion.md), [InScatter](InScatter.md), and [CoupledFissionKernel](CoupledFissionKernel.md). +With 'account_delayed' set to +True+, [DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, otherwise this kernel is not constructed and the simulation does not consider the delayed neutron precursor effects on the neutron flux distributions. + +An example input file without the +NtAction+, showing only the portion affected by the action: + +```language=text +[Variables] + [group1] + order = FIRST + family = LAGRANGE + [] + [group2] + order = FIRST + family = LAGRANGE + [] +[] + +[Kernels] + #--------------------------------------------------------------------- + # Group 1 Neutronics + #--------------------------------------------------------------------- + [sigma_r_group1] + type = SigmaR + variable = group1 + group_number = 1 + [] + [diff_group1] + type = GroupDiffusion + variable = group1 + group_number = 1 + [] + [inscatter_group1] + type = InScatter + variable = group1 + group_number = 1 + [] + [fission_source_group1] + type = CoupledFissionKernel + variable = group1 + group_number = 1 + block = '0' + extra_vector_tags = 'eigen' + [] + [delayed_group1] + type = DelayedNeutronSource + variable = group1 + block = '0' + group_number = 1 + [] + + #--------------------------------------------------------------------- + # Group 2 Neutronics + #--------------------------------------------------------------------- + [sigma_r_group2] + type = SigmaR + variable = group2 + group_number = 2 + [] + [diff_group2] + type = GroupDiffusion + variable = group2 + group_number = 2 + [] + [fission_source_group2] + type = CoupledFissionKernel + variable = group2 + group_number = 2 + block = '0' + extra_vector_tags = 'eigen' + [] + [inscatter_group2] + type = InScatter + variable = group2 + group_number = 2 + [] +[] +``` + +And then the same variables and kernels created with the +NtAction+: + +```language=text +[Nt] + var_name_base = group + vacuum_boundaries = 'fuel_bottom mod_bottom right fuel_top mod_top' + pre_blocks = '0' + create_temperature_var = false + eigen = true +[] +``` ## Example Input File Syntax From 8fe92cc4a8600a227baf804de1ae387d178c046a Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Mon, 17 Jun 2024 13:25:17 -0500 Subject: [PATCH 17/35] Fix sample input location in md file --- doc/content/source/actions/NtAction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/content/source/actions/NtAction.md b/doc/content/source/actions/NtAction.md index b09f9263bd..1c534d465e 100644 --- a/doc/content/source/actions/NtAction.md +++ b/doc/content/source/actions/NtAction.md @@ -13,6 +13,8 @@ When including only the required input parameters, this action constructs the ne [SigmaR](SigmaR.md), [GroupDiffusion](GroupDiffusion.md), [InScatter](InScatter.md), and [CoupledFissionKernel](CoupledFissionKernel.md). With 'account_delayed' set to +True+, [DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, otherwise this kernel is not constructed and the simulation does not consider the delayed neutron precursor effects on the neutron flux distributions. +## Example Input File Syntax + An example input file without the +NtAction+, showing only the portion affected by the action: ```language=text @@ -100,8 +102,6 @@ And then the same variables and kernels created with the +NtAction+: [] ``` -## Example Input File Syntax - !! Describe and include an example of how to use the NtAction action. !syntax description /Nt/NtAction From 00ec023a95b00cabbbf76e863f1e5ee0c5acbcac Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Mon, 17 Jun 2024 13:32:35 -0500 Subject: [PATCH 18/35] Add reference to tutorial page --- doc/content/source/actions/NtAction.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/content/source/actions/NtAction.md b/doc/content/source/actions/NtAction.md index 1c534d465e..763389a1c7 100644 --- a/doc/content/source/actions/NtAction.md +++ b/doc/content/source/actions/NtAction.md @@ -13,6 +13,8 @@ When including only the required input parameters, this action constructs the ne [SigmaR](SigmaR.md), [GroupDiffusion](GroupDiffusion.md), [InScatter](InScatter.md), and [CoupledFissionKernel](CoupledFissionKernel.md). With 'account_delayed' set to +True+, [DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, otherwise this kernel is not constructed and the simulation does not consider the delayed neutron precursor effects on the neutron flux distributions. +For more information regarding the use of +NtAction+ please refer to the tutorials located [here](tutorials.md), specifically the +Multiphysics Reactor Simulations+ section. + ## Example Input File Syntax An example input file without the +NtAction+, showing only the portion affected by the action: From 1cf202b0e13fcf045f01bb58c67d3066950d0eb6 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Tue, 18 Jun 2024 14:28:55 -0500 Subject: [PATCH 19/35] Address initial comments and feedback --- doc/content/source/actions/NtAction.md | 105 ++++--------------------- 1 file changed, 15 insertions(+), 90 deletions(-) diff --git a/doc/content/source/actions/NtAction.md b/doc/content/source/actions/NtAction.md index 763389a1c7..bdbf3a590a 100644 --- a/doc/content/source/actions/NtAction.md +++ b/doc/content/source/actions/NtAction.md @@ -1,110 +1,35 @@ # NtAction -!alert warning -This action sets up ONLY the variables and kernels for neutron diffusion, NOT the variables and kernels for precursor tracking. -To generate the precursor variables and kernels, see [PrecursorAction](PrecursorAction.md). +!alert note +This action sets up ONLY the variables, kernels, and BCs for neutron diffusion, NOT the variables, kernels, and BCs for precursor tracking. +To generate these, see [PrecursorAction](PrecursorAction.md). !syntax description /Nt/NtAction ## Overview -+NtAction+ greatly reduces input file length and complexity by internally generating diffusion variables and kernels. +```NtAction``` greatly reduces input file length and complexity by automatically setting up variables, kernels, and BCs for the neutron diffusion equations. When including only the required input parameters, this action constructs the neutron group variables and their associated kernels: [SigmaR](SigmaR.md), [GroupDiffusion](GroupDiffusion.md), [InScatter](InScatter.md), and [CoupledFissionKernel](CoupledFissionKernel.md). -With 'account_delayed' set to +True+, [DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, otherwise this kernel is not constructed and the simulation does not consider the delayed neutron precursor effects on the neutron flux distributions. +With ```account_delayed``` set to ```True```, [DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, +otherwise this kernel is not constructed and the simulation does not consider +the delayed neutron precursor effects on the neutron flux distributions. -For more information regarding the use of +NtAction+ please refer to the tutorials located [here](tutorials.md), specifically the +Multiphysics Reactor Simulations+ section. +For more information regarding the use of ```NtAction``` please refer to the tutorials located [here](tutorials.md), +specifically the +Multiphysics Reactor Simulations+ section. ## Example Input File Syntax -An example input file without the +NtAction+, showing only the portion affected by the action: +An example input file without the ```NtAction```, showing only the portion affected by the action: -```language=text -[Variables] - [group1] - order = FIRST - family = LAGRANGE - [] - [group2] - order = FIRST - family = LAGRANGE - [] -[] +!listing tutorial/eigenvalue/nts.i + start=Variables end=Materials remove=Precursors -[Kernels] - #--------------------------------------------------------------------- - # Group 1 Neutronics - #--------------------------------------------------------------------- - [sigma_r_group1] - type = SigmaR - variable = group1 - group_number = 1 - [] - [diff_group1] - type = GroupDiffusion - variable = group1 - group_number = 1 - [] - [inscatter_group1] - type = InScatter - variable = group1 - group_number = 1 - [] - [fission_source_group1] - type = CoupledFissionKernel - variable = group1 - group_number = 1 - block = '0' - extra_vector_tags = 'eigen' - [] - [delayed_group1] - type = DelayedNeutronSource - variable = group1 - block = '0' - group_number = 1 - [] - #--------------------------------------------------------------------- - # Group 2 Neutronics - #--------------------------------------------------------------------- - [sigma_r_group2] - type = SigmaR - variable = group2 - group_number = 2 - [] - [diff_group2] - type = GroupDiffusion - variable = group2 - group_number = 2 - [] - [fission_source_group2] - type = CoupledFissionKernel - variable = group2 - group_number = 2 - block = '0' - extra_vector_tags = 'eigen' - [] - [inscatter_group2] - type = InScatter - variable = group2 - group_number = 2 - [] -[] -``` +And then the same information created with the ```NtAction```: -And then the same variables and kernels created with the +NtAction+: - -```language=text -[Nt] - var_name_base = group - vacuum_boundaries = 'fuel_bottom mod_bottom right fuel_top mod_top' - pre_blocks = '0' - create_temperature_var = false - eigen = true -[] -``` - -!! Describe and include an example of how to use the NtAction action. +!listing tutorial/eigenvalue/nts-action.i + block=Nt !syntax description /Nt/NtAction From f54db80620ae20a6842a5c4d2eb9f37ae3f80a36 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Tue, 18 Jun 2024 15:08:55 -0500 Subject: [PATCH 20/35] Fix line lengths to be under 100 characters --- doc/content/source/actions/NtAction.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/doc/content/source/actions/NtAction.md b/doc/content/source/actions/NtAction.md index bdbf3a590a..65faac4c94 100644 --- a/doc/content/source/actions/NtAction.md +++ b/doc/content/source/actions/NtAction.md @@ -1,26 +1,33 @@ # NtAction !alert note -This action sets up ONLY the variables, kernels, and BCs for neutron diffusion, NOT the variables, kernels, and BCs for precursor tracking. +This action sets up ONLY the variables, kernels, and BCs for neutron diffusion, +NOT the variables, kernels, and BCs for precursor tracking. To generate these, see [PrecursorAction](PrecursorAction.md). !syntax description /Nt/NtAction ## Overview -```NtAction``` greatly reduces input file length and complexity by automatically setting up variables, kernels, and BCs for the neutron diffusion equations. -When including only the required input parameters, this action constructs the neutron group variables and their associated kernels: -[SigmaR](SigmaR.md), [GroupDiffusion](GroupDiffusion.md), [InScatter](InScatter.md), and [CoupledFissionKernel](CoupledFissionKernel.md). -With ```account_delayed``` set to ```True```, [DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, +```NtAction``` greatly reduces input file length and complexity by automatically +setting up variables, kernels, and BCs for the neutron diffusion equations. +When including only the required input parameters, this action constructs the +neutron group variables and their associated kernels: +[SigmaR](SigmaR.md), [GroupDiffusion](GroupDiffusion.md), +[InScatter](InScatter.md), and [CoupledFissionKernel](CoupledFissionKernel.md). +With ```account_delayed``` set to ```True```, +[DelayedNeutronSource](DelayedNeutronSource.md) is also constructed, otherwise this kernel is not constructed and the simulation does not consider the delayed neutron precursor effects on the neutron flux distributions. -For more information regarding the use of ```NtAction``` please refer to the tutorials located [here](tutorials.md), -specifically the +Multiphysics Reactor Simulations+ section. +For more information regarding the use of ```NtAction``` please refer to the +tutorials located [here](tutorials.md), specifically the +Multiphysics Reactor +Simulations+ section. ## Example Input File Syntax -An example input file without the ```NtAction```, showing only the portion affected by the action: +An example input file without the ```NtAction```, showing only the portion +affected by the action: !listing tutorial/eigenvalue/nts.i start=Variables end=Materials remove=Precursors From 188b2184477a38cded45fa8e117e14717bb319f2 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Tue, 18 Jun 2024 15:32:37 -0500 Subject: [PATCH 21/35] Fix line endings --- doc/content/source/actions/NtAction.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/content/source/actions/NtAction.md b/doc/content/source/actions/NtAction.md index 65faac4c94..0a47fd8c82 100644 --- a/doc/content/source/actions/NtAction.md +++ b/doc/content/source/actions/NtAction.md @@ -2,7 +2,7 @@ !alert note This action sets up ONLY the variables, kernels, and BCs for neutron diffusion, -NOT the variables, kernels, and BCs for precursor tracking. +NOT the variables, kernels, and BCs for precursor tracking. To generate these, see [PrecursorAction](PrecursorAction.md). !syntax description /Nt/NtAction @@ -29,11 +29,11 @@ Simulations+ section. An example input file without the ```NtAction```, showing only the portion affected by the action: -!listing tutorial/eigenvalue/nts.i +!listing tutorial/eigenvalue/nts.i start=Variables end=Materials remove=Precursors -And then the same information created with the ```NtAction```: +And then the same information created with the ```NtAction```: !listing tutorial/eigenvalue/nts-action.i block=Nt From 542a2ac49e78c8ef376952e72655320e6d191a6a Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Thu, 25 Jul 2024 16:19:03 -0500 Subject: [PATCH 22/35] Change _use_exp_form default behavior to false --- src/base/ScalarTransportBase.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/base/ScalarTransportBase.C b/src/base/ScalarTransportBase.C index 28a7d12801..57d1e418e8 100644 --- a/src/base/ScalarTransportBase.C +++ b/src/base/ScalarTransportBase.C @@ -7,7 +7,7 @@ ScalarTransportBase::validParams() { InputParameters params = emptyInputParameters(); params.addParam("use_exp_form", - true, + false, "Whether concentrations should be in an expotential/logarithmic format."); return params; } From 9cd82b8acded9c8a9f78d5ddd1c78dc6f45ee151 Mon Sep 17 00:00:00 2001 From: smpark7 Date: Thu, 29 Aug 2024 18:19:55 -0700 Subject: [PATCH 23/35] Update MOOSE to Jul 24 --- moose | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moose b/moose index b38351138b..9a7e0e1d7c 160000 --- a/moose +++ b/moose @@ -1 +1 @@ -Subproject commit b38351138bf10bd150c21926f36a6a286e278a66 +Subproject commit 9a7e0e1d7c085296a28c0506219b649d7779dd75 From def8ecc55eb07694f43af8c6810c1b3d564b143f Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Sun, 15 Sep 2024 22:18:14 -0500 Subject: [PATCH 24/35] Add dependabot auto-update for moose --- .github/dependabot.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..1c82d5cbee --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: "gitsubmodule" + directory: "/" + allow: + - dependency-name: "moose" + schedule: + interval: "weekly" + time: "01:45" + open-pull-requests-limit: 1 + labels: + - "Comp:Core" + - "Priority:1-Critical" \ No newline at end of file From 22564ffaad4a7bc3a0128ddd418dc81800d9bb43 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Sun, 15 Sep 2024 22:54:42 -0500 Subject: [PATCH 25/35] add Reviewers to auto-PR --- .github/dependabot.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1c82d5cbee..721e12e718 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,4 +10,7 @@ updates: open-pull-requests-limit: 1 labels: - "Comp:Core" - - "Priority:1-Critical" \ No newline at end of file + - "Priority:1-Critical" + reviewers: + - "smpark7" + - "nglaser3" \ No newline at end of file From 7bcdf6a632ebbe7d713e5082371008a3b28b6f09 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Mon, 16 Sep 2024 14:46:01 -0500 Subject: [PATCH 26/35] Add PR and Commit Prefix --- .github/dependabot.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 721e12e718..d46adeaf40 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -7,6 +7,8 @@ updates: schedule: interval: "weekly" time: "01:45" + commit-message: + prefix: "auto_update_moose" open-pull-requests-limit: 1 labels: - "Comp:Core" From f424a001acdfa2e56ae83f4fcb2f00f8b579ba33 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Wed, 18 Sep 2024 02:29:04 -0600 Subject: [PATCH 27/35] Don't use std::norm for Euclidean norm refs change `std::norm` overload in libMesh/libmesh#3895 --- src/auxkernels/WallShearStressAux.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auxkernels/WallShearStressAux.C b/src/auxkernels/WallShearStressAux.C index 046948785b..43ba0c13b6 100644 --- a/src/auxkernels/WallShearStressAux.C +++ b/src/auxkernels/WallShearStressAux.C @@ -40,5 +40,5 @@ WallShearStressAux::computeValue() // Parallel component of prior velocity gradient grad_vel_wall -= (_normals[_qp] * grad_vel_wall) * _normals[_qp]; - return raw_value(_mu[_qp]) * std::norm(grad_vel_wall); + return raw_value(_mu[_qp]) * grad_vel_wall.norm(); } From fca37526dc30249e04a57d6927fd90c0ea004e5b Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Wed, 18 Sep 2024 16:46:33 -0500 Subject: [PATCH 28/35] Set devel as target branch for MOOSE submodule --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index a733c15e8c..e47e28d554 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,4 @@ [submodule "moose"] path = moose url = ../../idaholab/moose + branch = devel \ No newline at end of file From 68bbd015d324ea8d23a70a4fc8f0cb8c5c35723d Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Fri, 4 Oct 2024 15:54:26 -0500 Subject: [PATCH 29/35] Regold pre_loops.i --- tests/pre/gold/pre_loop_out.e | Bin 148372 -> 172368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/pre/gold/pre_loop_out.e b/tests/pre/gold/pre_loop_out.e index df40f9e886e800f3e05cf7375f6edf5f39f8fb68..6827324952d666620fd68e62f387d25a3ba67799 100644 GIT binary patch delta 29258 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 TDLxKl10vtRfq^a?lotOFm5#2! From be48461397f13301dc88bed1b3c4fbbca3334643 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Fri, 4 Oct 2024 18:26:44 -0500 Subject: [PATCH 30/35] Regold pre_loop_ins --- tests/pre/gold/pre_loop_ins_out.e | Bin 135408 -> 165608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/pre/gold/pre_loop_ins_out.e b/tests/pre/gold/pre_loop_ins_out.e index b616343e92bda2e7d21a49d423a501a6211afc1e..2f2c478abb53d73046ad57666fe9f388c6c18d02 100644 GIT binary patch delta 60129 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 TxQRi%8B)B^t69hC&l&wcZNgKm From 2e65b4d47da98405e3ed37625b9544b7d40f052e Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Fri, 4 Oct 2024 21:07:41 -0500 Subject: [PATCH 31/35] Update MOOSE submodule --- moose | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moose b/moose index 9a7e0e1d7c..9fb4f87899 160000 --- a/moose +++ b/moose @@ -1 +1 @@ -Subproject commit 9a7e0e1d7c085296a28c0506219b649d7779dd75 +Subproject commit 9fb4f87899b841a2a4a440d625f842b4809d7ed0 From d92eb96b35fa0fc10f41fb66f0f4c906d5f51ee1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 01:42:23 +0000 Subject: [PATCH 32/35] auto_update_moose: bump moose from `9fb4f87` to `7ecca34` Bumps [moose](https://github.com/idaholab/moose) from `9fb4f87` to `7ecca34`. - [Commits](https://github.com/idaholab/moose/compare/9fb4f87899b841a2a4a440d625f842b4809d7ed0...7ecca3434e91c2aaaeb5a6f6ee2b1d3e5c6de978) --- updated-dependencies: - dependency-name: moose dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- moose | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moose b/moose index 9fb4f87899..7ecca3434e 160000 --- a/moose +++ b/moose @@ -1 +1 @@ -Subproject commit 9fb4f87899b841a2a4a440d625f842b4809d7ed0 +Subproject commit 7ecca3434e91c2aaaeb5a6f6ee2b1d3e5c6de978 From 6c0f97c9aebe3df74a167afb87914f2ee52742a6 Mon Sep 17 00:00:00 2001 From: Nathan Glaser Date: Fri, 11 Oct 2024 12:31:08 -0500 Subject: [PATCH 33/35] Update dependabot schedule to monthly --- .github/dependabot.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d46adeaf40..811d9c77a4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,8 +5,7 @@ updates: allow: - dependency-name: "moose" schedule: - interval: "weekly" - time: "01:45" + interval: "monthly" commit-message: prefix: "auto_update_moose" open-pull-requests-limit: 1 @@ -15,4 +14,4 @@ updates: - "Priority:1-Critical" reviewers: - "smpark7" - - "nglaser3" \ No newline at end of file + - "nglaser3" From c7c24cc6897f2f4d1fc3b75218763c9ec0f10ee8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 02:05:54 +0000 Subject: [PATCH 34/35] auto_update_moose: bump moose from `7ecca34` to `c80f515` Bumps [moose](https://github.com/idaholab/moose) from `7ecca34` to `c80f515`. - [Commits](https://github.com/idaholab/moose/compare/7ecca3434e91c2aaaeb5a6f6ee2b1d3e5c6de978...c80f5155fbd7fd681c813c6a0b8c06317b74005b) --- updated-dependencies: - dependency-name: moose dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- moose | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moose b/moose index 7ecca3434e..c80f5155fb 160000 --- a/moose +++ b/moose @@ -1 +1 @@ -Subproject commit 7ecca3434e91c2aaaeb5a6f6ee2b1d3e5c6de978 +Subproject commit c80f5155fbd7fd681c813c6a0b8c06317b74005b From eae40f1ead9439410634a44a1256d2c28d7c3dd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Dec 2024 01:41:05 +0000 Subject: [PATCH 35/35] auto_update_moose: bump moose from `c80f515` to `cedfd05` Bumps [moose](https://github.com/idaholab/moose) from `c80f515` to `cedfd05`. - [Commits](https://github.com/idaholab/moose/compare/c80f5155fbd7fd681c813c6a0b8c06317b74005b...cedfd055b01b8ccebc50e5d10a89847caa8e24ae) --- updated-dependencies: - dependency-name: moose dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- moose | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moose b/moose index c80f5155fb..cedfd055b0 160000 --- a/moose +++ b/moose @@ -1 +1 @@ -Subproject commit c80f5155fbd7fd681c813c6a0b8c06317b74005b +Subproject commit cedfd055b01b8ccebc50e5d10a89847caa8e24ae