Model Desktop1 :
Event start :
start = 1 (boolean)
Maximum = 0
Comments:
Event that occurs once at start of simulation
State split id :
split id = [[U235 atoms/fission,trigger_magnitude()],[reset...,0]] (real)
Comments:
Only one atom should split at a time, so this state is the index of the last atom to split
Submodel Hit :
Submodel "Hit" an association submodel between "U235 atoms" (in role "is") and "Neutrons" (in role "does").
Condition cond1 :
cond1 = dist<1 (cond_spec)
Where:
dist = Value(s) of dist_sqd
Comments:
True if neutron and atom are less than 1 distance unit apart. This allows the time of the collision event to be set precisely since the association will already exist.
Event happens :
happens = dist_sqd (boolean)
Where:
dist_sqd = Value(s) of dist_sqd
Minimum = 0.25
Comments:
Splitting happens if neutron gets within 0.5 distance units of atom.
Variable dist_sqd :
dist_sqd = (is_x-does_x)^2+(is_y-does_y)^2 (real)
Where:
is_y = Value(s) of ../U235 atoms/y from submodel "U235 atoms" in role "is"
{every_y} = Value(s) of ../U235 atoms/y
is_x = Value(s) of ../U235 atoms/x from submodel "U235 atoms" in role "is"
{every_x} = Value(s) of ../U235 atoms/x
does_x = Value(s) of ../Neutrons/x from submodel "Neutrons" in role "does"
{every_x_0} = Value(s) of ../Neutrons/x
does_y = Value(s) of ../Neutrons/y from submodel "Neutrons" in role "does"
{every_y_0} = Value(s) of ../Neutrons/y
Comments:
Square of distance between neutron and atom
Submodel U235 atoms :
Submodel "U235 atoms" is a population submodel.
Creation cr1 :
cr1 = 896 (real)
Comments:
Initial population of atoms
Event decay :
decay = after(exprnd(10000),"true") (boolean)
Comments:
Each atom will spontaneously decay after a time sampled from a random-exponential distribution if left alone
Event fission :
fission = index(1) (real)
Comments:
Caused either by spontaneous decay or splitting by a neutron. Value is index of atom.
Loss loss1 :
loss1 = 1 (int)
Comments:
Atom always removed after fission occurs
Variable size :
size = 2 (int)
Comments:
For lollipop display
Variable x :
x = element([x],index(1)) (real)
Where:
[x] = Value(s) of ../start posns/x
Variable y :
y = element([y],index(1)) (real)
Where:
[y] = Value(s) of ../start posns/y
Submodel Neutrons :
Submodel "Neutrons" is a population submodel.
Compartment x :
Initial value = element([x],split_id) (real)
Where:
[x] = Value(s) of ../start posns/x
split_id = Value(s) of ../split id
Comments:
Starting X position, looked up from array using index of atom that just split
Compartment y :
Initial value = element([y],split_id) (real)
Where:
[y] = Value(s) of ../start posns/y
split_id = Value(s) of ../split id
Comments:
Starting Y position, looked up from array using index of atom that just split
Flow flow1 :
flow1 = rand_const(-0.5,0.5) (1/day)
Flow flow2 :
flow2 = rand_const(-0.5,0.5) (1/day)
Immigration im1 :
im1 = 2 (real)
Comments:
Number of new neutrons produced when an atom undergoes fission
Loss loss102 :
loss102 = x<-20 or x>120 or y<-20 or y>120 (boolean)
Where:
x = Value(s) of x
y = Value(s) of y
Comments:
Neutron is removed from simulation if it is heading away from the atoms to save processing time
Loss loss2 :
loss2 = 1 (int)
Comments:
Old neutron removed when it splits an atom, so new ones will have new random trajectories
Variable size :
size = 1 (int)
Comments:
For lollipop display
Submodel start posns :
Submodel "start posns" is a fixed_membership multi-instance submodel with dimensions [896].
Comments:
This is a 1-D array for calculating the positions of all the atoms, used to set them up and to set positions of new neutrons when they split
Variable x :
x = 3*((index(1)-1)%32)+3 (real)
Variable y :
y = 3.464*ceil(index(1)/32)+1.732*(index(1)%2) (real)