参考CYCLUS官网:Cyclus — Home (fuelcycle.org)
以下操作在 ubuntu20.04.6 LTS上完成。
一、miniconda3的安装
安装miniconda3,参考Miniconda3的安装、配置和使用。
1. 切换到安装位置,打开终端,输入以下代码:
wget https://mirrors.ustc.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
2. 可将 .bashrc 文件中的conda初始设置注释,添加以下内容:
先进入 .bashrc 文件:
vi ~/.bashrc
添加以下内容:
alias condaac='source ~/miniconda3/bin/activate'
实现 condaac 命令激活conda环境,即让终端进入conda环境。
二、新建虚拟环境
为了避免 Cyclus 的安装破坏Base环境,及便于管理Cyclus,需新建虚拟环境。
condaac
conda create --name cyclus python=3.9
三、安装Jupyter Notebook
为了便于使用Cyclus,借助 Jupyter Notebook交互计算应用程序。
conda activate cyclus
conda install jupyter notebook
四、安装Cyclus
1. 安装
conda install -c conda-forge cycamore
如果出现证书验证方面问题,使用下面命令安装:
conda config --set ssl_verify false
conda install -c conda-forge cycamore
2. 测试
cyclus_unit_tests
cycamore_unit_tests
至此安装完成。
五、安装 Cymetric 包
为了对 cyclus 的输出文件 .sqlite 进行分析,安装 Cymetric 包。
1. 在 https://github.com/cyclus/cymetric 上的 Releases 上下载 Source code(zip) 文件。
2. 进入下载文件所在文件夹,一般为Download,新建终端。
3. 解压zip文件
unzip cymetric-1.6.0.zip
4. 进入完成解压的文件夹,进行安装
cd cymetric-1.6.0
condaac
conda activate cyclus
python setup.py install
六、Cyclus 的使用
1. 在 https://zenodo.org/records/4557613网站上下载 Cyclus案例文件。
输入文件有:input_deployinst.xml、input_oncethrough.xml、input_recycle.xml、input_secondreactor.xml
输出文件有:output_deployinst.sqlite、output_oncethrough.sqlite、output_recycle.sqlite、output_secondreactor.sqlite
以 input_deployinst.xml 和 output_deployinst.sqlite示例:
2. 进入 input_deployinst.xml 所在文件夹内,启动终端,启动 jupyter
condaac
conda activate cyclus
jupyter notebook
3. New -> 新建Notebook
4. 使用 cyclus 计算 input_deployinst.xml
!cyclus input_deployinst.xml -o output_d.sqlite
可将 ouput_d.sqlite 与 output_deployinst.sqlite进行对比验证。
七、cymetric 的使用
可在上面建立的 Notebook中继续操作。
1. 列出 cymetric 的帮助信息:
!cymetric -h
2. 列出 output_d.sqlite 中的数据列表名:
# -l 表示列出 database 中的数据表
!cymetric output_d.sqlite -l
3. 列出某个数据表内容:
使用数据表名进行索引会得到 DataFrame结构的返回值(有些数据表返回 ColumnProxy,没法索引查看),如 Resources[:] 的返回值为 DataFrame对象,可使用 print 函数进行打印。
- 使用 [:] 、 [None] 、 [...] 列出某一数据表的所有内容:
# -e 表示执行代码模式
# 双引号"" 里是python代码,用 分号; 分隔每行代码
!cymetric output_d.sqlite -e "print(Resources[:])"
- 获得 MaterialInfo[:] 的行名和列名
获取行名
!cymetric output_d.sqlite -e "print(Resources[:].index)"
>>
RangeIndex(start=0, stop=5725, step=1)
获取列名
!cymetric output_d.sqlite -e "print(Resources[:].columns)"
>>
Index(['SimId', 'ResourceId', 'ObjId', 'Type', 'TimeCreated', 'Quantity',
'Units', 'QualId', 'Parent1', 'Parent2'],
dtype='object')
- 对 Resources[:] 进一步索引,输出对应内容:
使用 列名字符串 选出对应列,使用 冒号:切片索引 选出对应行。
打印 Resources数据表中 'ResourceId' 列的内容:
# Resources[:][['ResourceId']]返回DataFrame
!cymetric output_d.sqlite -e "print(Resources[:][['ResourceId']])"
>>
ResourceId
0 22
1 24
2 56
3 57
4 59
... ...
5720 13286
5721 13289
5722 13290
5723 13292
5724 13293
[5725 rows x 1 columns]
# Resources[:]['ResourceId']返回Series
!cymetric output_d.sqlite -e "print(Resources[:]['ResourceId'])"
>>
0 22
1 24
2 56
3 57
4 59
...
5720 13286
5721 13289
5722 13290
5723 13292
5724 13293
Name: ResourceId, Length: 5725, dtype: int64
打印 Resources数据表中 前5列 的内容:
!cymetric output_d.sqlite -e "print(Resources[:][:5])"
>>
SimId ResourceId ... Parent1 Parent2
0 e3584b69-d0f0-4655-861e-606b4ea66a7a 22 ... 0 0
1 e3584b69-d0f0-4655-861e-606b4ea66a7a 24 ... 0 0
2 e3584b69-d0f0-4655-861e-606b4ea66a7a 56 ... 22 0
3 e3584b69-d0f0-4655-861e-606b4ea66a7a 57 ... 22 0
4 e3584b69-d0f0-4655-861e-606b4ea66a7a 59 ... 57 0
[5 rows x 10 columns]
4. 使用数据画图
!cymetric output_d.sqlite -e "Resources[:][:10].plot(x='ResourceId', y='Quantity',kind='bar'); plt.savefig('R-Q.jpg')"