Skip to content

Conversation

@meltawila
Copy link
Contributor

@meltawila meltawila commented Aug 6, 2025

Closes #98

@simopier simopier self-assigned this Aug 7, 2025
@moosebuild
Copy link
Contributor

moosebuild commented Aug 7, 2025

Job Documentation, step Sync to remote on 6c91500 wanted to post the following:

View the site here

This comment will be updated on new commits.

@moosebuild
Copy link
Contributor

moosebuild commented Aug 7, 2025

Job Coverage, step Generate coverage on 6c91500 wanted to post the following:

Coverage

Coverage did not change

Full coverage report

This comment will be updated on new commits.

@meltawila
Copy link
Contributor Author

@simopier would you activate the tests please?

Copy link
Collaborator

@simopier simopier left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great overall!
However, I would recommend adding a test to run a very small version of this as part of the testing suite to make sure we maintain this capability available to users.

organization = {ANS},
year = {2022},
month = {07},
booktitle = {Proceedings of PHYSOR},
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
booktitle = {Proceedings of PHYSOR},
booktitle = {Proceedings of PHYSOR},

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in my commit

Comment on lines 6 to 10
T0 = 293
Tmax = 393
Tmin = 293
L0 = 100
L = 106.47
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
T0 = 293
Tmax = 393
Tmin = 293
L0 = 100
L = 106.47
T0 = 293 # K
Tmax = 393 # K
Tmin = 293 # K
L0 = 100 # cm
L = 106.47 # cm

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in my commit


## Results

We see the heating result in [fig:heatingsol] compared against the analytic solution, as well as flux and temperature solutions in [fig:fluxsol] and [fig:tempsol]. Figures are only included for P=1.0E22 `[eV/s]` and on a fine mesh where the number of OpenMC and mesh elements is $N = 100$, since all results have a similar shape. Both the heating and flux tally everywhere agrees with the analytic solution within 3σ.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
We see the heating result in [fig:heatingsol] compared against the analytic solution, as well as flux and temperature solutions in [fig:fluxsol] and [fig:tempsol]. Figures are only included for P=1.0E22 `[eV/s]` and on a fine mesh where the number of OpenMC and mesh elements is $N = 100$, since all results have a similar shape. Both the heating and flux tally everywhere agrees with the analytic solution within .
We see the heating result in [fig:heatingsol] compared against the analytic solution, as well as flux and temperature solutions in [fig:fluxsol] and [fig:tempsol]. Figures are only included for $P=1.0 \times 10^{22}$ eV/s and on a fine mesh where the number of OpenMC and mesh elements is $N = 100$, since all results have a similar shape. Both the heating and flux tally everywhere agrees with the analytic solution within 3$\sigma$.

caption=Temperature result from MOOSE for N = 100 mesh elements compared against the analytic solution.
style=display:block;margin-left:auto;margin-right:auto;width:40%;

Table [tab:results] shows results convergence with mesh refinement.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Table [tab:results] shows results convergence with mesh refinement.
[tab:results] shows results convergence with mesh refinement.

You shouldn't need Table here.

Table [tab:results] shows results convergence with mesh refinement.

