import numpy as np

# 创建一个包含所有材料数据的字典
materials_data = {
    "infinite_homogeneous_material_2G": {
        "total": np.array([0.19665, 0.59616]),
        # 采用二维数组存储多群之间的相互散射,其中[0][1]表示能群0对能群1的散射截面
        "scatter matrix from g to g": np.array([[0.1780, 0.01002], [0.001089, 0.5255]]),
        "fission": np.array([0.006203, 0.1101]),  # 裂变截面
        # 裂变产额,即每个中子引发的裂变反应能够产生多少新的中子
        "nu-fission": np.array([0.006203, 0.1101]),
        "chi": np.array([1, 0.0]),
    },
    "c5g7_UO2_7G": {
        "total": np.array(
            [1.779490e-01, 3.298050e-01, 4.803880e-01, 5.543670e-01,
            3.118010e-01, 3.951680e-01, 5.644060e-01]
        ),
        # 采用二维数组存储多群之间的相互散射,其中[0][1]表示能群0对能群1的散射截面
        "scatter matrix from g to g": np.array(
            [
                [1.275370e-01, 4.237800e-02, 9.437400e-06, 5.516300e-09, 0.0, 0.0, 0.0],
                [0.0, 3.244560e-01, 1.631400e-03 ,3.142700e-09, 0.0, 0.0, 0.0],
                [0.0, 0.0, 4.509400e-01, 2.679200e-03, 0.0, 0.0, 0.0],
                [0.0, 0.0, 0.0, 4.525650e-01, 5.566400e-03, 0.0, 0.0],
                [0.0, 0.0, 0.0, 1.252500e-04, 2.714010e-01, 1.025500e-02, 1.002100e-08],
                [0.0, 0.0, 0.0, 0.0, 1.296800e-03, 2.658020e-01, 1.680900e-02],
                [0.0, 0.0, 0.0, 0.0, 0.0, 8.545800e-03, 2.730800e-01],
            ]
        ),
        "fission": np.array([7.212060E-03, 8.193010E-04, 6.453200E-03,
                            1.856480E-02, 1.780840E-02, 8.303480E-02,
                            2.160040E-01]),

        "nu-fission": np.array([2.005998E-02, 2.027303E-03, 1.570599E-02,
                                4.518301E-02, 4.334208E-02, 2.020901E-01,
                                5.257105E-01]),
        "chi": np.array([5.87910E-01, 4.11760E-01, 3.39060E-04,
                        1.17610E-07, 0., 0., 0.]),
    }
}

# 添加更多材料
materials_data["c5g7_MOX43_7G"] = {
    "total": np.array(
        [
            1.787310e-01,
            3.308490e-01,
            4.837720e-01,
            5.669220e-01,
            4.262270e-01,
            6.789970e-01,
            6.828520e-01,
        ]
    ),
    "scatter matrix from g to g": np.array(
        [
            [1.288760e-01, 4.141300e-02, 8.229000e-06, 5.040500e-09, 0.0, 0.0, 0.0],
            [0.0, 3.254520e-01, 1.639500e-03, 1.598200e-09, 0.0, 0.0, 0.0],
            [0.0, 0.0, 4.531880e-01, 2.614200e-03, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 4.571730e-01, 5.539400e-03, 0.0, 0.0],
            [0.0, 0.0, 0.0, 1.604600e-04, 2.768140e-01, 9.312700e-03, 9.165600e-09],
            [0.0, 0.0, 0.0, 0.0, 2.005100e-03, 2.529620e-01, 1.485000e-02],
            [0.0, 0.0, 0.0, 0.0, 0.0, 8.494800e-03, 2.650070e-01],
        ]
    ),
    "fission": np.array(
        [
            7.62704e-03,
            8.76898e-04,
            5.69835e-03,
            2.28872e-02,
            1.07635e-02,
            2.32757e-01,
            2.48968e-01,
        ]
    ),
    "nu-fission": np.array(
        [
            2.175300e-02,
            2.535103e-03,
            1.626799e-02,
            6.547410e-02,
            3.072409e-02,
            6.666510e-01,
            7.139904e-01,
        ]
    ),
    "chi": np.array(
        [5.87910e-01, 4.11760e-01, 3.39060e-04, 1.17610e-07, 0.0, 0.0, 0.0]
    ),
}

