TRANSP 软件使用学习
TRANSP 软件使用学习
关于 TRANSP 软件的简单介绍
TRANSP 是美国普林斯顿大学等离子体物理实验室(PPPL)开发的一款为了进行托卡马克实验数据分析的程序,是目前世界范围内应用最广泛的托卡马克实验数据分析程序之一。能够进行托卡马克非圆截面磁位型下 1½ 维度的输运与约束分析,以及托卡马克数据的诊断模拟。(这一段就是到处抄来的,反正大差不差,主要就是用来干这些事情的,不了解的人估计也不会用到这些软件)。
值得一提的是,本文是根据运行在等离子体所的集群 SHENMA 服务器上的 TRANSP 软件进行学习的,所以有可能并不适用所有的情况。
使用准备
在开始使用 TRANSP 软件之前需要准备软件所需的数据文件,因为这个软件开发的时候使用名为 ufile
的文件格式,这里我们可能需要用到一个名为 ufileGen
以及 scrunch2
的小程序来完成文件的准备工作。为了能够将这个软件完整地运行起来,至少需要用到的数据包括 ip, vloop, R*Bt 以及 ne, te, ti 等,其中前面三种为一维数据,后面三种为二维数据,另外还需要磁场位形数据,一般是 gfile
文件。
一维或者二维数据文件
首先需要准备一个 .txt
格式的文本文件(实际上格式应该也不重要,只要是文本文件就可以,比如说 .dat
文件)。文件内容应该按照以下的格式存放数据:
- 第一行为时间点
- 第二行开始为正式数据,其中第一列是数据的径向坐标位置,然后是对应时间点,坐标点上的物理量数据
- 要求时间跨度合适(将软件计算的时间包括在内),采样率合适
- 如果是一维数据则直接第一列时间点,第二列为时间对应的物理量数据
具体的操作可以参考下面的 gif 图片:
最后得到的数据文件 ufile
格式为:
磁场位型数据
一般来说我们用的最多的是 gfile
类型的磁场位形数据,因此需要用到名为 scrunch2
的程序进行格式转换。将所需要的磁场位形数据拷贝到目录中,并建立一个名为 index.dat
的只是文件,给程序指示不同时间点的磁场位形文件是哪一个(以及文件储存的路径!!!),如下图所示:
值得注意的是配置运行 TRANSP 软件的步骤需要在名为
Singularity
的容器中进行,而我们需要准备的ufile
文件中,一二维数据文件可以直接在容器外面用相关的小程序直接进行,但是平衡文件的转化程序scrunch2
需要进入到容器中之后才能使用。
配置环境变量
为了能够顺利的进入容器,这里需要对我们神马集群上的账号进行环境变量的配置,在 home 目录下打开 .bashrc
文件,将其中的内容改为:1
2
3
4
5
6
7
8
9
10
11 .bashrc
Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
User specific aliases and functions
######module for transp singularity container
export SINGULARITY_TMPDIR=/scratch/lijc/transp/tmp
ulimit -l unlimited
ulimit -s unlimited
其中 lijc
记得换成自己的账号名。这个意思是将 singularity
的临时文件保存到有自己可操作权限的文件夹中。
进行完上述操作后,进入我们存放数据的文件夹中,在神马上有一个专门用于存放 TRANSP 运行文件的文件夹,我这边的示例为:/gpfs/scratch/lijc/transp/Runs/EAST/11473
,lijc
对应你自己的账号名,Runs
中存放需要运行的数据,实际上上文存放临时文件的位置也是在和 Runs
并列的 tmp
文件夹中。数据应该尽量按照装置和炮号放置在不同目录下。
配置并进入容器
首先切换到 110 节点,实测不切换的话是进入不了容器的,会提示找不到文件的位置。1
ssh login110
然后进入存放数据的文件夹,加载需要使用的 modules 并进入容器配置:1
2
3
4cd /gpfs/scratch/lijc/transp/Runs/XXXX/XXXXX
module use /gpfs/fuyun/modules/all
module load singularity/3.8.1-Go-1.14.1
singularity run --app environ /gpfs/fuyun/containers/singularity/transp_21.2.sif
这里 singularity 也可以使用 21.4 版本的 TRANSP ,但是这个版本的 scrunch2
工具不知道为什么使用不了所以推荐 21.2 版本。进入容器后会让你进行交互,通过以下的配置(我自己的例子)可以生成一个执行程序的环境配置文件 transp-bashrc
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21[lijc@login110 11473]$ singularity run --app environ /gpfs/fuyun/containers/singularity/transp_21.2.sif
INFO: Converting SIF file to temporary sandbox...
Singularity container for TRANSP v21.2.
app: environ
Enter RESULTDIR path: /scratch/transp/result/lijc/
Enter DATADIR path: /scratch/lijc/transp/data
Enter TMPDIR path: /scratch/lijc/transp/tmp
Use standard ADAS table [y/n]? n
Enter ADAS path: /opt/adas
Use standard PREACT table [y/n]? n
Enter PREACT path: /opt/preact
Set NPROCS: 8
Set NBI_NPROCS: 8
Set NTOR_NPROCS: 0
Set NPTR_NPROCS: 0
Set NGEN_NPROCS: 0
Set NCQL3D_NPROCS: 0
Finished configuring TRANSP environment.
INFO: Cleaning up image...
ERROR: failed to delete container image tempDir /scratch/lijc/transp/tmp/rootfs-689595348: unlinkat /scratch/lijc/transp/tmp/rootfs-689595348/root/root/.tcshrc: permission denied
[lijc@login110 11473]$
下面那个 ERROR 可以不用管,不影响使用。
随后将这个环境配置文件以当前目录并进入容器内部:1
2mv ~/transp-bashrc .
singularity run -B `pwd`:`pwd` -B /opt/tsce4/:/opt/tsce4 -B /project/transp/public/transp/codesys/pbs:/opt/transp/codesys/pbs -B /scratch/lijc/transp:/scratch/lijc/transp -B /scratch/transp/result:/scratch/transp/result /gpfs/fuyun/containers/singularity/transp_21.2.sif
记得将 lijc
改成自己的用户名。此时,如果还没有转换过平衡文件需要用 scrunch2
转化平衡文件。
打开准备好的 namelist 文件( xxxxxTR.DAT ),修改选项,注意文件和数据的路径(一般来说是第二行,不排除有其他指定的位置)要修改到自己的路径,因为一般是拷贝的别人的 namelist 文件,很多地方都需要修改,注意不要遗漏。准备好之后开始在容器内打包可执行文件:1
2
3
4
5
6
7
8
9source transp-bashrc # 使环境配置生效
pretr MPI XXXXXXXX # 确认炮号,检查文件
trdat XXXXXXXX # 生成统一的物理量文件
w
q
label XXXXXXXX # 建立连接
copy_expert_for XXXXXXXX
uplink XXXXXXXXtr nolib # 生成可执行文件
exit
最后将 transp-exec.sh
文件中的炮号改成自己使用的炮号,再提交 transp-qsub-once.psb
文件的任务就可以执行 TRANSP 软件了。1
2qsub transp-qsub-once.psb
qstat