快速上手

CRANE是一个非常容易上手的程序,其使用过程包含以下三个步骤:

  1. 准备输入文件,在 YAML 格式的 用户输入文件 上定义模型及计算参数;

  2. 通过 命令行 运行CRANE;

  3. 查看、比较或 可视化 结果数据。

接下来我们以 VERA_2A 基准题为例来指引用户如何快速上手CRANE,想更详细地了解程序的使用请参阅 用户指南

准备 用户输入文件

CRANE的 用户输入文件 采用 YAML 格式,这是一种相较于XML更易于用户读写的标记预言格式, 非常适合作为程序的输入文件或者配置文件。其具体规则可参阅 YAML 官方文档。

CRANE输入文件遵循从小到大、从两维到三维、从材料到几何的建模策略,并且利用 YAML 自带的锚点引用的方式, 能够让用户简单快速的定义重复结构。

我们首先创建 VERA_2A.yaml 文件,并尝试该文件中对该基准题进行建模。

材料定义

CRANE建模从 材料定义 开始,用户输入文件 中的材料建模通过输入一个包含 material 对象materials 列表 来完成。

由于 VERA_2A 基准题材料都已经直接给定了核子密度,这里我们可以直接 通过核子密度 的方式进行材料建模, 如该基准题中富集度 3.1% 的燃料的输入为:

materials:
- name: Fuel_31
  elements: [O-nat, U-234, U-235, U-236, U-238]
  number_densities: [4.57642e-02, 6.11864e-06, 7.18132e-04, 3.29861E-06, 2.21546e-02]

elements 此时为核素名词列表,CRANE数据库中包含的所有核素名称可参阅 材料配置文件number_densities 为对应的核素核子密度列表,单位为 /barn-cm

Note

CRANE输入中大部分对象都包含 name 属性,该属性是一个大小写相关的字符串,用来索引该对象,因此同对象列表中 name 必须是唯一的,如材料列表中不可包含两个 name 相同的材料。

为了减少核素数量,CRANE数据库中对大量的同位素以天然成分占比的方式合并成一个核素,因此只要对这里的同位素核子密度相加获得天然核素的核子密度, 如对于基准题中的 Cladding 材料建模如下:

materials:
- name: Cladding
  elements: [Hf-nat, Cr-nat, Fe-nat, Zr-nat, Sn-nat]
  number_densities: [2.21336e-06, 7.59772e-05, 1.485589e-04, 4.253938e-02, 4.8254218e-04]

包含 VERA_2A 基准题中所有材料的 materials 列表 为:

materials:
- name: Fuel_31
  elements: [O-nat, U-234, U-235, U-236, U-238]
  number_densities: [4.57642e-02, 6.11864e-06, 7.18132e-04, 3.29861E-06, 2.21546e-02]
- name: Helium
  elements: [He-4]
  number_densities: [2.68714e-05]
- name: Cladding
  elements: [Hf-nat, Cr-nat, Fe-nat, Zr-nat, Sn-nat]
  number_densities: [2.21336e-06, 7.59772e-05, 1.485589e-04, 4.253938e-02, 4.8254218e-04]
- name: MOD
  elements: [O-nat, H-H2O, B-nat]
  number_densities: [2.48112E-02, 4.96224E-02, 5.38041E-05]

几何建模

材料定义完成后就可进行 几何建模 ,CRANE通过定义 geometries 对象 来进行几何建模,geometries 对象 必须包含 structureslatticesassemblies 三个列表和一个的 core 对象 对象,这里 VERA_2A 基准题比较简单,可通过上述内容定义完成。其他复杂的几何构件如格架等通过选填的 grids 等实现,具体可参阅 geometries 对象

structures 是一系列两维几何结构体 structure 对象,每个 structure 对象 包含 nameprimitivesregionsmeshing 等属性,name 为索引用的字符串,primitives 为几何基元,CRANE中目前支持圆和任意凸多边形两种几何基元,regions 为材料区,材料区定义通过对几何基元的布尔运算来实现,meshing 定义输运计算的细网划分信息,该基准题中的燃料棒可如下定义:

geometries:
  structures:
  - name: F31
    primitives:
    - {type: CIRCLE, radius: 0.4096}
    - {type: CIRCLE, radius: 0.4180}
    - {type: CIRCLE, radius: 0.4750}
    regions:
    - {material: Fuel_31, space: '1'}
    - {material: Helium, space: 2-1}
    - {material: Cladding, space: 3-2}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.2365, 0.3344, 0.55, 0.66]}

Note

这里的第一个材料区的space定义需要输入 '1' 而不是 1,因为YAML对单个数字 1 会解析为整数而不是字符串,而 2-1 则自动解析为字符串。

其中 primitives 中定义了半径分别为 0.4096,0.4180,0.4750 三个圆,并在 regions 中定义了三个材料区,第一个区空间定义 1 表示在基元1内,材料为 Fuel_31,第二个区空间定义 2-1 表示在基元内基元1外基元2内, 材料为 Helium,第三个区空间定义 3-2 表示在基元3内基准2外,材料为 Claddingmeshing 定义了一个环状网格, 周向 8 个等分,径向在半径 0.2365,0.3344,0.5800 处进行细分。

