PVPC自动化计算脚本集
本文介绍一套用于原子核配对凝聚变分计算(Projection After Variation of Pair Condensate,简称PVPC)的自动化Shell脚本。该套脚本托管于Gitee代码仓库,可实现从变分优化到角动量投影、再到电磁跃迁计算的完整工作流。
一、主控脚本:全流程自动化计算
以下脚本整合了变分优化、线性代数投影(LAP)以及B(E2)跃迁计算三个核心步骤,仅需四个输入参数即可对sd壳或pf壳中的任意偶偶核进行计算。
#!/bin/bash
# 调用方式: ./master.sh 质子对数 中子对数 壳层 优化次数
# 示例: ./master.sh 1 1 sd 5 对应 Ne-20 核,优化5个配对凝聚态
declare -i Zpair=$1
declare -i Npair=$2
declare shell_label=$3
declare -i opt_count=$4
declare sys_name=p${Zpair}n${Npair}
declare jsp_data="example/${shell_label}/${shell_label}.jsp"
declare int_file="example/${shell_label}/${shell_label}.pn"
declare p_best="output/best-proton.pair"
declare n_best="output/best-neutron.pair"
echo "======================================================================="
echo " 变分优化阶段"
echo "-----------------------------------------------------------------------"
./pvpc.x << EOF
v-wo-Pandya
${sys_name}
${Zpair}
${Npair}
${jsp_data}
xpn
${int_file}
y
y
${opt_count}
EOF
echo "-----------------------------------------------------------------------"
echo " 变分优化完成"
echo "======================================================================="
echo "======================================================================="
echo " 角动量投影阶段"
echo "-----------------------------------------------------------------------"
./pvpc.x << EOF
LAP-wo-Pandya
${sys_name}
${Zpair}
${Npair}
${jsp_data}
xpn
${int_file}
y
1
${p_best} ${n_best}
16
EOF
echo "-----------------------------------------------------------------------"
echo " 角动量投影完成"
echo "======================================================================="
mkdir -p ${shell_label}pairs/
cp ${p_best} ${shell_label}pairs/${sys_name}-best-proton.pair
cp ${n_best} ${shell_label}pairs/${sys_name}-best-neutron.pair
declare p_final=${shell_label}pairs/${sys_name}-best-proton.pair
declare n_final=${shell_label}pairs/${sys_name}-best-neutron.pair
declare -i unit_sel=1
echo "======================================================================="
echo " B(E2) 跃迁计算"
echo "======================================================================="
./pvpc.x << EOF
EMtrans
${sys_name}
${Zpair}
${Npair}
${jsp_data}
xpn
${int_file}
y
1
${p_final} ${n_final}
output/${shell_label}e2.jQt
e
2
1.5 0.5
${unit_sel}
output/${sys_name}.eig
EOF
cp output/${sys_name}.trans ${shell_label}pairs/
执行示例:计算Ne-20核的5个低能配对凝聚态,选取能量最低者进行投影:
chmod +x master.sh
./master.sh 1 1 sd 5
批量计算多个核素时,可编写外层循环脚本:
#!/bin/bash
sleep 18000 # 延迟5小时执行,避开工作时段
date
for (( zp=3; zp<=3; zp++ )); do
for (( np=1; np<=5; np++ )); do
time ./master.sh ${zp} ${np} sd 5
done
done
date
二、线性约束转动脚本
采用线性约束crank方法,最小化 ,相比无约束变分能够探测到更多的局域极小点。
#!/bin/bash
# 调用: ./crank-linear.sh 质子对数 中子对数 壳层 转动频率 优化次数
# 示例: ./crank-linear.sh 2 2 sd 1 5 对应 Mg-24, ω=1, 优化5次
declare -i Zpair=$1
declare -i Npair=$2
declare shell_label=$3
declare omega_val=$4
declare -i opt_num=$5
declare sys_name=p${Zpair}n${Npair}
declare jsp_data="example/${shell_label}/${shell_label}.jsp"
declare int_file="example/${shell_label}/${shell_label}.pn"
echo "======================================================================="
echo " 线性约束转动优化, ω = ${omega_val}"
echo "-----------------------------------------------------------------------"
./pvpc.x << EOF
CrankLinear
${sys_name}
${Zpair}
${Npair}
${jsp_data}
xpn
${int_file}
y
y
${omega_val}
${opt_num}
EOF
echo "-----------------------------------------------------------------------"
echo " 线性约束转动优化完成"
echo "======================================================================="
cp output/best-proton.pair ${shell_label}pairs/${sys_name}.omega=${omega_val}.proton.pair
cp output/best-neutron.pair ${shell_label}pairs/${sys_name}.omega=${omega_val}.neutron.pair
三、独立投影脚本
对已存储在 sdpairs/ 或 pfpairs/ 目录中的配对凝聚态,单独执行角动量投影计算。
#!/bin/bash
# 调用: ./project.sh 质子对数 中子对数 壳层
# 示例: ./project.sh 1 1 sd 对应 Ne-20
declare -i Zpair=$1
declare -i Npair=$2
declare shell_label=$3
declare sys_name=p${Zpair}n${Npair}
declare jsp_data="example/${shell_label}/${shell_label}.jsp"
declare int_file="example/${shell_label}/${shell_label}.pn"
declare p_in=${shell_label}pairs/${sys_name}-best-proton.pair
declare n_in=${shell_label}pairs/${sys_name}-best-neutron.pair
./pvpc.x << EOF
LAP-wo-Pandya
${sys_name}
${Zpair}
${Npair}
${jsp_data}
xpn
${int_file}
y
1
${p_in} ${n_in}
16
EOF
四、电磁跃迁独立计算脚本
基于已有的配对波函数和本征态信息,单独计算四极跃迁强度。
#!/bin/bash
# 调用: ./transition.sh 质子对数 中子对数 壳层
# 示例: ./transition.sh 1 1 sd 对应 Ne-20
declare -i Zpair=$1
declare -i Npair=$2
declare shell_label=$3
declare sys_name=p${Zpair}n${Npair}
declare jsp_data="example/${shell_label}/${shell_label}.jsp"
declare int_file="example/${shell_label}/${shell_label}.pn"
declare p_in=${shell_label}pairs/${sys_name}-best-proton.pair
declare n_in=${shell_label}pairs/${sys_name}-best-neutron.pair
declare -i unit_sel=1
./pvpc.x << EOF
EMtrans
${sys_name}
${Zpair}
${Npair}
${jsp_data}
xpn
${int_file}
y
1
${p_in} ${n_in}
output/${shell_label}e2.jQt
e
2
1.5 0.5
${unit_sel}
output/${sys_name}.eig
EOF
cp output/${sys_name}.trans ${shell_label}pairs/
五、各脚本功能对照
| 脚本名称 | 核心功能 | 输入参数 |
|---|---|---|
| master.sh | 变分优化 + LAP投影 + B(E2)计算 | 质子对数 中子对数 壳层 优化次数 |
| crank-linear.sh | 线性约束转动优化 | 质子对数 中子对数 壳层 转动频率 优化次数 |
| project.sh | 独立角动量投影 | 质子对数 中子对数 壳层 |
| transition.sh | 独立电磁跃迁计算 | 质子对数 中子对数 壳层 |