3. 几何建模¶
CRANE是一个三维(两维耦合一维)数值反应堆物理程序,其几何建模方式在不同方向上采用策略是不同的:
径向(XY平面)上采用构造实体几何(CSG)的几何建模方式,可描述堆芯各种复杂几何结构;
轴向(Z方向)上采用简单的堆叠累加,非常适合真实反应堆拉伸几何的构造特点。
在径向上,CRANE目前支持两种最基本的几何基本单元(几何基元):圆和任意凸多边形。 通过这两类最基本的几何基元,可组合出实际反应堆中各种复杂的几何构件,如组件格架、重反射层、十字螺旋燃料棒等等:
CRANE通过定义 geometries 对象 来进行几何建模,geometries 对象 包含 structures、 baffles、lattices、grids、assemblies、 instrument_bundle、burnable_absorber_bundle、control_rod_bundle 以及最重要的 core 对象。
较为简单的几何建模,如 VERA_2A 两维单组件问题建模可参阅 快速上手。
接下来我们通过各种例子来详细解释上述对象,并指引你如何对一个真实的堆芯进行几何建模。
3.1. 两维几何结构体¶
两维几何结构体,即 structure 对象,指的是整个堆芯包含的各种各样的几何构件的两维(XY平面)切面。几何构件可以小到燃料棒、 大到反应堆的压力容器,它是用户定义出来的一个不可分离的几何体。
所有的 structure 对象 都定义在 structures 列表中, 后面使用的时候通过 name 来引用该两维几何结构体。
每个 structure 对象 通过 primitives 来定义该两维几何结构体由哪些最基本的几何基元组成。 几何基元的定义可以参阅 primitive 对象。
Note
目前CRANE支持圆和任意凸多边形两种几何基元。
而 structure 对象 的材料区定义则是通过 regions 实现。
regions 中个每个 region 对象 通过在 space
中对上述中几何基元的顺序编号进行以下 3
种方式的布尔运算获得,再添加 material 对象 名称即可。
符号 |
操作 |
---|---|
& |
交集 |
| |
并集 |
- |
补集 |
例如空间定义 1&
表示基元1与基元2的交集, 空间定义 4|(3-2)
表示基元4与基元3减去基元2的并集。
Note
括号结合率在 space 定义中是适用的。
另外,structure 对象 中的 meshing 对象 来定义该两维几何结构体的细网划分信息,该信息用于特征线方法的输运计算。
3.1.1. 普通燃料棒¶
以下定义了两种燃料棒的 structure 对象:
structures:
- &fuel_pin
name: F19
primitives:
- {type: CIRCLE, radius: 0.4096}
- {type: CIRCLE, radius: 0.4179}
- {type: CIRCLE, radius: 0.4750}
regions:
- {material: Fuel_19, space: '1'}
- {material: HE, space: 2-1}
- {material: ZIRC4, space: 3-2}
meshing: {type: SECTORS, num_azimuths: 4, radii: [0.2365, 0.3344, -0.4750, 0.5800]}
- <<: *fuel_pin
name: F31
regions:
- {material: Fuel_31, space: '1'}
- {material: HE, space: 2-1}
- {material: ZIRC4, space: 3-2}
它们看起来是这样的:
Note
这里的第一个材料区的space定义需要输入 '1'
而不是 1
,因为YAML对单个数字 1
会解析为整数而不是字符串,而
2-1
则自动解析为字符串。
这两个 structure 对象 有同样的几何结构和细网划分,但是最内圈的材料不一样,因此采用了 YAML
语法中的锚点规则:&
定义锚点,<<: *
定义引用,以减少重复输入。
这里的 meshing 对象 半径0.4750前添加了负号,其作用是在0.4750外再用多一倍的周向网格进行细分,也就是0.4750内是4等分, 0.4750外是8等分,如下所示:
3.1.2. 导向管¶
以下定义了一个导向管的 structure 对象:
structures:
- name: GT
primitives:
- {type: CIRCLE, radius: 0.5625}
- {type: CIRCLE, radius: 0.6025}
regions:
- {material: ZIRC4, space: 2-1}
meshing: {type: SECTORS, num_azimuths: 8, radii: [0.1500, 0.2500, 0.3535]}
它们看起来是这样的:
可以看到,导向管由于中心是空的(默认会被 MOD
材料填充),因此在定义材料区的时候最里面那圈是不需要输入的。
当有控制棒或者可插入式可燃毒物时,就可以插入该空区域内。
此外,若该导向管有探测器插入,那么对于该处探测器的活度是以最内圈(也就是这里的半径0.15圆内)的细分网格区域来统计的。
3.1.3. 含钆燃料棒¶
以下定义了一个含钆燃料棒的 structure 对象:
structures:
- name: Gd_fuel_pin
primitives:
- {type: CIRCLE, radius: 0.1295}
- {type: CIRCLE, radius: 0.1831}
- {type: CIRCLE, radius: 0.2243}
- {type: CIRCLE, radius: 0.2590}
- {type: CIRCLE, radius: 0.2896}
- {type: CIRCLE, radius: 0.3172}
- {type: CIRCLE, radius: 0.3426}
- {type: CIRCLE, radius: 0.3663}
- {type: CIRCLE, radius: 0.3885}
- {type: CIRCLE, radius: 0.4096}
- {type: CIRCLE, radius: 0.4180}
- {type: CIRCLE, radius: 0.4750}
regions:
- {material: Fuel_Gd, space: '1'}
- {material: Fuel_Gd, space: 2-1}
- {material: Fuel_Gd, space: 3-2}
- {material: Fuel_Gd, space: 4-3}
- {material: Fuel_Gd, space: 5-4}
- {material: Fuel_Gd, space: 6-5}
- {material: Fuel_Gd, space: 7-6}
- {material: Fuel_Gd, space: 8-7}
- {material: Fuel_Gd, space: 9-8}
- {material: Fuel_Gd, space: 10-9}
- {material: HE, space: 11-10}
- {material: M5, space: 12-11}
meshing: {type: SECTORS, num_azimuths: 4, radii: [-0.4750, 0.5800]}
它看起来是这样的:
这里和普通燃料棒不同,含钆燃料棒随着燃耗的进行,燃料棒由内向外的成分差异非常显著,因此需要对含钆燃料棒进行细分燃耗区,
因此这里虽然是同样的材料,但定义了 10
个等面积的材料区,后续燃耗时自动作为 10
个燃耗区进行计算:
3.1.4. 格架“盒子”¶
以下定义了一个格架盒子的 structure 对象:
structures:
- name: Grid
primitives:
- type: POLYGON
vertexes:
- {x: -0.55, y: -0.55}
- {x: 0.55, y: -0.55}
- {x: 0.55, y: 0.55}
- {x: -0.55, y: 0.55}
- type: POLYGON
vertexes:
- {x: -0.63, y: -0.63}
- {x: 0.63, y: -0.63}
- {x: 0.63, y: 0.63}
- {x: -0.63, y: 0.63}
regions:
- {material: M5, space: 2-1}
格架是在组件已经有燃料棒的情况下再放进去的,在燃料棒的结构体已经定义过了细网划分信息, 因此这里不再需要定义 meshing 对象。
它看起来是这样的:
这里定义了一个正方形的盒子格架,通过 grid 对象 可以将此格架规则排布至整个组件。
通常实际商用压水堆的格架构造并非是一个正方形盒子, 但是一般计算时将其等效成一个面积相同在燃料棒外面的方盒子已经足够精确了。
当然,你也可以用任意凸多边形来定义更加复杂的真实格架,比如像下面那样的VVER堆型的格架:
3.1.5. 吊篮、中子屏蔽板、压力容器等¶
以下定义了包含有吊篮、中子屏蔽板和压力容器的 structure 对象:
structures:
- name: Reflector
primitives:
- {type: CIRCLE, radius: 169.86}
- {type: CIRCLE, radius: 174.94}
- {type: CIRCLE, radius: 176.14}
- {type: CIRCLE, radius: 182.94}
- {type: CIRCLE, radius: 199.45}
- {type: CIRCLE, radius: 219.55}
- type: POLYGON
vertexes:
- {x: 0.0, y: 0.0}
- {x: 219.55, y: 90.94}
- {x: 219.55, y: -90.94}
- type: POLYGON
vertexes:
- {x: 0.0, y: 0.0}
- {x: 90.55, y: -219.55}
- {x: -90.55, y: -219.55}
- type: POLYGON
vertexes:
- {x: 0.0, y: 0.0}
- {x: -219.55, y: 90.94}
- {x: -219.55, y: -90.94}
- type: POLYGON
vertexes:
- {x: 0.0, y: 0.0}
- {x: 90.55, y: 219.55}
- {x: -90.55, y: 219.55}
regions:
- {material: SS304, space: 2-1}
- {material: SS304, space: (4-3)&(7|8|9|10)}
- {material: CS508, space: 6-5}
其中中子屏蔽板的空间定义 (4-3)&(7|8|9|10)
是通过一个2个圆相减再与4个三角形的并集再交集来产生的。
它看起来是这样的:
这里的吊篮、中子屏蔽板和压力容器一起定义成一个 structure 对象。然后将其用于 reflector_middle、 reflector_top、reflector_bottom 中即可定义堆芯三维的围板反射层。
通过这样的方式,可以定义非常复杂的围板反射层构件,如VVER堆型的重反射层,该输入文件可参阅 vver_1000:
3.2. 两维围板结构体¶
两维围板结构体,即 baffle 对象,是指三维堆芯围板在两维(XY平面)的切面,之所以将围板与普通的两维几何结构体分开, 是因为围板都是沿着堆芯活性区外围延伸一定厚度的材料,如果用普通两维几何结构体的凸多边形定义,将会需要定义非常多的凸多边形, 并不方便。
因此,CRANE通过 baffle 对象 来定义围板,可以让用户输入更为简单。
所有的 baffle 对象 都定义在 baffles 列表中, 后面使用的时候通过 name 来引用该两维围板结构体。
以下定义了包含0.50cm的水隙,厚度为2.22cm的不锈钢围板:
baffles:
- name: Baffle
regions:
- {thickness: 0.50, material: MOD}
- {thickness: 2.22, material: SS304}
它看起来是这样的:
baffle 对象 定义完成后,在 core 对象 定义中用于 baffle 的定义,以组成三维的堆芯围板。 这种方式可以支持不同高度下有不同的围板结构。当然,一般商用压水堆的围板在不同高度下是一样的。
3.3. 两维组件栅格¶
有了各种类型的两维几何结构体后,如何将其排列成组件呢?这时就需要用到两维组件栅格, 即 lattice 对象。
CRANE通过两种方式将 structure 对象 布置到组件中:
通过 cell_map 规则地将 structure 对象 布置到组件中,支持方形组件或六角形组件布置, 此时布置间距通过 cell_pitch 和 assembly_pitch 计算得到。
通过 structure_location 对象 列表以给定坐标(两维几何结构体中心相对组件中心)的方式任意布置 structure 对象。
Note
为了减少用户输入,lattice 对象 中不需要定义格架以及可插入式的结构如可分离的可燃毒物棒等,它们会在其他方定义。
这两种方式可以同时使用,互相作为补充。但无论怎样布置,不同结构体之间不能有材料区的重叠,否则会出现 region_overlap_between_structure,可以通过 crane check-region-overlap 命令来检查重叠区域。
所有的 lattice 对象 都定义在 lattices 列表中, 后面使用的时候通过 name 来引用该两维组件栅格。
3.3.1. 方形压水堆组件栅格¶
这里采用 普通燃料棒 中的 F31
和 导向管 中的 GT
布置了一个17x17典型方形压水堆组件的 lattice 对象:
lattices:
- name: L31
cell_map:
[F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31,F31,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31,F31,F31,F31,
F31,F31,F31, GT,F31,F31,F31,F31,F31,F31,F31,F31,F31, GT,F31,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31,F31, GT,F31,F31,F31,F31,F31,F31,F31,F31,F31, GT,F31,F31,F31,
F31,F31,F31,F31,F31, GT,F31,F31, GT,F31,F31, GT,F31,F31,F31,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,
F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31,F31]
它看起来是这样的:
这是一个最简单的压水堆组件的 lattice 对象 例子,只用到 cell_map 来对燃料棒和导向管进行布置。
3.3.2. 六角形压水堆组件栅格¶
除了方形组件以外,CRANE还支持六角形组件,以下为一个典型的VVER组件的 lattice 对象:
lattices:
- name: L13AU
type: HEXAGON
structure_location:
- {structure: plate, location: {x: 0.0, y: 0.0}}
cell_map:
[F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13, GT,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13, GT,F13,F13,F13, GT,F13,F13,F13,F13, GT,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13, GT,F13,F13,F13,F13, CT,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13, GT,F13,F13,F13,F13, GT,F13,F13,F13, GT,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13, GT,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13, GT,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,
F13,F13,F13,F13,F13,F13,F13,F13,F13,F13,F13]
这里通过 structure_locations 方式布置了一个组件的支撑构件 plate
,是一个通过凸多边形定义的 structure 对象。
它看起来是这样的:
Note
对于六角形组件,lattice 对象 定义好了之后放入到堆芯中会默认逆时针旋转30°。
3.3.3. 沸水堆组件栅格¶
如果是像某些沸水堆组件中间有占据2x2栅元的大水洞,且还有组件盒的,可以通过以下方式定义 lattice 对象:
lattices:
- name: L31G
structure_location:
- {structure: BOX, location: {x: 0.0, y: 0.0}}
- {structure: GT2, location: {x: 0.0, y: 0.0}}
cell_map:
[F18,F31,F31,F31,F31,F31,F31,F18,
F31,F40,F40,F40,F40,F40,F40,F31,
F31,F40,F28,F28,F28,F28,F40,F31,
F31,F40,F28, '', '',F28,F40,F31,
F31,F40,F28, '', '',F28,F40,F31,
F31,F40,F28,F28,F28,F28,F40,F31,
F31,F40,F40,F40,F40,F40,F40,F31,
F18,F31,F31,F31,F31,F31,F31,F18,]
这里同样采用 cell_map 和 structure_locations 相结合的方式,普通的燃料棒用 cell_map 进行布置,
而大水洞的导向管 GT2
和组件盒 BOX
用 structure_locations 布置。
Note
在需要放置大水洞的2x2栅元位置,需要用 ''
空字符串在 cell_map 中进行占位,
表示留空给 structure_locations 布置。
它看起来是这样的:
3.4. 两维格架栅格¶
两维格架栅格,即 grid 对象,类似于 lattice 对象,它是将格架的两维几何结构体进行布置,以方便与 lattice 对象 组合到三维组件 assembly 对象 中去。
之所以将格架分开定义,是为了能够让用户更加自由地将不同的组件类型与格架类型进行组合。
Note
格架栅格与组件栅格组合的时候,也必须满足各自排布的几何结构体之间不能有重叠,否则会出现 region_overlap_between_structure,可以通过 crane check-region-overlap 命令来检查重叠区域。
grid 对象 定义同样支持规则布置和非规则布置,对应需输入 grid_map 和 structure_locations。 所有的 grid 对象 都定义在 grids 列表中,使用的时候通过 name 来引用该两维格架栅格。
3.4.1. 方形压水堆格架栅格¶
以下将 格架“盒子” 中定义的”盒子”格架进行17x17的排布(导向管位置没有格架):
grids:
- name: Space_grid
grid_map:
[GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD, '',GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD, '',GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD, '',GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD, '',GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD, '',GRD,GRD, '',GRD,GRD, '',GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,
GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD,GRD]
它看起来是这样的:
这是一个最简单的两维格架栅格例子,只用到了 grid_map 进行规则排布,且只有一种格架几何结构体。
3.4.2. 六角形压水堆格架栅格¶
和 lattice 对象 一样,你可通过组合 grid_map 和 structure_locations 构造出更加复杂的两维格架栅格。 以下是一个VVER堆型的格架栅格,排布着不同类型的格架,还包含组件外围的条带:
grids:
- name: spacer_grid
structure_location:
- {structure: strip, location: {x: 0.0, y: 0.0}}
grid_map:
[GDL,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDT, #01
GDL,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDT, #02
GDL,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDT, #03
GDL,GDN,GDN,GDN,GDN,GDN,GDG,GDG,GDN,GDN,GDN,GDN,GDN,GDT, #04
GDL,GDN,GDN,GDN,GDG,GDG,GDG,'', GDG,GDG,GDG,GDN,GDN,GDN,GDT, #05
GDL,GDN,GDN,GDN,GDG,'', GDG,GDG,GDG,GDG,'', GDG,GDN,GDN,GDN,GDT, #06
GDL,GDN,GDN,GDG,GDG,GDG,GDG,GDG,GDG,GDN,GDG,GDG,GDG,GDG,GDN,GDN,GDT, #07
GDL,GDN,GDN,GDG,'', GDG,GDN,GDG,'', GDG,GDG,GDG,GDG,'', GDG,GDN,GDN,GDT, #08
GDL,GDN,GDN,GDN,GDG,GDG,GDG,GDG,GDG,GDG,GDG,'', GDG,GDG,GDG,GDN,GDN,GDN,GDT, #09
GDL,GDN,GDN,GDN,GDG,GDG,GDG,'', GDG,GDN,GDN,GDG,GDG,GDN,GDG,GDG,GDN,GDN,GDN,GDT, #10
GDL,GDN,GDN,GDN,GDG,'', GDG,GDG,GDG,GDN, '',GDN,GDG,GDG,GDG,'', GDG,GDN,GDN,GDN,GDT, #11
GDN,GDN,GDN,GDN,GDG,GDG,GDN,GDG,GDG,GDN,GDN,GDG,'', GDG,GDG,GDG,GDN,GDN,GDN,GDN, #12
GDN,GDN,GDN,GDN,GDG,GDG,GDG,'', GDG,GDG,GDG,GDG,GDG,GDG,GDG,GDN,GDN,GDN,GDN, #13
GDN,GDN,GDN,GDG,'', GDG,GDG,GDG,GDG,'', GDG,GDN,GDG,'', GDG,GDN,GDN,GDN, #14
GDN,GDN,GDN,GDG,GDG,GDG,GDG,'', GDG,GDG,GDG,GDG,GDG,GDG,GDN,GDN,GDN, #15
GDN,GDN,GDN,GDN,GDG,'', GDG,GDG,GDG,GDG,'', GDG,GDN,GDN,GDN,GDN, #16
GDN,GDN,GDN,GDN,GDG,GDG,GDG,'', GDG,GDG,GDG,GDN,GDN,GDN,GDN, #17
GDN,GDN,GDN,GDN,GDN,GDN,GDG,GDG,GDN,GDN,GDN,GDN,GDN,GDN, #18
GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN, #19
GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN,GDN, #20
GDB,GDB,GDB,GDB,GDB,GDB,GDB,GDB,GDB,GDB,GDB] #21
它看起来是这样的:
3.5. 三维组件¶
三维组件,即 assembly 对象,它通过 axial 将 lattice 对象 进行轴向(Z方向) 从底到顶 的堆叠, 通过 grids 轴向堆叠 grid 对象 以定义不同高度下的格架,最终组成一个三维的组件。
所有的 assembly 对象 都定义在 assemblies 列表中, 后面定义堆芯组件布置时通过 name 来引用该三维组件。
Note
不同类型组件其堆叠起来的总高度必须是一致的,如果有些组件长,有些组件短,可以在短组件中堆叠以空字符串 ''
布置的“空两维组件格栅”来达到长组件的高度。
以下基于 方形压水堆组件栅格 中的 L31
和 方形压水堆格架栅格 中的 Space_grid
组成了一个典型的方形压水堆三维组件:
assemblies:
- name: A31
axial:
- {slice: L31, height: 365.8}
grids:
- {slice: Space_grid, height: 3.30, position: 3.722}
- {slice: Space_grid, height: 3.30, position: 65.767}
- {slice: Space_grid, height: 3.30, position: 117.967}
- {slice: Space_grid, height: 3.30, position: 170.167}
- {slice: Space_grid, height: 1.80, position: 196.267}
- {slice: Space_grid, height: 3.30, position: 222.367}
- {slice: Space_grid, height: 1.80, position: 248.467}
- {slice: Space_grid, height: 3.30, position: 274.557}
- {slice: Space_grid, height: 1.80, position: 300.657}
- {slice: Space_grid, height: 3.30, position: 326.757}
该组件总高度为365.8cm,在距离组件底部高度为3.722、66.767…总共7个位置处有格架,且有3.3cm和1.8cm两种厚度。
它的 y = 0
切面图以及不同高度的XY切面图看起来是这样的:
以上是一个非常简单的三维组件示例,真实组件的定义还可能会有组件底部的端塞、上部的充气层等等, 这些通过堆叠不同的 lattice 对象 都可以实现。
3.6. 三维可插入式结构体¶
三维可插入式结构体,即 inserted_rod 对象,它通过 axial 将 structure 对象 进行轴向(Z方向) 从底到顶 的堆叠来组成一个三维棒状结构,如控制棒、可燃毒物棒等,用于排布成束并插入堆芯。
所有的 inserted_rod 对象 都定义在 inserted_rods 列表中, 后面定义插入式结构布置时通过 name 来引用该结构体。
Note
可插入式结构体与一般结构体的区别在于,可插入式结构体先Z方向堆叠成 inserted_rod 对象, 再XY方向排布成bundle,而一般结构体先XY方向排布成 lattice 对象,再Z方向堆叠成 assembly 对象。
以下定义了3种可插入式结构体,分别为可燃毒物棒 BP
、下部B4C上部AIC的控制棒 CRD
以及中子测量管 IR
:
inserted_rods:
- name: IR
axial:
- {slice: IT_pin, height: 391.457}
- name: PR
axial:
- {slice: Pyrex_plug, height: 2.54}
- {slice: Pyrex_poison, height: 360.68}
- {slice: Pyrex_plenum, height: 22.2}
- name: CRD
axial:
- {slice: AIC_pin, height: 101.6}
- {slice: B4C_pin, height: 259.08}
- {slice: CRD_plenum, height: 10.7}
这里需要注意的是,CRANE采用基于材料区的轴向再均匀化方法来处理控制棒锯齿效应,因此 要求控制棒从底到顶的材料区划分必须是一致的,对于不同高度下控制棒半径不一样的情况需要用户去划分几何一致的材料区, 如下所示:
structures:
- name: AIC_pin
primitives:
- {type: CIRCLE, radius: 0.373}
- {type: CIRCLE, radius: 0.382}
- {type: CIRCLE, radius: 0.386}
- {type: CIRCLE, radius: 0.484}
regions:
- {material: AIC, space: '1'}
- {material: AIC, space: 2-1}
- {material: Helium, space: 3-2}
- {material: SS304, space: 4-3}
- name: B4C_pin
primitives:
- {type: CIRCLE, radius: 0.373}
- {type: CIRCLE, radius: 0.382}
- {type: CIRCLE, radius: 0.386}
- {type: CIRCLE, radius: 0.484}
regions:
- {material: B4C, space: '1'}
- {material: Helium, space: 2-1}
- {material: Helium, space: 3-2}
- {material: SS304, space: 4-3}
3.7. 中子测量管束¶
中子测量管束,是 regular_bundle 对象 的一种,它通过 inserting_map 将 inserted_rod 对象 先进行组件范围内的排布,组成以组件为单位的中子测量管束,再通过 instrument_map 在堆芯中进行布置。
所有的中子测量管束都定义在 instrument_bundle 列表中, 后面进行堆芯内布置时通过 name 来引用该中子测量管束。
以下用 三维可插入式结构体 中的 IR
定义了最常见的中心测量管束,即只有一根测量管,且在组件中心处:
instrument_bundle:
- name: 1IT
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', IR, '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
3.8. 分离式可燃毒物棒束¶
分离式可燃毒物棒束,也是 regular_bundle 对象 的一种,它通过 inserting_map 将 inserted_rod 对象 先进行组件范围内的排布,组成以组件单位的可燃毒物棒束,再通过 burnable_absorber_map 在堆芯中进行布置。
所有的分离式可燃毒物棒束都定义在 burnable_absorber_bundle 列表中, 后面进行堆芯内布置时通过 name 来引用该可燃毒物棒束。
以下用 三维可插入式结构体 中的 PR
定义了 VERA_5 基准题中 5
种可燃毒物棒束,分别含 8、12、16、20、24
根可燃毒物棒:
burnable_absorber_bundle:
- name: 8P
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', PR, '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', PR, '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- name: 12P
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', '', '', '', PR, '', '', '', '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', '', '', '', PR, '', '', '', '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- name: 16P
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', '', '', '', PR, '', '', '', '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', '', '', '', PR, '', '', '', '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', PR, '', '', '', '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- name: 20P
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', PR, '', '', PR, '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', '', '', '', PR, '', '', '', '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', PR, '', '', '', '', '', PR, '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', '', '', '', PR, '', '', '', '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', PR, '', '', PR, '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
- name: 24P
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', PR, '', '', PR, '', '', PR, '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', PR, '', '', PR, '', '', PR, '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', PR, '', '', '', '', '', PR, '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', PR, '', '', PR, '', '', PR, '', '', PR, '', '', PR, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', PR, '', '', '', '', '', '', '', '', '', PR, '', '', '',
'', '', '', '', '', PR, '', '', PR, '', '', PR, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
3.9. 控制棒束¶
与中子测量管束和分离式可燃毒物棒束有些区别,CRANE对控制棒束(即 cr_bundle 对象)定义既支持组件内部规则地进行排布, 又可以非规则的插入至组件内部任意位置,甚至是组件与组件之间,如沸水堆十字形控制棒。
所有的控制棒束都定义在 control_rod_bundle 列表中, 后面进行堆芯内布置时通过 name 来引用该控制棒束。
3.9.1. 规则排布的控制棒束¶
对于规则排布于组件内的控制棒束,可以通过 inserting_map 将 inserted_rod 对象 先进行排布,组成控制棒束,再通过 location_map 在堆芯中进行布置。
以下用 三维可插入式结构体 中的 CRD
定义了典型压水堆的控制棒束,一个组件内部根:
control_rod_bundle:
- name: 24C
inserting_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '',CRD, '', '',CRD, '', '',CRD, '', '', '', '', '',
'', '', '',CRD, '', '', '', '', '', '', '', '', '',CRD, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '',CRD, '', '',CRD, '', '',CRD, '', '',CRD, '', '',CRD, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '',CRD, '', '',CRD, '', '', '', '', '',CRD, '', '',CRD, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '',CRD, '', '',CRD, '', '',CRD, '', '',CRD, '', '',CRD, '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '',CRD, '', '', '', '', '', '', '', '', '',CRD, '', '', '',
'', '', '', '', '',CRD, '', '',CRD, '', '',CRD, '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
3.9.2. 非规则排布的控制棒束¶
对于非规则排布的控制棒束,可以通过 locations 将 inserted_rod 对象 根据坐标任意排布,组成控制棒束,再通过 locations 放置在堆芯的任意位置。
以下用非规则的方式定义了两种控制棒束,分别包含4根和8根控制棒:
control_rod_bundle:
- name: CR1
locations:
- {inserted_rod: CRD, location: {x: 24.0, y: -24.0}}
- {inserted_rod: CRD, location: {x: -24.0, y: 24.0}}
- {inserted_rod: CRD, location: {x: 24.0, y: 24.0}}
- {inserted_rod: CRD, location: {x: -24.0, y: -24.0}}
- name: CR2
locations:
- {inserted_rod: CRD, location: {x: 24.0, y: -56.0}}
- {inserted_rod: CRD, location: {x: 24.0, y: 56.0}}
- {inserted_rod: CRD, location: {x: -24.0, y: -56.0}}
- {inserted_rod: CRD, location: {x: -24.0, y: 56.0}}
- {inserted_rod: CRD, location: {y: 24.0, x: -56.0}}
- {inserted_rod: CRD, location: {y: 24.0, x: 56.0}}
- {inserted_rod: CRD, location: {y: -24.0, x: -56.0}}
- {inserted_rod: CRD, location: {y: -24.0, x: 56.0}}
关于非规则排布控制棒应用的列子可参阅 example_bwr。
3.10. 三维堆芯¶
可以说在三维堆芯(即 core 对象)定义之前,其他所有的几何建模都是为其做准备的,最终还是需要通过定义 core 对象 将之前的所有建模数据组装起来,形成一个真实的三维堆芯模型。
构建 core 对象 的逻辑是这样的:
通过 assembly_map 将三维组件 assembly 对象 规则地布置,组成三维堆芯的“活性区”;
通过 reflector_middle、reflector_top、reflector_bottom 以及 baffle 用“反射层”将“活性区”围起来;
通过 instrument_map 将中子测量管束布置到堆芯中;
通过 burnable_absorber_map 和 burnable_absorber_position 将分离式可燃毒物棒束布置到堆芯中;
通过 control_rod 对象 将控制棒布置到堆芯中,后续通过 state_control_rod_position 来改变棒位;
3.10.1. 活性区¶
这里的堆芯活性区指的是三维组件占据的区域,并非狭义的活性区,活性区通过 assembly_map 来定义,
支持方形和六角形排布两种方式,和 cell_map 类似,布置图必须排满,没有组件的地方必须用空字符串 ''
占位,如以下就是 VERA_5 基准题中的组件布置图:
core:
assembly_map:
[ '', '', '', '', A31, A31, A31, A31, A31, A31, A31, '', '', '', '',
'', '', A31, A31, A31, A21, A31, A21, A31, A21, A31, A31, A31, '', '',
'', A31, A31, A26, A21, A26, A21, A26, A21, A26, A21, A26, A31, A31, '',
'', A31, A26, A26, A26, A21, A26, A21, A26, A21, A26, A26, A26, A31, '',
A31, A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31, A31,
A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31,
A31, A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31, A31,
A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31,
A31, A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31, A31,
A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31,
A31, A31, A21, A26, A21, A26, A21, A26, A21, A26, A21, A26, A21, A31, A31,
'', A31, A26, A26, A26, A21, A26, A21, A26, A21, A26, A26, A26, A31, '',
'', A31, A31, A26, A21, A26, A21, A26, A21, A26, A21, A26, A31, A31, '',
'', '', A31, A31, A31, A21, A31, A21, A31, A21, A31, A31, A31, '', '',
'', '', '', '', A31, A31, A31, A31, A31, A31, A31, '', '', '', '']
无论堆芯对称性如何,CRANE都要求用户输入整个堆芯模型(组件、中子测量管、可燃毒物、控制棒等所有堆芯布置图), 而不是部分堆芯。
但是如果你非要偷懒,可以将非计算区域的组件用 ''
代替,
如1/4堆芯计算时上面的布置图可以这样输入(我们并不建议这样做):
core:
symmetry: 4
assembly_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', A21, A26, A21, A26, A21, A26, A21, A31,
'', '', '', '', '', '', '', A26, A21, A26, A21, A26, A21, A31, A31,
'', '', '', '', '', '', '', A21, A26, A21, A26, A21, A26, A21, A31,
'', '', '', '', '', '', '', A26, A21, A26, A21, A26, A21, A31, A31,
'', '', '', '', '', '', '', A21, A26, A21, A26, A26, A26, A31, '',
'', '', '', '', '', '', '', A26, A21, A26, A21, A26, A31, A31, '',
'', '', '', '', '', '', '', A21, A31, A21, A31, A31, A31, '', '',
'', '', '', '', '', '', '', A31, A31, A31, A31, '', '', '', '']
Note
这种情况下,由于组件布置图与对称性条件不一致,CRANE会给出警告信息。
当进行后续循环计算时,assembly_map 中的旧料采用组件行列编号以及循环号的方式来定义,具体请参阅 multi-cycle。
3.10.2. 反射层¶
反射层包含围板(如果有的话)、中间反射层、底部反射层和顶部反射层。分别通过 baffle、reflector_middle、 reflector_top、reflector_bottom 在Z方向从底到顶堆叠两维结构体来描述的。
以下就是 VERA_5 基准题中的反射层定义:
core:
baffle:
- {slice: Baffle, height: 391.457}
reflector_middle:
- {slice: ref_middle, height: 391.457}
reflector_top:
- {slice: ref_top_nozzle, height: 8.827}
- {slice: ref_core_plates, height: 7.6}
- {slice: ref_mod, height: 20}
reflector_bottom:
- {slice: ref_mod, height: 20}
- {slice: ref_core_plates, height: 5.0}
- {slice: ref_bottom_nozzle, height: 6.053}
Note
中间反射层所用到的结构体必须“空心的”,如 吊篮、中子屏蔽板、压力容器等 中的基元1内是没有定义的, 以留空间给活性区以及围板。
3.10.3. 堆内分离式可燃毒物棒¶
通过 burnable_absorber_map 可将之前定义的 burnable_absorber_bundle 列表中的分离式可燃毒物棒束布置到堆芯中,再通过 burnable_absorber_position 来调整每个棒束的高度。
Note
这里的高度是指可燃毒物棒底部距离组件底部(不包含轴向反射层)的距离。
如 VERA_5 基准题中的堆内分离式可燃毒物棒布置图如下:
core:
burnable_absorber_map:
[ '', '', '', '', '', 8P, '', 12P, '', 8P, '', '', '', '', '',
'', '', '', '', 16P, '', 24P, '', 24P, '', 16P, '', '', '', '',
'', '', 12P, 24P, '', 16P, '', 20P, '', 16P, '', 24P, 12P, '', '',
'', '', 24P, '', 20P, '', 20P, '', 20P, '', 20P, '', 24P, '', '',
'', 16P, '', 20P, '', 20P, '', 20P, '', 20P, '', 20P, '', 16P, '',
8P, '', 16P, '', 20P, '', 24P, '', 24P, '', 20P, '', 16P, '', 8P,
'', 24P, '', 20P, '', 24P, '', 20P, '', 24P, '', 20P, '', 24P, '',
12P, '', 20P, '', 20P, '', 20P, '', 20P, '', 20P, '', 20P, '', 12P,
'', 24P, '', 20P, '', 24P, '', 20P, '', 24P, '', 20P, '', 24P, '',
8P, '', 16P, '', 20P, '', 24P, '', 24P, '', 20P, '', 16P, '', 8P,
'', 16P, '', 20P, '', 20P, '', 20P, '', 20P, '', 20P, '', 16P, '',
'', '', 24P, '', 20P, '', 20P, '', 20P, '', 20P, '', 24P, '', '',
'', '', 12P, 24P, '', 16P, '', 20P, '', 16P, '', 24P, 12P, '', '',
'', '', '', '', 16P, '', 24P, '', 24P, '', 16P, '', '', '', '',
'', '', '', '', '', 8P, '', 12P, '', 8P, '', '', '', '', '']
burnable_absorber_position:
[ 0, 0, 0, 0, 0, 7.224, 0, 7.224, 0, 7.224, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 0, 0, 0,
0, 0, 7.224, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 7.224, 0, 0,
0, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 0,
0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0,
7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224,
0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0,
7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224,
0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0,
7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224,
0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0,
0, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 0,
0, 0, 7.224, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 7.224, 0, 0,
0, 0, 0, 0, 7.224, 0, 7.224, 0, 7.224, 0, 7.224, 0, 0, 0, 0,
0, 0, 0, 0, 0, 7.224, 0, 7.224, 0, 7.224, 0, 0, 0, 0, 0]
没有分离式可燃毒物棒的组件必须用空字符串 ''
(高度用 0
)占位。
3.10.4. 堆内控制棒¶
堆内控制棒定义通过 control_rod 对象 完成,其包含控制棒步长、总步数、全提时高度位置等,另外通过 banks 来进行控制棒分组,这里就需要用到前面定义的 cr_bundle 对象。
如果控制棒以组件为单位来布置的,则通过 location_map 来定义控制棒堆内布置, 如VERA基准题中5的堆内控制棒可以这样定义:
core:
control_rod:
max_num_steps: 230
step_size: 1.5875
fully_withdrawn_height: 371.658
banks:
- {name: A, bundle: 24C, position: 230}
- {name: B, bundle: 24C, position: 230}
- {name: C, bundle: 24C, position: 230}
- {name: D, bundle: 24C, position: 230}
- {name: SA, bundle: 24C, position: 230}
- {name: SB, bundle: 24C, position: 230}
- {name: SC, bundle: 24C, position: 230}
- {name: SD, bundle: 24C, position: 230}
location_map:
[ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', SA, '', B, '', C, '', B, '', SA, '', '', '',
'', '', '', '', SD, '', SB, '', SB, '', SC, '', '', '', '',
'', SA, '', D, '', '', '', D, '', '', '', D, '', SA, '',
'', '', SC, '', A, '', '', '', '', '', A, '', SD, '', '',
'', B, '', '', '', C, '', A, '', C, '', '', '', B, '',
'', '', SB, '', '', '', '', '', '', '', '', '', SB, '', '',
'', C, '', D, '', A, '', D, '', A, '', D, '', C, '',
'', '', SB, '', '', '', '', '', '', '', '', '', SB, '', '',
'', B, '', '', '', C, '', A, '', C, '', '', '', B, '',
'', '', SD, '', A, '', '', '', '', '', A, '', SC, '', '',
'', SA, '', D, '', '', '', D, '', '', '', D, '', SA, '',
'', '', '', '', SC, '', SB, '', SB, '', SD, '', '', '', '',
'', '', '', SA, '', B, '', C, '', B, '', SA, '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
没有插入控制棒的组件必须用空字符串 ''
占位。
如果控制棒并非以组件为单位布置,如BWR中的控制棒是在组件间布置的,则可以通过 locations 定义,类似于这样:
core:
control_rod:
max_num_steps: 371
step_size: 1.0
fully_withdrawn_height: 370.8
banks:
- {name: G1, bundle: CR1, position: 0}
- {name: G2, bundle: CR2, position: 0}
locations:
- {bank: G1, location: {x: 0.0, y: 0.0}}
- {bank: G2, location: {x: 0.0, y: 0.0}}
控制棒非规则定义的例子具体可参见:ref:examples_bwr。这种通过坐标的方式可以让控制棒布置到堆芯中任意位置,甚至是活性区外。
3.10.5. 探测器¶
通过 detector 对象 可定义堆芯探测器信息,探测器信息包含核反应类型、轴向分层及径向布置信息。
探测器核素反应类型通过 detector_reaction_id 定义, 默认为U-235的(n,f)反应, 通常不同核素反应类型对探测器堆内活度分布影响不大。
探测器轴向分层由 axial 定义,后续计算结果中探测器反应率的三维分布的轴向分层就根据该信息来编辑。
而探测器径向布置则由 radial 定义,即将之前定义的 instrument_bundle 列表中的中子测量管束 布置到堆芯中,CRANE会根据该信息编辑产生探测器活度在堆内的分布。
如 VERA_5 基准题中的探测器布置如下:
core:
detector:
reaction_id: 1003
axial:
- {height: 10.0, position: 5.898}
- {height: 10.0, position: 15.898}
- {height: 10.0, position: 25.898}
- {height: 10.0, position: 35.898}
- {height: 10.0, position: 45.898}
- {height: 10.0, position: 55.898}
- {height: 10.0, position: 65.898}
- {height: 10.0, position: 75.898}
- {height: 10.0, position: 85.898}
- {height: 10.0, position: 95.898}
- {height: 10.0, position: 105.898}
- {height: 10.0, position: 115.898}
- {height: 10.0, position: 125.898}
- {height: 10.0, position: 135.898}
- {height: 10.0, position: 145.898}
- {height: 10.0, position: 155.898}
- {height: 10.0, position: 165.898}
- {height: 10.0, position: 175.898}
- {height: 10.0, position: 185.898}
- {height: 10.0, position: 195.898}
- {height: 10.0, position: 205.898}
- {height: 10.0, position: 215.898}
- {height: 10.0, position: 225.898}
- {height: 10.0, position: 235.898}
- {height: 10.0, position: 245.898}
- {height: 10.0, position: 255.898}
- {height: 10.0, position: 265.898}
- {height: 10.0, position: 275.898}
- {height: 10.0, position: 285.898}
- {height: 10.0, position: 295.898}
- {height: 10.0, position: 305.898}
- {height: 10.0, position: 315.898}
- {height: 10.0, position: 325.898}
- {height: 10.0, position: 335.898}
- {height: 10.0, position: 345.898}
- {height: 10.0, position: 355.898}
radial:
[ '', '', '', '', '', '', 1IT, '', '', 1IT, '', '', '', '', '',
'', '', 1IT, '', '', 1IT, '', 1IT, '', '', '', '', '', '', '',
'', '', '', '', '', '', '', 1IT, '', 1IT, '', 1IT, '', 1IT, '',
'', 1IT, 1IT, '', '', '', '', 1IT, '', '', '', '', '', '', '',
'', '', '', '', 1IT, '', '', '', 1IT, '', 1IT, '', 1IT, '', '',
1IT, '', 1IT, '', '', 1IT, '', 1IT, '', '', '', '', '', 1IT, '',
'', '', '', 1IT, '', '', 1IT, '', '', 1IT, '', '', 1IT, '', '',
1IT, '', 1IT, '', 1IT, '', 1IT, '', '', 1IT, '', 1IT, 1IT, 1IT, '',
'', 1IT, '', '', '', '', '', '', 1IT, '', 1IT, '', '', '', 1IT,
'', '', '', '', 1IT, '', 1IT, '', '', '', '', 1IT, '', '', '',
1IT, '', '', '', 1IT, '', '', 1IT, '', '', 1IT, '', '', '', 1IT,
'', '', '', '', '', 1IT, '', '', 1IT, '', '', 1IT, '', '', '',
'', '', 1IT, '', 1IT, '', '', 1IT, '', '', '', '', '', 1IT, '',
'', '', 1IT, '', '', '', 1IT, '', '', 1IT, '', 1IT, '', '', '',
'', '', '', '', 1IT, '', '', 1IT, '', '', '', '', '', '', '']
Note
没有中子测量管的组件必须用空字符串 ''
占位。
这里的探测器轴向分了36层,每层10cm。
3.10.6. 关于对称性¶
堆芯对称性通过 symmetry 定义,除直接全堆计算外,CRANE支持以下部分堆芯计算:
对于方形组件的堆型,支持
1/4、1/8
堆芯计算;对于六角形组件的堆型,支持
1/3、1/6
堆芯计算;
Note
强烈建议用户根据对称性来进行部分堆芯计算以减少计算量。百万千瓦级的商用压水堆如果用全堆芯计算, 即使在10张RTX4090显卡的服务器上,其计算需要的存储量也超过总显存,转而使用大量内存导致计算效率大幅降低。
是否是旋转对称则通过 is_periodic 设置,默认都是旋转对称的。
对于方形组件堆型的 1/4
堆芯计算,CRANE的计算区域如下所示:
对于方形组件堆型的 1/8
堆芯计算,CRANE的计算区域如下所示:
对于六角形组件堆型的 1/3
堆芯计算,CRANE的计算区域如下所示:
对于六角形组件堆型的 1/6
堆芯计算,CRANE的计算区域如下所示:
Note
CRANE会对堆芯对称性做检查,当组件布置图与对称性条件不一致时会给出警告信息。
3.10.7. 关于轴向分层¶
当你完成堆芯建模以后,CRANE会叠加所有材料轴向布置信息(如组件材料、格架、控制棒、可燃毒物棒等等)以及 plane_max_thickness 自动计算轴向分层网格,因此在建模之前你无需考虑轴向网格划分。
当然,你可以通过 plane_max_thickness 来调整轴向层的最大厚度,对于一般商用压水堆而言,
这个值在 20cm
左右就足够精确了。
Note
根据材料交界面划分出来的层有可能很薄,当有非常薄 (小于0.5cm)
的层时,程序会给出警告信息,
因为很薄的层可能会造成CMFD迭代不稳定,若此时出现收敛问题,可适当调整材料布置以避免出现非常薄的层。