除了燃料棒外,另外还需定义导向管和中心测量管,该基准题完整的 structures 列表为:

geometries:
  structures:
  - name: F31
    primitives:
    - {type: CIRCLE, radius: 0.4096}
    - {type: CIRCLE, radius: 0.4180}
    - {type: CIRCLE, radius: 0.4750}
    regions:
    - {material: Fuel_31, space: '1'}
    - {material: Helium, space: 2-1}
    - {material: Cladding, space: 3-2}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.2365, 0.3344, 0.55, 0.66]}
  - name: GT
    primitives:
    - {type: CIRCLE, radius: 0.561}
    - {type: CIRCLE, radius: 0.602}
    regions:
    - {material: Cladding, space: 2-1}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.3239, 0.4581]}
  - name: IT
    primitives:
    - {type: CIRCLE, radius: 0.559}
    - {type: CIRCLE, radius: 0.605}
    regions:
    - {material: Cladding, space: 2-1}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.3227, 0.4564]}

有了 structures 列表以后,即可定义 lattices 列表,lattices 列表中的 lattice 对象 用来对各种几何结构体进行排布,组成两维层面上的组件。lattice 对象 对象包含有 namecell_mapstructure_location 对象 等属性,对于 VERA_2A 基准题中规则的方形组件,lattice 对象 只需定义 namecell_map 即可,如下所示:

geometries:
  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, IT,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]

这里 cell_map 中将之前定义的 structure 对象 进行方形栅元的规则排布,排布的栅元对边距在 core 对象 中给出, 六边形及组件内部包含有非规则几何的复杂 lattice 对象 定义可参阅 geometries 对象

lattices 是两维层面上组件的栅元排布,而真实的三维组件在 assemblies 列表中定义, assemblies 列表中包含一系列 assembly 对象,每个 assembly 对象 必须包含 nameaxial 属性,其中 axial 是一个列表,是对两维的 lattice 对象 在轴向(z方向)上 从底到顶 进行累加。由于 VERA_2A 是一个两维单组件基准题,因此在轴向上我们只累加 1cm 即可:

geometries:
  assemblies:
  - name: A31
    axial: 
    - {slice: L31, height: 1.0}

基于三维的组件列表,最后我们定义 core 对象core 对象 内包含 nametypesymmetrycell_pitchassembly_pitchassembly_map 属性等,由于该基准题为单组件问题,因此 assembly_map 列表中只有一个组件,且必须将外围反照率 outer_albedo 设置为 1.0,上下都是全反射边界条件,如下所示:

geometries:
  core:
    name: VERA_2A
    type: SQUARE
    symmetry: 1
    assembly_pitch: 21.5
    cell_pitch: 1.26
    plane_max_thickness: 10.0
    outer_albedo: 1.0
    assembly_map: 
      [A31]
    top_boundary_condition: REFLECTIVE
    bottom_boundary_condition: REFLECTIVE
 

Note

由于该问题为两维问题,这里轴向分层相关的参数 plane_max_thickness 不会对计算结果产生影响。

状态参数设置

至此为止,几何建模就完成了,后续再定义 state 对象,这里输入了系统压力、燃料温度、慢化剂温度和可溶硼浓度:

state:
  system_pressure: 15.516
  moderator_temperature: 565
  fuel_temperature: 565
  boron_concentration: 1300

Note

由于该基准题问题我们直接定义了 MOD 材料(即慢化剂材料)的核子密度,因此这里用来计算慢化剂成分的系统压力、 硼浓度等数据并不会影响计算结果。

计算控制参数设置

最后通过 settings 对象 进行计算控制参数设置,这部分所有的参数都是有默认值的,如果缺省则采用默认参数, 针对该基准题我们输入迭代收敛判据以及两维特征线方法控制参数为例:

settings:
  power_iteration:
    fission_converge_criterion: 1.0e-4
    keff_converge_criterion: 1.0e-5
  moc_2d:
    num_azimuths: 12
    num_polars: 3
    track_density: 0.05

此处采用裂变源收敛判据为 1e-4,有效增殖因子收敛判据为 1e-5,两维特征线方法离散角在一个卦限内方位角 12 个,极角 3 个,特征线密度 0.05cm

最终的输入文件如下:

materials:
- name: Fuel_31
  elements: [O-nat, U-234, U-235, U-236, U-238]
  number_densities: [4.57642e-02, 6.11864e-06, 7.18132e-04, 3.29861E-06, 2.21546e-02]
- name: Helium
  elements: [He-4]
  number_densities: [2.68714e-05]
- name: Cladding
  elements: [Hf-nat, Cr-nat, Fe-nat, Zr-nat, Sn-nat]
  number_densities: [2.21336e-06, 7.59772e-05, 1.485589e-04, 4.253938e-02, 4.8254218e-04]
