mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-26 13:15:39 -04:00
85 lines
3 KiB
Python
85 lines
3 KiB
Python
import numpy as np
|
|
import openmc
|
|
|
|
from tests.testing_harness import PyAPITestHarness
|
|
|
|
|
|
def rotated_lattice_model():
|
|
model = openmc.model.Model()
|
|
|
|
# Create some materials
|
|
fuel1 = openmc.Material()
|
|
fuel1.set_density('g/cm3', 10.0)
|
|
fuel1.add_nuclide('U235', 1.0)
|
|
fuel2 = openmc.Material()
|
|
fuel2.set_density('g/cm3', 10.0)
|
|
fuel2.add_nuclide('U238', 1.0)
|
|
water = openmc.Material()
|
|
water.set_density('g/cm3', 1.0)
|
|
water.add_nuclide('H1', 2.0)
|
|
water.add_nuclide('O16', 1.0)
|
|
water.add_s_alpha_beta('c_H_in_H2O')
|
|
model.materials.extend([fuel1, fuel2, water])
|
|
|
|
# Create universes for lattices
|
|
r_pin = openmc.ZCylinder(r=0.25)
|
|
fuel_cell = openmc.Cell(fill=fuel1, region=-r_pin)
|
|
water_cell = openmc.Cell(fill=water, region=+r_pin)
|
|
pin_universe = openmc.Universe(cells=(fuel_cell, water_cell))
|
|
r_big_pin = openmc.ZCylinder(r=0.5)
|
|
fuel2_cell = openmc.Cell(fill=fuel2, region=-r_big_pin)
|
|
water2_cell = openmc.Cell(fill=water, region=+r_big_pin)
|
|
big_pin_universe = openmc.Universe(cells=(fuel2_cell, water2_cell))
|
|
all_water_cell = openmc.Cell(fill=water)
|
|
outer_universe = openmc.Universe(30, cells=(all_water_cell,))
|
|
|
|
# Create hexagonal lattice
|
|
pitch = 1.25
|
|
hexlat = openmc.HexLattice()
|
|
hexlat.center = (0., 0.)
|
|
hexlat.pitch = [pitch]
|
|
hexlat.outer = outer_universe
|
|
outer_ring = [big_pin_universe] + [pin_universe]*11
|
|
middle_ring = [big_pin_universe] + [pin_universe]*5
|
|
inner_ring = [big_pin_universe]
|
|
hexlat.universes = [outer_ring, middle_ring, inner_ring]
|
|
|
|
# Create rectangular lattice
|
|
rectlat = openmc.RectLattice()
|
|
rectlat.center = (0., 0.)
|
|
rectlat.pitch = (pitch, pitch)
|
|
rectlat.lower_left = (-2*pitch, -2*pitch)
|
|
rectlat.outer = outer_universe
|
|
rectlat.universes = np.full((4, 4), pin_universe)
|
|
rectlat.universes[0] = big_pin_universe
|
|
|
|
# Create cell filled with translated/rotated rectangular lattice on left
|
|
left_cyl = openmc.ZCylinder(x0=-4.0, r=4.0)
|
|
left_cell = openmc.Cell(fill=rectlat, region=-left_cyl)
|
|
left_cell.translation = (-4.0, 0.0, 0.0)
|
|
left_cell.rotation = (0.0, 0.0, 45.0)
|
|
|
|
# Create cell filled with translated/rotated hexagonal lattice on right
|
|
right_cyl = openmc.ZCylinder(x0=4.0, r=4.0)
|
|
right_cell = openmc.Cell(fill=hexlat, region=-right_cyl)
|
|
right_cell.translation = (4.0, 0.0, 0.0)
|
|
right_cell.rotation = (0.0, 0.0, 30.0)
|
|
|
|
# Finish up with the geometry
|
|
outer_cyl = openmc.ZCylinder(r=8.0, boundary_type='vacuum')
|
|
main_cell = openmc.Cell(fill=water, region=-outer_cyl & +left_cyl & +right_cyl)
|
|
model.geometry = openmc.Geometry([main_cell, left_cell, right_cell])
|
|
|
|
model.settings.batches = 5
|
|
model.settings.inactive = 0
|
|
model.settings.particles = 1000
|
|
model.settings.source = openmc.IndependentSource(space=openmc.stats.Point())
|
|
model.settings.export_to_xml()
|
|
|
|
return model
|
|
|
|
|
|
def test():
|
|
model = rotated_lattice_model()
|
|
harness = PyAPITestHarness('statepoint.5.h5', model)
|
|
harness.main()
|