BWR Assembly Modelling

Hello everyone,

How do I add a water coolant channel inside the lattice definition? My current approach is as follows,

pitch1 = 3.355
pitch2 = 3.500
rect1 = openmc.model.rectangular_prism(pitch1, pitch1, boundary_type=‘transmission’)
rect2 = openmc.model.rectangular_prism(pitch2, pitch2, boundary_type=‘transmission’)

water_in = openmc.Cell(name= ‘WATER INSIDE’, fill= water, region= rect1)
water_clad = openmc.Cell(name= ‘CLAD’, fill= zirconium, region= ~rect1 & rect2)
water_out = openmc.Cell(name= ‘WATER OUTSIDE’, fill= water, region= ~rect2)

water_box = openmc.Universe(cells= [water_in, water_clad, water_out])

pin_pitch = 1.295

lattice = openmc.RectLattice()
lattice.lower_left = [-6.475,-6.475]
lattice.pitch = [pin_pitch, pin_pitch]

one = [mox_low_pin]*10
two = [mox_low_pin]*10
three = [mox_low_pin]*10
four = [mox_low_pin]*10

five = [mox_low_pin]*4 + [water_box] + [mox_low_pin]*3
insix = [mox_low_pin]*4  + [mox_low_pin]*3
inseven = [mox_low_pin]*4 + [mox_low_pin]*3

eight = [mox_low_pin]*10
nine = [mox_low_pin]*10
ten = [mox_low_pin]*10

lattice.universes = [one, two, three, four, five, six, seven, eight, nine, ten]
lattice.outer = water_uni

Now If I try to plot it, I’m getting following error message

IndexError: tuple index out of range

How do I solve this problem and model the water channel?

Thanks

You’re building a 10x10 rectangular lattice. This model won’t work because it rows five, six, and seven don’t have ten universes.

Given a coolant channel occupying the the space for essentially 9 pins (3x3), there are two approaches that should work:

  1. Fill in the nine locations in the lattice with parts of the channel. For example, row five would be [mox_low_pin]*4 + [top_left, top_center, top_right] + [mox_low_pin]*3. You may find it convenient to translate the filling universe.
  2. Fill in the nine locations with water_uni. Define a square region around where the coolant channel should be. Take the cell containing your lattice and intersect it with the outside of the channel, so that there’s a square hole in it. Then fill the inside with water_box.

Thanks, @tjlaboss,

With option 1, I did it in the first place but problem is that how do I model thin layer of this water channel box (Black arrow indicated) and later add cladding material? Thickness of watter channel box = 0.0725 cm

bwr.py (4.4 KB)

You have already defined a water_box universe. With option 1, you need to create 9 cells filled with different parts of water_box.

I’d suggest starting with just top_left. Fill in the other 8 locations with water_uni for now.

I am not sure I understand your answer correctly, I filled all 9 location with water_uni box.

infive = [mox_low_pin]*4 + [water_box] + [water_box]*2 + [mox_low_pin]*3
insix = [mox_low_pin]*4 + [water_box]*3 + [mox_low_pin]*3
inseven = [mox_low_pin]*4 + [water_box]*3 + [mox_low_pin]*3

root.plot(origin = (0,0,0), pixels=(500, 500), width = (13.,13.), color_by = 'cell', colors={water_clad : 'red', water_in : 'blue', water_out: 'blue'})

Capture

With my current attempt I don’t see cladding part yet

Fill with dummy cylinder like following?

# with dummy pin
dummy_r = openmc.ZCylinder(r = 0.5025)

dummy_cell_in = openmc.Cell(name= 'DUMMY CELL IN', region= -dummy_r, fill= water)
dummy_cell_out = openmc.Cell(name= 'DUMMY CELL OUT', region= +dummy_r, fill= water)
dummy_uni = openmc.Universe(cells= [dummy_cell_in, dummy_cell_out])

infive = [mox_low_pin]*4 + [dummy_uni ] + [water_box]*2 + [mox_low_pin]*3

You’re missing a step: creating top_left, top_center, ..., bottom_right universes.

Start by creating a top_left universe. You can do this by creating a cell for the top left corner.
That cell will be filled with the water_box. It will need to be shifted (“translated”) down and to the right to get the top left corner in place. Does that make sense?

1 Like

Now I understand, but it seems difficult to me. Could you give me an example for the top left corner?

1 Like