materials_data["c5g7_MOX7_7G"] = {
    "total": np.array(
        [
            1.813230e-01,
            3.343680e-01,
            4.937850e-01,
            5.912160e-01,
            4.741980e-01,
            8.336010e-01,
            8.536030e-01,
        ]
    ),
    "scatter matrix from g to g": np.array(
        [
            [1.304570e-01, 4.179200e-02, 8.510500e-06, 5.132900e-09, 0.0, 0.0, 0.0],
            [0.0, 3.284280e-01, 1.643600e-03, 2.201700e-09, 0.0, 0.0, 0.0],
            [0.0, 0.0, 4.583710e-01, 2.533100e-03, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 4.637090e-01, 5.476600e-03, 0.0, 0.0],
            [0.0, 0.0, 0.0, 1.761900e-04, 2.823130e-01, 8.728900e-03, 9.001600e-09],
            [0.0, 0.0, 0.0, 0.0, 2.276000e-03, 2.497510e-01, 1.311400e-02],
            [0.0, 0.0, 0.0, 0.0, 0.0, 8.864500e-03, 2.595290e-011],
        ]
    ),
    "fission": np.array(
        [
            8.25446e-03,
            1.32565e-03,
            8.42156e-03,
            3.28730e-02,
            1.59636e-02,
            3.23794e-01,
            3.62803e-01,
        ]
    ),
    "nu-fission": np.array(
        [
            2.381395e-02,
            3.858689e-03,
            2.413400e-02,
            9.436622e-02,
            4.576988e-02,
            9.281814e-01,
            1.043200e00,
        ]
    ),
    "chi": np.array(
        [5.87910e-01, 4.11760e-01, 3.39060e-04, 1.17610e-07, 0.0, 0.0, 0.0]
    ),
}

materials_data["c5g7_MOX87_7G"] = {
    "total": np.array(
        [
            1.830450e-01,
            3.367050e-01,
            5.005070e-01,
            6.061740e-01,
            5.027540e-01,
            9.210280e-01,
            9.552310e-01,
        ]
    ),
    "scatter matrix from g to g": np.array(
        [
            [1.315040e-01, 4.204600e-02, 8.697200e-06, 5.193800e-09, 0.0, 0.0, 0.0],
            [0.0, 3.304030e-01, 1.646300e-03, 2.600600e-09, 0.0, 0.0, 0.0],
            [0.0, 0.0, 4.617920e-01, 2.474900e-03, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 4.680210e-01, 5.433000e-03, 0.0, 0.0],
            [0.0, 0.0, 0.0, 1.859700e-04, 2.857710e-01, 8.397300e-03, 8.928000e-09],
            [0.0, 0.0, 0.0, 0.0, 2.391600e-03, 2.476140e-01, 1.232200e-02],
            [0.0, 0.0, 0.0, 0.0, 0.0, 8.968100e-03, 2.560930e-01],
        ]
    ),
    "fission": np.array(
        [
            8.67209e-03,
            1.62426e-03,
            1.02716e-02,
            3.90447e-02,
            1.92576e-02,
            3.74888e-01,
            4.30599e-01,
        ]
    ),
    "nu-fission": np.array(
        [
            2.518600e-02,
            4.739509e-03,
            2.947805e-02,
            1.122500e-01,
            5.530301e-02,
            1.074999e00,
            1.239298e00,
        ]
    ),
    "chi": np.array(
        [5.87910e-01, 4.11760e-01, 3.39060e-04, 1.17610e-07, 0.0, 0.0, 0.0]
    ),
}