!table id=tab:results caption=Results and corresponding errors with different mesh sizes [!citep](eltawila2025).
| **Resolution | **Heated length `[cm]` | **Error `[μm]` | **$k_{\text{eff}}$** | **Error `[pcm]` |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment about ** and `

| **Resolution | **Heated length `[cm]` | **Error `[μm]` | **$k_{\text{eff}}$** | **Error `[pcm]` |
| :- | :- | :- | :- | :- |
| **Analytic solution | 106.47 | -- | 0.29557 | -- |
| **5 | 106.3298 | -1402 | 0.29608 ± 0.00001 | 51 ± 1 |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once the documentation builds, I'll need to check that the plus/minus signs work in markdown.

| **100 | 106.4745 | 45 | 0.29549 ± 0.00001 | -8 ± 1 |
| **200 | 106.4748 | 48 | 0.29556 ± 0.00001 | -1 ± 1 |

In [fig:fluxconv] and [fig:tempconv] convergence of flux and temperature relative L$^2$ norms, defined as
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In [fig:fluxconv] and [fig:tempconv] convergence of flux and temperature relative L$^2$ norms, defined as
In [fig:fluxconv] and [fig:tempconv], convergence of flux and temperature relative L$^2$ norms, defined as

@moosebuild
Copy link
Contributor

Job Build test summary, step Build test summary on 6c91500 wanted to post the following:

Test summary

Compared against 09a0610 in job civet.inl.gov/job/3460799.

Added tests

Test Time (s) Memory (MB)
test:neutronics/moving_mesh.mesh_tally SKIP 0.00
test:neutronics/moving_mesh.cell_tally SKIP 0.00

Copy link
Collaborator

@simopier simopier left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @meltawila!

Some additional comments on the new commits.
Things are moving in the right directlion.

By the way, for future rounds and PRs, it makes it easier over rounds of reviews if you incorporate the suggestions directly in the Files changed tab on the PR page. It incorporates the exact suggestion and then resolves the comment.


@article{eltawila2025,
title = {Thermomechanics Coupling to Monte Carlo Particle Transport on Unstructured Mesh Geometries},
journal = {SSRN Preprint},
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be updated

# Cardinal input file for slab benchmark OpenMC model to couple with thermomechanics

P = 1.0e22 # eV/s
eV_to_J = 1.602e-19 # J/eV
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
eV_to_J = 1.602e-19 # J/eV
eV_to_J = 1.602176634e-19 # J/eV

This is what I meant by Use the value from PhysicalConstants.h instead.

[temp]
type = FunctionIC
variable = temp
function = 293
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missed suggestion.

q = 1e8 # eV
k0= 1.25e19 # eV/(s-cm-K^2) k(T) = k0 T(x)
phi0 = 2.5e14 # 1/s-cm^2 (flux at the origin)
eV_to_J = 1.602e-19 # J/eV
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
eV_to_J = 1.602e-19 # J/eV
eV_to_J = 1.602176634e-19 # J/eV

@@ -0,0 +1,132 @@
[GlobalParams]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a comment at the top of the input file, just like I requested for the others.

@@ -0,0 +1,133 @@
[GlobalParams]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a comment at the top of the input to describe what it does.

@@ -0,0 +1,133 @@
[GlobalParams]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like this input file has a lot of similarities with the call_tally.i input file. Do you think it would make sense to generate a base input file and utilize the !include capabilities to reduce duplication?

\end{equation}

The example set of model parameter values shown in [tab:params] are the suggested benchmark parameters [!citep](griesheimer2022analytical), resulting in $k_\text{eff} = 0.29557$ and a heated slab length of $L = 106.47$ cm with $P = 1.0\times10^{22}$ eV/s.
The example set of model parameter values shown in [tab:params] are the suggested benchmark parameters [!citep](griesheimer2022analytical), resulting in $k_\text{eff} = 0.29557$ and a heated slab length of $L = 106.47$ `cm` with $P = 1.0\times10^{22}$ `eV/s`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

General comment: I do not think you need the "`" signs around units. We usually do not use them in papers and in the rest of the documentation. For consistency, I recommend removing them.

Copy link
Collaborator

@simopier simopier left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some more geenral comments on the tests and documentation now that it builds.
Thank you!


This verification problem presents capabilities to couple neutron transport with thermal conduction and material expansion. The analytic benchmark slab problem [!citep](griesheimer2022analytical) describes a slab where S$_2$ neutron transport is coupled with thermal conduction, convective boundary conditions, Doppler-broadened cross sections, and nonlinear thermal expansion effects along the heated slab. The benchmark provides the analytic solutions for steady-state temperature, neutron flux, heating, multiplication factor, and the heated slab length.

While the restriction to S$_2$ neutron transport would be considered overly simplistic for most radiation transport simulations, the objective here is to verify thermomechanical-OpenMC coupling using analytic solutions for three coupled solution fields (Displacements, temperature, and flux). Simplifications of each individual physics included in this model are not imposed by inherent limitations of the moving-mesh capabilities and only aim to allow the study on the interactions between multiphysics with an analytic solution.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
While the restriction to S$_2$ neutron transport would be considered overly simplistic for most radiation transport simulations, the objective here is to verify thermomechanical-OpenMC coupling using analytic solutions for three coupled solution fields (Displacements, temperature, and flux). Simplifications of each individual physics included in this model are not imposed by inherent limitations of the moving-mesh capabilities and only aim to allow the study on the interactions between multiphysics with an analytic solution.
While the restriction to S$_2$ neutron transport would be considered overly simplistic for most radiation transport simulations, the objective here is to verify thermomechanical-OpenMC coupling using analytic solutions for three coupled solution fields (displacements, temperature, and flux). Simplifications of each individual physics included in this model are not imposed by inherent limitations of the moving-mesh capabilities and only aim to allow the study on the interactions between multiphysics with an analytic solution.


\begin{equation}
\label{eqn:rho_t}
\rho(x) = \rho_0\sqrt{\frac{T_0}{T(x)}}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
\rho(x) = \rho_0\sqrt{\frac{T_0}{T(x)}}
\rho(x) = \rho_0\sqrt{\frac{T_0}{T(x)}}.


## Analytic solutions

