.. _section_criticality: 临界计算 ============== 蒙卡临界计算采用裂变源迭代法,即,用当前代产生的裂变源作为下一代的初始源。用户需 要在输入文件中指定用于源迭代的基本参数,包括初始有效增殖因子(keff)、每代中子数 和中子代数,同时还需要指定初始裂变源分布。 在临界计算模块中,用户还可以选择随机数发生器的类型和参数,以及选择并行临界计算的 并行模式。 .. _section_crit_poweriter: 源迭代参数 -------------- .. code-block:: none PowerIter [Keff0 = ] [Population = ] [Batchnum = ] 其中, - **PowerIter**\ 为源迭代输入卡关键词。 - **Keff0**\ 选项卡设置初始有效增殖系数,缺省值为\ **keff0 = 1**\ 。程序要求用户输入的初始有效增殖系数0.1 < keff0 < 10。 - **Population**\ 选项卡设置每代中子数(\ **N**\ ),非活跃代代数 ( M\ :sub:`i` )和总代数( M\ :sub:`t` )。相应地,蒙卡临界计算的 活跃代代数为 M\ :sub:`a ` = M\ :sub:`t` – M\ :sub:`i`),总活跃中子数为 M = N × M\ :sub:`a` 。 - **Batchnum**\ 选项卡用于减少并行临界计算中计数器的归并操作, 将 M\ :sub:`a` 个活跃代压缩为 M\ :sub:`b` 组,每隔 M\ :sub:`a` / M\ :sub:`b` 活跃代进行一次数据归并。缺省值为 M\ :sub:`b` = M\ :sub:`a` 。 .. _section_crit_ufsmesh: UFS网格参数 -------------- .. code-block:: none UfsMesh [UfsType = ] [Scope = ] [Bound = ] [AutoCutWgt = ] 其中, - **UfsMesh**\ 为UFS网格输入卡的关键词。 - **UfsType**\ 选项卡设置UFS方法类型,\ **UfsType = 0**\(默认值)表示不使用UFS方法, \ **UfsType = 1**\ 表示使用均匀裂变源方法,\ **UfsType = 2**\ 表示使用偏倚裂变源方法(由于偏倚裂变源 方法直接采用网格中最大中子数除以对应网格中子数,得到的均匀结果不明显,故不推荐使用) - **Scope**\ 选项卡指定网格在x,y,z方向的数量。特别地,参数为“-1”表示该方向上 只有一层无限大网格。 - **Bound**\ 选项卡指定网格在x,y,z方向的数量。形如“Bound = x_min x_max y_min y_max z_min z_max”。若某方向只有一层网格,\ **Bound**\ 选项卡中对应的参数没有实际意义。 - **AutoCutWgt**\ 选项卡指定是否采用自动改变中子截断权重。若M\ :sub:`t` = 0,则程序设置中子 截断权重为0.01。若M\ :sub:`t` = 1。则程序自动改变中子截断权重,推荐使用M\ :sub:`t` = 1。当 UfsType = 2时,推荐使用 M\ :sub:`t` = 1,否则会有警告报出。 .. _section_crit_initsrc: 初始裂变源 -------------- .. code-block:: none InitSrc [ = {params}] 其中, - **InitSrc**\ 为初始裂变源输入卡的关键词。 - **type**\ 为裂变源类型的关键词,\ **params**\ 为相应参数。RMC支持的初始裂变源 分布包括点源、均匀体源和通用源三类,详见 :numref:`source_table` 。除以上初始源 外,程序还支持用户输入 ``HDF5 = 1`` , 即从 ``convergent_source.h5`` 文件中 读取裂变源参数,以加速源收敛。 .. note:: 该方法通常应用于耦合计算过程中,通过读取上一个迭代步输出的收敛裂变源作为 下一个迭代步的初始源,可以减少源迭代次数,加速源收敛。 .. table:: RMC支持的初始裂变源分布 :name: source_table +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | 关键词 | 说明 | 参数 | +====================+==================================+=======================================================================================+ | **Point** | 孤立点源 | x\ :sub:`1` y\ :sub:`1` z\ :sub:`1` x\ :sub:`2` y\ :sub:`2` z\ :sub:`2` … | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **Slab** | 平行于坐标轴方向的长方体均匀源 | x\ :sub:`min` x\ :sub:`max` y\ :sub:`min` y\ :sub:`max` z\ :sub:`min` z\ :sub:`max` | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **Sph** | 球体均匀源 | x y z R | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **Cyl/x** | 平行于x轴的圆柱体均匀源 | y z R x\ :sub:`min` x\ :sub:`max` | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **Cyl/y** | 平行于y轴的圆柱体均匀源 | x z R y\ :sub:`min` y\ :sub:`max` | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **Cyl/z** | 平行于z轴的圆柱体均匀源 | x y R z\ :sub:`min` z\ :sub:`max` | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **ExternalSource** | 通用源 | x | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ | **HDF5** | HDF5收敛裂变源 | 1 | +--------------------+----------------------------------+---------------------------------------------------------------------------------------+ .. _section_crit_rng: 通用源的外源子程序 --------------------------------------------- 当需要更为自由的通用源描述时,可以使用外源子程序。这一部分的输入卡为: .. code-block:: none SOURCESUB [SOURCE = ] [PTMOD = ] 具体说明见固定源计算的外源子程序一节。注意该卡的定义必须在 **InitSrc**\ 卡之后,且只在选择通用源 **ExternalSource** 时使用。 随机数发生器 ---------------- RMC含有三种不同类型的随机数发生器。对一般用户而言,建议使用默认的随机数发生器类 型和参数。高级用户可能需要使用特定的随机数参数,例如,对同一算例使用不同的随机数 种子来获得独立的计算结果。RMC提供了定制随机数发生器的输入卡: .. code-block:: none RNG [Type = ] [Seed = ] [Stride = ] 其中, - **RNG**\ 为随机数发生器输入卡的关键词。 - **Type**\ 选项卡指定随机发生器的类型,\ **Type = 1**\ 为48-bit乘法线性同余法 随机数发生器, **Type = 2**\ (缺省值)为63-bit乘法线性同余法随机数发生器, \ **Type = 3**\ 为63-bit混合线性同余法随机数发生器, \ **Type = 4**\ 为64-bit乘法线性同余法随机数发生器,\ **Type = 5**\ 为128-bit 随机数发生器。 - **Seed**\ 选项卡指定随机数发生器的初始化种子,可以是任意正奇数,缺省值为 \ **Seed = 1**\ 。 - **Stride**\ 选项卡用于并行计算时为每个中子历史分配的分段随机数的长度,只建议 高级用户使用。缺省值为\ **Stride = 10000**\ 。 .. _section_crit_cutoff: 截断条件 ---------------- .. code-block:: none CutOff [MaxLost=] [MinWeight=] [MaxWeight=] 其中, - **CutOff**\ 为截断条件输入卡的关键词。 - **MaxLost**\ 选项卡指定程序允许丢失的最大粒子数,缺省值为 10。 - **MinWeight**\ 选项卡指定输运过程中的权重下限,**minWeightN**\ 指定中子的 权重下限,缺省值为0.25,**minWeightP**\ 指定光子的权重下限,缺省值为0.6。 - 在权窗减方差功能开启后,此处输入无效 - **MaxWeightP**\ 选项卡指定光子在输运过程中的权重上限,缺省值为1.4。 .. _section_crit_parallelbank: 并行临界计算模式 -------------------- 在并行临界计算中,考虑到负载平衡,需要对各个进程上的裂变源中子进行收集并重新分 配。传统的蒙卡程序一般采用主从(master-slave)模式,收集和分配的效率较低。RMC采 用对等模式(slave-slave),提高了并行效率。选择并行临界计算模式的输入卡为: .. code-block:: none ParallelBank 其中, - **ParallelBank**\ 为并行临界计算模式输入卡的关键词。 - **flag**\ 指定并行模式。\ **flag = 0**\ 为主从模式,\ **flag = 1**\ (缺省值)为对等模式。 裂变矩阵法求解临界伴随通量 ------------------------------ .. code-block:: none MGAdjFisMatrix [Energy=] [Scope=] [Bound=] 其中, - **MGAdjFisMatrix**\ 为裂变矩阵法求解临界伴随通量输入卡的关键词。 - **Energy**\ 选项卡指定伴随通量的能量分界点。 - **Scope**\ 选项卡指定网格在x,y,z方向的数量。特别地,参数为“-1”表示该方向上 只有一层无限大网格 (注意:在Universe重复几何中的Scope选项卡当中,参数为1表示 该方向上只有一层无限大网格)。 - **Bound**\ 选项卡指定网格在x,y,z方向的边界范围,形如“Bound = x_min x_max y_min y_max z_min z_max”。若某方向只有一层网格, \ **Bound**\ 选项卡中对应的参数没有实际意义。 另外,使用裂变矩阵求解临界伴随通量时需要在源收敛模块中写上相同几何网格的裂变矩阵 逐代输出计数结果 ---------------------- .. code-block:: none Outputcyc [num] 这里**Outputcyc**选项指定开启并设置临界计算中逐代输出计数器结果的代数,[num]中定义 每隔多少代输出一次计数器结果。如需对每代输出的计数结果进行统计检验,则还需要在计数器选 项卡中开启统计检验开关。 临界计算模块输入示例 ------------------------ .. code-block:: none CRITICALITY PowerIter Population = 5000 30 100 // keff0 = 1.0 InitSrc point = 0.0 0.0 0.0 0.5 0.5 0.0 -0.5 -0.5 0.0 RNG type = 3 seed = 12345 stride = 10000 ParallelBank 1 在上面的临界计算模块中,\ **PowerIter**\ 输入卡指定每代粒子数为5000,跳过30代, 一共模拟100代;初始有效增殖系数为缺省值,即1.0。\ **InitSrc**\ 输入卡指定了初始 源的类型为点源,位置为(0,0,0)、(0.5,0.5,0)和(-0.5,-0.5,0),裂变源将 在这三个位置随机产生。\ **RNG**\ 输入卡指定了随机数类型为64-bit混合线性同余法随 机数发生器,初始随机数种子为12345,为每个粒子分配的随机数长度为10000。 \ **ParallelBank**\ 输入卡表示在并行计算中使用对等模式收集和分配裂变源。