Group Activity 1, Multiphysics simulation of the MSFR using OpenFOAM - PM
Watch on YouTubeVideo summary
The video transcript details a technical session focused on performing multiphysics simulations of the Molten Salt Fast Reactor (MSFR) using OpenFOAM, specifically addressing challenges in visualizing results and configuring simulation parameters. The instructor begins by answering questions about plotting velocity vectors instead of color maps in ParaView, explaining that while this feature exists within ParaView rather than OpenFOAM itself, users must configure glyph orientation and scale arrays based on velocity data. A significant portion of the discussion revolves around troubleshooting discrepancies in decay effective ($k_{eff}$) values obtained by different groups; the instructor attributes these variations to boundary conditions, specifically the difference between fixed value and zero gradient settings at reactor boundaries. He explains that zero gradient conditions eliminate neutron leakages, which theoretically results in a $k_{eff}$ equal to $k_{\infty}$, whereas fixed values create leakage effects that lower the eigenvalue.
A critical technical focus of the session is the proper setup of input files for neutronics coupling, including the handling of nuclear data and cross-section parameterization based on fuel temperature. The instructor clarifies why OpenFOAM requires two default fluxes for SP3 simulations but only one for diffusion cases, and he guides participants through modifying the `system/controlDict` to enforce a fixed number of iterations using fake time stepping rather than relying on automatic time adjustment. He also addresses the specific requirements for 2D wedge boundary conditions in the front and back faces of the mesh to ensure correct symmetry treatment. Furthermore, the session highlights a subtle but important distinction between solid-fuel and liquid-fuel reactors regarding how temperature is used to parameterize nuclear data; if the solver incorrectly reads a zero coolant temperature instead of the actual fuel temperature, it can lead to significant errors in reactivity calculations due to incorrect cross-section interpolation.
The final segment of the discussion outlines the transition to a coupled multiphysics exercise where fluid dynamics and neutronics are solved simultaneously to observe how velocity fields influence precursor distributions and reactor stability. The instructor advises on potential numerical convergence issues that arise when coupling these physics, suggesting the use of stable but less accurate schemes like the upwind scheme for divergence terms to prevent oscillatory behavior. He emphasizes the importance of using previous velocity solutions as initial conditions to improve convergence rather than starting from zero. The session concludes with a preview of future capabilities in OpenFOAM regarding heterogeneous fuel modeling and encourages students to experiment with coupled solvers while being mindful of the physical implications of moving fluids on neutron transport, setting the stage for more advanced multi-physics simulations in subsequent assignments.
Read the full video transcript
um can you hear me now online
yes no yes yes I guess we were just
looking at uh the results from
assignments
one
and I just said about assignment two
uh that I will give you additional time
to work on it and if you have questions
feel free to ask
and I have been asked
here to if we can plot velocity as
arrows instead of colors the answer is
yes and usually you use a glyph
she's up there in part of you
what was that
um
you apply
after a long time usually you see things
oh that was
ugly
well you have to work on it
I will find the solution to this keep
doing the exercise too
um I guess your hour because you have to
decide which parameters so you have to
decide which Vector to use and we want
to use U the velocity
after a while
give me a sec
ular race
doing it like that
oh yeah now you can
it's uh you have to select glyph and
then you have to set that orientation
arrays based on velocity and the scale
array is based on velocity now you have
a lot of arrows you can reduce them
now we have 5 000 points I think you can
do one thousand
and you can remove these and only see
the arrows then you can play around with
the size of the Arrows with the color of
the arrows you can do many things but
this is not really open form related
this is part of you related
it's just and not typical in part of you
you can find quite a bit of
documentation online now to use paraview
and it's the same if you're using value
for open form or for any other tool
you're welcome
foreign
for those that are online I've been
asked why there are two default fluxes
the reason is that when you need to do
sp3 instead of diffusion
you need to provide initial and Boundary
condition for the flux and for the first
moment of the fly for the second moment
of the flux
so in our case you're doing diffusion
you can forget about the second default
flux
foreign
what's the key effect you obtained
group is there anyone from group one
was Decay effective
huh
sure group two anyone
1.4
Raise Your Voice 1.4
oh
six this is okay effective don't be shy
with number
1.406 give me another two
six
another one
let's get to PCM at least
five okay
and this is for a zero gradient or for a
fixed value
because you should have a fixed value
and a zero gradient boundary condition
to zero gradient and do you also have
results for the fixed value
okay
that's the same thing for everyone group
one
second
fix fixed value
how much is the same
okay
three
zero point five that is the problem
zero point
0.439
give me another number
zero seven
uh group four
interesting
you're gonna be interesting to figure
out what changed because now the funny
thing is that yesterday I obtained both
and I don't know why but we'll try to
figure out why
so in the morning yesterday or team one
and afternoon the other I think it's a
matter of which temperature we are
solving it at but let's see let's try to
do it together
so
um I'll tell you what I would do
hopefully I will remember to do all of
it
would be nice
so
um let me get the folders
so
if you'd get a wrong number don't be
worried sometimes it can be that you
forget to set a little parameter and no
transform is Big sometimes you need time
to go through all of it and make sure
that everything is correct I said even
myself yesterday did it and opened two
different care effective and I think it
was because at some point I forgot to
set a temperature somewhere
anyway so what I would do is
um well I what I already did while
waiting I copy pasted the case into a
starting case too just not to lose what
I did before
um so this is what we had from exercise
one and as I said we have a lot of
inputs that are given in the
input folder
and I said that there are nuclear data
and there is a mesh and you need both
and you need both where well in the
neutron in the neutral region so you're
going to constant you're into neutral
region you have a poly mesh you want to
change it into the new polymesh
can you leave it like this
no you need to change the name it has to
be called a polymesh
so we call it polymesh
then we have all the nuclear data that
were in there that we don't like because
they were kind of
dummy files with no content or very
little content and we want those
that I gave you that includes real
cross-section data put it in there
as I said the idea is let's take a look
it's gonna be small but I will do it
anyway because you can open it on your
computer
you look into it you will see things
like Energy Group 6 precursor groups
eight so we are solving for six energy
groups eight precursor groups and we
have different cross sections for the
heat exchanger intermediate circuit
main
Etc
and you will see that cross-sections are
each one of them is into six groups yes
it is there for a later exercise
it's not no
not at all
now I mean in open form you can throw in
random files it's we simply not read
them
and I ask you to check parameterization
and nuclear data axial expansion you
look at it and there's nothing well of
course because we don't have a
cross-sections for axial expansion this
is for fast reactor for solid fuel fast
reactor there's nothing in there so we
don't parameterize for that
uh what about the cool nothing because
our coolant is the fuel
what about fuel temperature there you
have something if you look at it you
will see that the cross sections are
slightly different than those in nuclear
data these are cross-sections that are
valid for a different temperature this
is how we parameterize the cross section
which give
longer sections set at the nominal
temperature macro section Step at the
perturb temperature and we do an
interpolation
so we are parameterizing our
cross-section based on the temperature
of our
fuel coolant we call it fuel here
because it's a molten salt reactor
so what's in there that we may need to
change so we have our nuclear data we
have them parameterized we have
controvert movement I haven't mentioned
Contour roads so we don't touch it we
have the mesh What About neutronic
Properties
and it's a bit small but it's already
diffusion we are happy we keep it we
want it to have a diffusion
but it says eigenvalue false we want it
true it was in the assignment we want an
eigenvalue solution so we set eigenvalue
neutronics to true
so now we look into this and we realize
we have touched everything we wanted to
touch so we forget about constant
hopefully I did everything
um we don't touch fluid we don't touch
thermomechanic because we are doing just
neutronics and then we look into system
and of course we would like to touch the
control dict
um
we do it now
uh it's small so let me do it because
this is important I want to do it in a
way that you see what we do
so we go to
our starting case two
and we look at
system
contradict
and you look at it as usual you have a
start time okay we start from zero
you have an end time
and we don't care about the time as I
said before these are
all time steps we want to Simply iterate
and I said we would like to have
approximately 100 iterations so if our
start time is zero
and our end time is 10 what's the delta
T to get to 100 iterations
0.1 right
0.1 time steps we do it 100 times we
will get to 10 seconds because this is
the way we iterate 100 times
in open form
some things you don't really care about
standard open from things what do we
want to solve for I said we want to
solve only for neutronics so no fluid
mechanics no energy
solutronics
true salt term mechanics false liquid
fuel stays as it was just true
and just time step do we need it
no we are not doing Thermo Hydraulics we
don't want to adjust we just want to run
100 iterations so we want our time step
to stay 0.1
and get to 10 in 100 iterations this is
how we set iterations we use a fake time
stepping
what happens if you leave adjust time
step to false
well it will try to adjust your time
step based on current number and it is
not calculating the current number so
you may run into some problem
um the rest we don't care
we have questions about this contradict
does these times the fake time stepping
make sense to you
not really maybe a little bit
you won't write it 100 times
we do 100 time step of 0.1 that will not
enter anyway but just force open foam to
do 100 Solutions
we will be in a loop if we start okay I
solve one am I at the end now I need to
solve once again once again once again
for 100 times that's how we create
iteration
and since we are solving for eigenvalue
the D DT the derivative over time has
been taken off
so we don't really care if our time step
is
0.1110 as far as we do it 100 times
It's Tricky this is a very open foamish
way of doing things
because open phone was born for cfd and
you always have time somehow
so we do it this way
what else am I missing or I said that we
need to
set the power
to 20 megawatts and I said that this
thing is inside the reactor state
how do I find reactor State you can
locate you can grab you can think where
it could be you can imagine that
reactive state may change over time
right so the most logical place for it
to be is in the time folders
so you get to not here
you get into your time folder from zero
could be in neutral region is not and
I'm sorry about that this is again a way
we have an open form because in these
folders we typically have fields a
reactor state has a key effective and
power it's not a field we keep those
things in something called uniform
and in there there is something called
reactor state if you cannot find the
tube
the rapidly located or best thing when
you are alone at home and you want to do
this thing before doing anything you
look everything that there is inside
your folder you want to familiarize with
every file that is in there and while
doing that you will bump into something
called reactor state that has a power
and a k effect
we said that our Target power is 20 or
you look at the documentation if you
have you know two three hours with the
documentation these things are explained
um so we have our
20 megawatts to the seven right
we said we want two
megawatts so well not of zeros for not
much two to the seven
Watts this is 20 megawatts
what about K effective well okay
effective is what we want to find
does it make sense to give a k effective
in there at the beginning kinda this is
the initial condition it is you know
when you set a new field you set
an initial condition you also should do
it for K effective it's the initial
guess that you provide
if not change much but this is going to
make your computation faster
so another thing that we need
initial and boundary conditions many of
you noticed that there are default flags
and the default flux too full flux 2
this is for sp3 simulations you don't
need it uh default flux
let me open it
from the terminal
system zero
now what you had here was clearly wrong
we were giving a fixed value to
everything
and uh well it's not completely wrong
there are at least two things that were
wrong
which is the boundary conditions for
the wedges so we are doing 2D and you
need your front and back to be treated
as wedges
I don't remember the name of the front
and back
front and back okay
so what you need to do was to create two
things that are called well I can
actually do it the right way front
front
type
Edge
oh yeah sorry
right
double check
why
I think it's the first one it finds
more relatively short it's the opposite
you sure
okay I will try here the question is you
may wonder why we are discussing is
because
this thing it says all Fields equal to
fixed value
and we are wondering if we don't
remember if open form
gets the first one that it finds
or the last one
so if it says okay I found something
called front I use it or I found
something called front and then I
something something else that tells me
all the fields equal to fixed value
second case is wrong first case is right
we'll try it if it gives us a mistake
we'll change it
so for now we have front back wedge
wedge
you understand why this wedge thing
right
we have our front and back that are kind
of cement strange symmetry conditions
and this strange symmetry in open form
is treated using a bus specific boundary
condition that has a name and the name
of this boundary condition is wedge same
as Monday and this is standard it's not
gen form this is open form
right finger cross this is correct
am I missing something
let's try
uh we go up to the roots of our folder
and we try to run gen 4.
oh
at the beginning you always see this
mesh to mesh addressing that takes a
while do you understand what open phone
which gen form is doing
we have and now we have two different
meshes even though fluid dynamics is not
used we
gave genfun a mesh flow fluid and a mesh
for neutronics
since it has to transfer field between
the two at the beginning it does a mesh
to mesh projection and creates an
addressing to be able to project fields
from one mesh to the other
and refraction field from one mesh to
the other
a complicated thing and it takes a while
for open form to do it
it worked so it was not prolongation
because it worked
um
okay
that's interesting
I'm curious now let's let's try so you
said that if we change
the contradict
to liquid field Falls
which I don't find it a good fuel
holes
I already run it
I should get a 1.2 something right
faster than thermal hydraulic so
yep
I didn't hear you
1.2 yeah you gave me food for toast
while I give you the next exercise
uh let's change it back to what it was
and then I will think about what
happened here
um
I just wanted to show you some results
so let's run it again
I think I know what happened I will tell
you
um so someone online asked me how to do
to visualize with Power view in case
part of form doesn't work I told some of
you
so what you do is you create a file
that you can call whatever you want case
dot form
just an empty file then you do part of
you
you wait WSL too
do these things
on time apparently
then you open a case you search for your
case dot form
and it will open simple as that
so we have our case we go to the last
time steps that we hope it was enough to
converge the solution
and you look at things you can look at
fluxes for different
um
energy groups does this make sense to
you as a flux
now in the center it goes to zero this
was the
um fixed value the initially boundary
condition so it was fixed value zero
have you tried to look at what happened
if you gave zero gradient everywhere
so if you give zero gradient everywhere
your flux will be flat
because there is no reason for the flux
to diminish towards the boundary you
will see a flat flux
and why do you have a hierarchy
effective
because you have no leakages
higher knowledgeages your care effective
will increase you remember the six
factor factor formula
last two factor in the six factor factor
formula are at leakages
and if you remove leakages with a zero
gradient your key effective will
increase right
which will be actually equal to the K
Infinity exactly so when you do is
actually when you have a geometry like
this giving zero gradient everywhere
is actually a good way to check that
your K Infinity is what you expect
because often when you get cross-section
data the tool that gives you the
cross-section data will also give you
the K Infinity
typically serpent does that I assume
open MC does that no
good
uh it's it's a good check so it like in
serpent they typically give you the
infinity then you give the
cross-sections to gentlem and you check
that Infinity is the same that way you
make sure that you your transfer of
cross sections from Monte Carlo to
deterministic was correct
um well the other fluxes are very
similar actually so it doesn't change
much we go to flux 5 it's pretty much
the same
uh what happens if you look at
precursors they look always the same
they of course the scale is different
but why well because we didn't move our
fuel now
we did just
a single neutronic solution so there's
no moving fluid our precursors are
sitting there and you have higher
precursor where you have higher fluids
in the seat
things will change in the next
assignment this next assignment we want
to try to put together fluid dynamics
neutronics and get our first
multi-physic simulation
um
before we move forward
um do we have questions about this
exercise
all right then I will answer the
question that I got online
some times ago I've been asked if you
can do both
porous medium and heterogeneous geometry
in gen form
the answer was no
a month ago and now it's yes and no
meaning we are working on that
uh it's probably going to be already in
a couple of months we should be able to
do a heterogeneous Fuel and homogeneous
fuel
um
depending on what you prefer to do
without even an option it will
automatically recognize if you're doing
homogeneous or heterogeneous
so for the personal line of we asked if
you can be patient in a couple of months
we will be there for the moment when you
do fuel
we mainly do porous medium
um
that's our platform was born but we are
modifying it to be a bit more flexible
[Music]
um
am I missing something Stephanie
I can go to
many things that's why I thought we need
I need to think what happened there
liquid fuel impacts a lot of different
things
it impacts
and the fact that you move around the
precursors
or not
it impacts the fact that you provide the
power directly to the liquid instead of
giving it to a structure and then to a
liquid
and there's at least another
which I believe is the reason why you
can get different results is that it
decides whether
to use
temperature
of the coolant
to parameterize
nuclear data T fuel or fuel temperature
because you remember we gave different
cross-section set for nuclear data and
nuclear data field temperature it means
we are trying to parameterize based on
temperature of the fuel
if you have a solid Shear reactor the
temperature of the fuel is what comes
from the power model fuel pin if you
have a molten salt reactor the
temperature of the fuel is actually the
T
of this free Dynamic solver
so you have to use that switch to decide
our you are parameterizing
and I believe what happened there is
that gen film
when you say false
is good is try to go and read instead of
the temperature of the coolant the
temperature of a fuel that is not there
and that is set automatically to zero
so you are essentially parameterizing
your cross-section based on the
temperature that was never calculated
does that make sense it's not easy
but you can see how you know fuel has
two different meanings for a fluid react
fluid fuel reactor and a solid fuel
reactor
and that switch
as implications and one of the
implications is parameterization and I
think for those of you set liquid fill
to false
gen form
was
trying to parameterize the cross-section
based on
fuel temperature that has never been
calculated and that is set to zero
that would explain why you got a much
higher care effective because the
parameterization of cross-section makes
it
for a higher reactivity for lower
temperature because we have a negative
feedback so if all of a sudden open from
janform was reading or using a
temperature of zero because
it was never calculated you would get
much higher K effective
oh this is my let's call it educated
guess about what's happening but I
should double check
does that make sense
30 000 PCM
it's a lot
and it may only come from
a completely wrong parametrization of
cross-section
so always be careful if there is a flag
that tells you liquid Fuel and you have
a liquid fuel set it to true
all right I would suggest since we are
very late as expected I would suggest
that we move to the third exercise that
is a bit more interesting this time we
try to solve the two things together
so
let me show it to you
so the idea here is let's see if the
velocity field doesn't impact on
neutronics
for that we need a couple solution we
need fluid dynamics Plus neutronics
since we don't want to run a transient
we can keep doing eigenvalue may seem
strange but eigenvalue solver will not
care if you change
its underlying precursors distribution
the eigenvalue solar will adapt
it will keep being an eigenvalue solver
so what we want to do now is we start
from what we had
and from the previous two x
and I would suggest to start from
exercise 2 because it now includes both
exercise one and two that's why I told
you please copy paste exercise one to
two the second
so now you should have a case where you
have both meshes you have neutronics
that has been set your free dynamics
that has been set you have everything
start from there
and you try to run a case with coupled
solution and fluid dynamics
and I would like you to try to plot the
results see how the precursor
distribution change
and see how the key effective changes
this is going to be interesting it's
Gonna Change
and have as usual some
tips on how to do the exercise
think about what's changing physically
for newtronics
is there something that we need to solve
for now that we were not solving for
before
Maybe
there's something that is starting to
move around
and if you want to solve for that
something moving around you will need
initial and boundary conditions
you will need a new field
that you will have to introduce in zero
because otherwise yeah it will simply
tell you I cannot find it you can try it
um
this is a tricky one so I have to give
you a hint sometimes when you use this
kind of solvers you will run into
numerical troubles
you will add the sphere physics and all
of a sudden it doesn't converge too well
and that's the moment where you look at
things like PV solution and Phoebe
schemes
when you look at Phoebe schemes as
Stefano mentioned to you
on Monday
most of the time the problem comes from
the Divergence
it's the tricky part to solve
and you can choose different schemes
there is one that is always bounded
meaning it doesn't
give strange oscillatory Behavior
it's first order so it's not super
accurate but it's stable it's the upwind
scheme
think about this you will need to use it
and the last hint that I give you is
you can start as we did before you start
from zero your initial condition is
going to be zero velocity zero pressure
is it good starting point or can we
start from something better since we
already have solutions for velocity
I'm already telling you yeah you should
use the velocity solution how to do that
you can think about it
is the assignment and suggestion so are
they assigned assignment and suggestions
clear enough
you have questions
otherwise I will let you have fun and as
usual we are here if you have questions
you call us
I have doubts that you think out of
interest for the whole group you let us
know and we are answered to the whole
group
okay
so I go back to the assignment and
anyway you should have the PDF so you
can keep also the suggestions
with you
check what I said
this should be a bit shorter than the
one we did before so hopefully we can
do it before we have to go to the
discussion session
oh we have the coffee break now now now
okay
so think about this for two minutes and
then we go to the coffee break
um
I'm not sure
foreign
so for those that are online we are
taking a break
we'll be back in 10-15 minutes