The reader is referred to the original benchmark publication [!citep](griesheimer2022analytical) for full details on the derivation of these solutions. Here we present the final formulas that we use later for comparison with our models.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The reader is referred to the original benchmark publication [!citep](griesheimer2022analytical) for full details on the derivation of these solutions. Here we present the final formulas that we use later for comparison with our models.
The reader is referred to the original benchmark publication [!citep](griesheimer2022analytical) and the updates made in [!citep](eltawila2025) for full details on the derivation of these solutions. Here we present the final formulas that we use later for comparison with our models.


The example set of model parameter values shown in [tab:params] are the suggested benchmark parameters [!citep](griesheimer2022analytical), resulting in $k_\text{eff} = 0.29557$ and a heated slab length of $L = 106.47$ `cm` with $P = 1.0\times10^{22}$ `eV/s`.

!table id=tab:params caption=Example set of model parameters with two different power scenarios [!citep](griesheimer2022analytical).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You describe two power scenarios here, but you only list one in the table. Make sure to be consistent.

This model is using S$_2$ neutron transport to compare with the 1D Analytic benchmark. To replicate
the results, you have build your application with [this](https://github.com/meltawila/openmc_S2transport) patch of OpenMC.

Cardinal is used to couple OpenMC with MOOSE via Picard iteration. OpenMC tallies neutron flux, heating, and the multiplication factor. A conceptual depiction of the meshes used as well as the data transfers that occur on each Picard iteration is shown in [fig:schematic]. Three different meshes/geometries are involved. The thermomechanics mesh is a simple 1D mesh of $N$ EDGE2 elements; the thermomechanical physics do not require higher dimensional (e.g. 2D or 3D) meshes for this problem. The OpenMC geometry is represented using DAGMC, where cells are bounded by a triangulated surface (TRI3 elements). To facilitate data transfers between OpenMC and MOOSE thermomechanics, there is also an intermediate volumetric data transfer mesh composed of TET4 elements; no physics solves happen on this intermediate mesh. [fig:schematic] highlights one element (for MOOSE and the Cardinal intermediate data transfer mesh) and one OpenMC cell each in blue, with adjacent portions of the geometry shown in gray for context.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Cardinal is used to couple OpenMC with MOOSE via Picard iteration. OpenMC tallies neutron flux, heating, and the multiplication factor. A conceptual depiction of the meshes used as well as the data transfers that occur on each Picard iteration is shown in [fig:schematic]. Three different meshes/geometries are involved. The thermomechanics mesh is a simple 1D mesh of $N$ EDGE2 elements; the thermomechanical physics do not require higher dimensional (e.g. 2D or 3D) meshes for this problem. The OpenMC geometry is represented using DAGMC, where cells are bounded by a triangulated surface (TRI3 elements). To facilitate data transfers between OpenMC and MOOSE thermomechanics, there is also an intermediate volumetric data transfer mesh composed of TET4 elements; no physics solves happen on this intermediate mesh. [fig:schematic] highlights one element (for MOOSE and the Cardinal intermediate data transfer mesh) and one OpenMC cell each in blue, with adjacent portions of the geometry shown in gray for context.
Cardinal is used to couple OpenMC with MOOSE via Picard iteration. OpenMC tallies neutron flux, heating, and the multiplication factor. A conceptual depiction of the meshes used as well as the data transfers that occur on each Picard iteration is shown in [fig:schematic]. Three different meshes/geometries are involved. The thermomechanics mesh is a simple 1D mesh of $N$ EDGE2 elements; the thermomechanical physics do not require higher dimensional (e.g., 2D or 3D) meshes for this problem. The OpenMC geometry is represented using DAGMC, where cells are bounded by a triangulated surface (TRI3 elements). To facilitate data transfers between OpenMC and MOOSE thermomechanics, there is also an intermediate volumetric data transfer mesh composed of TET4 elements; no physics solves happen on this intermediate mesh. [fig:schematic] highlights one element (for MOOSE and the Cardinal intermediate data transfer mesh) and one OpenMC cell each in blue, with adjacent portions of the geometry shown in gray for context.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests here do not reprocude the results from the paper, and are testing slightly other things using other input files.
I therefore have several reauests:

  • could you please add a section in the documentation to explain these tests and describe the input files being used here?
  • I'm not a fan of the fact that the input files relevant to the paper are not tested and will therefore likely get out of date as SALAMANDER/CARDINAL/OpenMC/MOOSE continue to evolve. If we can't reprocude the paper results with the regular build, is it not possible to create a test reciepe to use the OpenMC patch you need for this? At the very least, you should have all the input files go through a syntax check in one of the tests, or run for a short amount of time just to make sure they at least run. This should all be detailed a bit on the documentation page.

@simopier
Copy link
Collaborator

simopier commented Jan 7, 2026

Do you need anything to finalize this, @meltawila?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation for the slab multiphysics analytic benchmarking

4 participants