Neutron Diffusion
题目描述
该题目研究中子扩散方程的数值计算, 对于二维研究区域 $[0, 1] \times [0, 1]$ , 有以下形式的中子源:
$$ S(x, y) = \left[ \sin(\pi x) \sin(\pi y) + 0.2 x^2 y^3 (1-x) (1-y) \right] \exp\left[ -2 (x-0.5)^2 - 2(y-0.5)^2 \right] $$
你需要完成的任务是对所研究区域划分 $N \times N$ 的网格, 使用有限差分法, 对于 $(N+1) \times (N+1)$ 的网格顶点, 把稳态的中子扩散方程离散为线性方程组, 并使用迭代法求解线性方程组, 得到中子通量 $\phi$ 的分布.

上图为网格划分及节点编号示意图, 输出结果时需按照节点编号以列向量格式输出.
对于二维拉普拉斯算子, 采用五点差分格式进行离散, 使用 $[i, j]$ 表示编号为 $i + j(N+1)$ 的格点, 记 $\mathrm{d} x = \mathrm{d} y = 1 / N$ , 则:
$$ \left(\nabla^2 f\right)_{[i, j]} = \frac{f_{[i-1, j]} + f_{[i+1, j]} + f_{[i, j-1]} + f_{[i, j+1]} -4 f_{[i, j]}}{(\mathrm{d} x)^2} $$
所研究的问题均为第一类边界条件, 令边界处的中子通量为 $0$ .
单群问题
常扩散系数的单群中子扩散方程为:
$$ \frac{\partial n}{\partial t} = \frac{1}{v} \frac{\partial \phi(\vec{r}, t)}{\partial t} = S(\vec{r}, t) + D \nabla^2 \phi(\vec{r}, t) - \Sigma_{\text{a}} \phi(\vec{r}, t) $$
在稳态的条件下, 有
$$ - D \nabla^2 \phi(\vec{r}) + \Sigma_{\text{a}} \phi(\vec{r}) = S(\vec{r}) $$
输入格式
输入共有 2 行.
第 1 行为两个整数 1 N, 其中第一个 1 表示这是单群问题, 第二个 N 为一个方向的网格数目.
第 2 行为两个浮点数 D Sigmaa, 分别表示扩散系数 $D$ 与宏观吸收截面 $\Sigma_{\text{a}}$ .
输出格式
输出为 (N+1)*(N+1) 行, 每行一个浮点数, 第 k 行 ( k 从 0 开始) 即表示编号为 $k$ 的节点的中子通量 $\phi$ .
为了使得你的输出足够准确, 可以使用 %.20lf 之类的格式进行输出.
评分方法
对于离散后的线性方程组 $A \vec{x} = \vec{b}$ , 在评分代码中已经实现了矩阵 $A$ 与向量 $\vec{b}$ 的离散构造, 将会读入你的 $\vec{x}$ , 以相对残差的对数的 $- 0.1$ 倍作为你该测试点的得分, 即
$$ r = \frac{\| \vec{b} - A \vec{x} \|_2}{\| \vec{b} \|_2} \\ \ \\ \text{score} = - 0.1 \times \log_{10}(r) $$
该测试点的得分将会被限制在 $[0, 100]$ 之间.
样例
样例输入
1 4
0.10 0.05
样例输出
0
0
0
0
0
0
0.22197828580345202454
0.32567369699258269522
0.22206878881442054796
0
0
0.32574754698438207479
0.47865121130129034688
0.32600543521690322768
0
0
0.22220490657451671956
0.32615945389535438981
0.22250765543844874816
0
0
0
0
0
0
双群问题
稳态条件下的常扩散系数的双群中子扩散方程为: (这里假定中子源产生的中子都属于快群)
$$ - D_1 \nabla^2 \phi_1(\vec{r}) + \Sigma_{\text{a}1} \phi_1(\vec{r}) + \Sigma_{1\to2} \phi_1(\vec{r}) - \Sigma_{2\to1} \phi_2(\vec{r}) = S(\vec{r}) \\ - D_2 \nabla^2 \phi_2(\vec{r}) + \Sigma_{\text{a}2} \phi_2(\vec{r}) + \Sigma_{2\to1} \phi_2(\vec{r}) - \Sigma_{1\to2} \phi_1(\vec{r}) = 0 $$
输入格式
输入共有 2 行.
第 1 行为两个整数 2 N, 其中第一个 2 表示这是双群问题, 第二个 N 为一个方向的网格数目.
第 2 行为 6 个浮点数 D1 D2 Sigmaa1 Sigmaa2 Sigma12 Sigma21, 分别表示两个群的扩散系数 $D_1, D_2$ , 两个群的宏观吸收截面 $\Sigma_{\text{a}1}, \Sigma_{\text{a}2}$ , 以及两个群之间的散射转移截面 $\Sigma_{1\to2}, \Sigma_{2\to1}$ .
输出格式
输出为 2*(N+1)*(N+1) 行, 每行一个浮点数:
- 对于前 (N+1)*(N+1) 行, 第 k 行 ( k 从 0 开始) 即表示编号为 $k$ 的节点的快群中子通量 $\phi_1$ ;
- 对于后 (N+1)*(N+1) 行, 第 (N+1)*(N+1) + k 行 ( k 从 0 开始) 即表示编号为 $k$ 的节点的热群中子通量 $\phi_2$ ;
为了使得你的输出足够准确, 可以使用 %.20lf 之类的格式进行输出.
评分方法
与单群问题同, 评分代码中的线性方程组采用全耦合方法构建.
样例
样例输入
2 4
0.30 0.08 0.02 0.08 0.12 0.004
样例输出
0
0
0
0
0
0
0.07412864123604447075
0.10875215102551831492
0.07415884268149011693
0
0
0.10877679030881315381
0.15982824851062998883
0.10886282435376219702
0
0
0.07420425393197614683
0.10891420047785149716
0.07430524091497990591
0
0
0
0
0
0
0
0
0
0
0
0
0.00576719794755019798
0.00824836155409322536
0.00576865766902737772
0
0
0.00824934331910744632
0.01180337496612890620
0.00825244685687679357
0
0
0.00577033954100635536
0.00825404515327566105
0.00577343152359541863
0
0
0
0
0
0
说明
- 对于测试点
1,3, 有 $N = 10$ , 每个测试点 20 分; - 对于测试点
2,4, 有 $N = 250$ , 每个测试点 30 分.
物理参数范围:
- $0.10 \le D , D_1 \le 0.40$ ;
- $0.05 \le D_2 \le 0.15$ ;
- $0.01 \le \Sigma_{\text{a}}, \Sigma_{\text{a}1} \le 0.05$ ;
- $0.03 \le \Sigma_{\text{a}2} \le 0.10$ ;
- $0.10 \le \Sigma_{1\to2} \le 0.20$ ;
- $0 < \Sigma_{2\to1} \le 0.01$ .
提示
可以参考示例框架代码.