materials_data["c5g7_Water_7G"] = {
    "total": np.array(
        [
            1.592060e-01,
            4.129700e-01,
            5.903100e-01,
            5.843500e-01,
            7.180000e-01,
            1.254450e00,
            2.650380e00,
        ]
    ),
    "scatter matrix from g to g": np.array(
        [
            [
                4.447770e-02,
                1.134000e-01,
                7.234700e-04,
                3.749900e-06,
                5.318400e-08,
                0.0,
                0.0,
            ],
            [
                0.0,
                2.823340e-01,
                1.299400e-01,
                6.234000e-04,
                4.800200e-05,
                7.448600e-06,
                1.045500e-06,
            ],
            [
                0.0,
                0.0,
                3.452560e-01,
                2.245700e-01,
                1.699900e-02,
                2.644300e-03,
                5.034400e-04,
            ],
            [0.0, 0.0, 0.0, 9.102840e-02, 4.155100e-01, 6.373200e-02, 1.213900e-02],
            [0.0, 0.0, 0.0, 7.143700e-05, 1.391380e-01, 5.118200e-01, 6.122900e-02],
            [0.0, 0.0, 0.0, 0.0, 2.215700e-03, 6.999130e-01, 5.373200e-01],
            [0.0, 0.0, 0.0, 0.0, 0.0, 1.324400e-01, 2.480700e00],
        ]
    ),
    "fission": np.zeros(7),
    "nu-fission": np.zeros(7),
    "chi": np.zeros(7),
}

materials_data["c5g7_Clad_7G"] = {
    "total": np.array(
        [
            1.30060e-01,
            3.05480e-01,
            3.29910e-01,
            2.69700e-01,
            2.72780e-01,
            2.77940e-01,
            2.95630e-01,
        ]
    ),
    "scatter matrix from g to g": np.array(
        [
            [9.72490e-02, 3.25480e-02, 0.0, 0.0, 0.0, 0.0, 0.0],
            [0.0, 3.03980e-01, 7.72850e-04, 0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 3.24280e-01, 5.94050e-04, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 2.63200e-01, 5.31350e-03, 0.0, 0.0],
            [0.0, 0.0, 0.0, 2.12680e-03, 2.53950e-01, 1.39080e-02, 0.0],
            [0.0, 0.0, 0.0, 0.0, 9.174200e-04, 3.167650e-01, 2.387700e-01],
            [0.0, 0.0, 0.0, 0.0, 0.0, 4.979200e-02, 1.099120e00],
        ]
    ),
    "fission": np.zeros(7),
    "nu-fission": np.zeros(7),
    "chi": np.zeros(7),
}

""" 设置求积组 """
# 定义一个字典来存储各个高斯求积点的角度和权重
gauss_quadrature_sets = {
    4: {
        'angles': np.array([-0.861136, -0.339981, 0.339981, 0.861136]),
        'weights': np.array([0.347855, 0.652145, 0.652145, 0.347855])
    },
    8: {
        'angles': np.array([-0.9602898564975363, -0.7966664774136268,
                             -0.525532409916329, -0.1834346424956498,
                            0.1834346424956498, 0.525532409916329,
                            0.7966664774136268, 0.9602898564975363]),
        'weights': np.array([0.1012285362903768, 0.2223810344533745,
                             0.3137066458778874, 0.362683783378362,
                             0.362683783378362, 0.3137066458778874,
                               0.2223810344533745, 0.1012285362903768])
    },
    16: {
        'angles': np.array([-0.9894009349916499, -0.9445750230732326,
                            -0.8656312023878318, -0.755404408355003,
                            -0.6178762444026438, -0.4580167776572274,
                            -0.2816035507792589, -0.09501250983763744,
                            0.09501250983763744, 0.2816035507792589,
                            0.4580167776572274, 0.6178762444026438,
                            0.755404408355003, 0.8656312023878318,
                            0.9445750230732326, 0.9894009349916499]),
        'weights': np.array([0.02715245941175406, 0.06225352393864778,
                             0.0951585116824929, 0.1246289712555339,
                             0.1495959888165768, 0.1691565193950026,
                             0.1826034150449236, 0.1894506104550685,
                             0.1894506104550685, 0.1826034150449236,
                             0.1691565193950026, 0.1495959888165768,
                             0.1246289712555339, 0.0951585116824929,
                             0.06225352393864778, 0.02715245941175406])
    }
}