- name: MOD
  elements: [O-nat, H-H2O, B-nat]
  number_densities: [2.48112E-02, 4.96224E-02, 5.38041E-05]

geometries:
  structures:
  - name: F31
    primitives:
    - {type: CIRCLE, radius: 0.4096}
    - {type: CIRCLE, radius: 0.4180}
    - {type: CIRCLE, radius: 0.4750}
    regions:
    - {material: Fuel_31, space: '1'}
    - {material: Helium, space: 2-1}
    - {material: Cladding, space: 3-2}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.2365, 0.3344, 0.55, 0.66]}
  - name: GT
    primitives:
    - {type: CIRCLE, radius: 0.561}
    - {type: CIRCLE, radius: 0.602}
    regions:
    - {material: Cladding, space: 2-1}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.3239, 0.4581]}
  - name: IT
    primitives:
    - {type: CIRCLE, radius: 0.559}
    - {type: CIRCLE, radius: 0.605}
    regions:
    - {material: Cladding, space: 2-1}
    meshing: {type: SECTORS, num_azimuths: 8, radii: [0.3227, 0.4564]}

  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, IT,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]

  assemblies:
  - name: A31
    axial: 
    - {slice: L31, height: 1.0}

  core:
    name: VERA_2A
    type: SQUARE
    assembly_pitch: 21.5
    cell_pitch: 1.26
    outer_albedo: 1.0
    assembly_map: [A31]
    top_boundary_condition: REFLECTIVE
    bottom_boundary_condition: REFLECTIVE
 
state:
  moderator_temperature: 565
  fuel_temperature: 565

settings:
  power_iteration:
    fission_converge_criterion: 1.0e-4
    keff_converge_criterion: 1.0e-5
  moc_2d:
    num_azimuths: 12
    num_polars: 2
    track_density: 0.05

运行CRANE

输入文件填写完成以后,首先可以用 可视化 功能来检查下模型的几何、材料布置是否正确。执行 crane visualize 命令进入CRANE的可视化交互式命令行环境:

crane visualize VERA_2A.yaml

在该环境下按 Tab 键可自动提示 交互式可视化命令行,以下我们运行 plot-model 命令来查看模型:

../_images/plot_model.png

执行上述命令后,会弹出如下可视化窗口:

../_images/plot_model_window.png

由于CRANE采用基于轨迹点的矢量图进行可视化,因此可在不损失像素的情况下任意缩放该模型图,我们可以点击放大镜按钮,选中一根燃料棒进行放大:

../_images/scale_pin.png

检查模型无误后,运行 crane run 命令进行计算:

crane run VERA_2A.yaml

启动后CRANE会将整个计算过程信息打印到屏幕上,如下所示

../_images/crane_run_log.png

同时也会将上述计算过程信息保存至 CRANE.log 文件中,方便后续查看。

查看、比较及可视化结果数据

CRANE计算完成后,会将所有结果数据默认保存至以堆芯名称 name 命名的 HDF5 文件,关于该文件的详细说明请参阅 HDF5 结果文件

另外,CRANE还会产生一个同样命名的 Excel 文件,该文件保存了主要的一些结果数据,如计算状态参数、硼降曲线、 组件功率分布、轴向功率分布、控制棒价值等,方便用户在windows系统上进行查看编辑。关于该文件的详细说明请参阅 Excel 结果文件

和执行 crane visualize 命令一样,计算完成后CRANE默认会进入可视化交互式命令行环境,执行命令:

Note

crane visualize 命令后面也可以接计算结果文件,如 crane visualize VERA_2A.h5 即可进入可视化交互式命令行环境。

plot-power-distribution --power-type pin-integral

可绘制出棒积分功率分布图:

../_images/qs_plot_pin_power.png

按下 Ctrl-D 或者输入 exit 即可退出可视化交互式命令行环境。

如果我们需要比较两个结果的差异,CRANE同样可以很方便的做到,现在我们修改 track_density0.03 并保存, 运行以下命令:

crane run VERA_2A.yaml --output VERA_2A_003 --compare VERA_2A.h5

为防止覆盖原先结果,此处我们通过 --output 选项设置输出文件名为 VERA_2A_003,并且通过 --compare 选项来比对原先的计算结果文件 VERA_2A.h5

Note

计算结果完成后执行 crane visualize VERA_2A_003.h5 VERA_2A.h5 也可以进入交互式可视化环境来比较这两个结果, 比较的偏差是 VERA_2A_003.h5 - VERA_2A.h5

同样我们执行命令:

plot-power-distribution --power-type pin-integral

可绘制出棒积分功率偏差分布图:

../_images/qs_plot_pin_power_compare.png

可以看到把特征线密度从 0.05 改动到 0.03 对于棒功率分布的影响很小。

以上仅以单组件两维基准题 VERA_2A 为例,简单地描述了CRANE程序的使用方法,更为详细的使用说明请参阅 用户指南