zoukankan      html  css  js  c++  java
  • 写一个脚本,循环运行壳模型程序 bigstick.x,收集结果

    BigStickPublick 可以从 github 上下载:https://github.com/cwjsdsu/BigstickPublick
    在 BigStickPulick 路径下,准备好 usdb.sp 和 usdbpn.int (upn格式),编写脚本跑遍 sd 壳所有偶偶核的能谱:

    #!/bin/bash
    
    # calculate spectrum and wavefunctions
    # generate proper input file, and run bigstick
    
    rm ../input/p*  # delete input files, as initialization
    
    echo -n "Start running. "
    echo $(date)
    for(( pN=0; pN<=6; pN++ ))
    do
            for(( nN=$pN; nN<=6; nN++ ))
            do
                    Np=$(($pN*2))
                    Nn=$(($nN*2))
                    echo "Np=$Np, Nn=$Nn"
                    filename="../input/p"$Np"n"$Nn"_cin_bigstick.txt"       # input file
                    rm $filename
                    touch $filename  # 准备一个 bigstick 的 std 输入文件
                    echo "e">>$filename                                     # calculate spectrum
                    echo "../output/p"$Np"n"$Nn>>$filename                  # output file name
                    echo "usdbpn">>$filename                                # usdbpn.sp
                    echo $Np"  "$Nn>>$filename                              # Np Nn values
                    echo "0">>$filename                             # M=0
                    echo "upn">>$filename                                   # format of interaction file
                    echo "usdbpn">>$filename                                # interaction file
                    echo "1 18 $(($Np+$Nn+16)) 0.3">>$filename              # scaling
                    echo "1 1 1 1 1">>$filename                             # scaling
                    echo "end">>$filename                                   # no more interactions
                    echo "ld">>$filename                                    # lanczos default
                    echo "5 2000">>$filename                                # keep 5 states, at most 2000 iterations
                    time ./bigstick.x < $filename                           # run bigstick
            done
    done
    

    这个脚本自动生成一个 ../input/pxnx_cin_bigstick.txt 的输入文件,然后执行 time ./bigstick.x < $filename这一句,跑 bigstick 程序,输出能谱到 ../output/pxnx.res,文件中的内容是如下格式的:

      BIGSTICK Version 7.8.4 Apr  2018
      single-particle file = usdbpn
               4           4
               0 +
             120  iterations
    
      State      E        Ex         J       T
        1    -87.10445   0.00000    -0.000   0.000
        2    -85.60215   1.50230     2.000   0.000
        3    -82.98830   4.11615     2.000   0.000
        4    -82.73201   4.37243     4.000   0.000
        5    -82.03408   5.07037     3.000   0.000
    

    下面的函数遍历 sd 壳偶偶核的 ../output/pxnx.res 文件,进行基态能量提取。因为壳模型相互作用具有同位旋对称性,所以只需要计算 (N >= Z) 的核,然后提取两个镜像对称核的(相同的)基态能量即可。

    void GetSMEgs( double ** SMEgs ){
            double Egs;
            string reshead = "../p", restail=".res", res;
            for(int Np = 0; Np <=12; Np +=2 ){
                    for(int Nn = Np; Nn <= 12; Nn +=2 ){
                            res = reshead;
                            if( Np < 10 ) res += (char)(48+Np);
                            else res = res + (char)(48 + Np/10) + (char)(48 + Np%10);
                            res += "n";
                            if( Nn < 10 ) res += (char)(48+Nn);
                            else res = res + (char)(48 + Nn/10) + (char)(48 + Nn%10);
                            res += restail;
                            cout<<"Np = "<<Np<<", Nn = "<<Nn<<", res = "<<res<<endl;
    
                            double Egs;
                            ifstream fin(res);
                            stringstream strm; string line, headword;
                            while( !fin.eof() && headword != "State" ){
                                    getline(fin, line); strm.clear(); strm.str(line); strm>>headword;
                            }
                            getline(fin, line); strm.clear(); strm.str(line); strm>>headword >> Egs;
                            fin.close();
    
                            cout<<"Egs = "<<Egs<<endl;
                            SMEgs[ Np/2 ][ Nn/2 ] = Egs;
                            SMEgs[ Nn/2 ][ Np/2 ] = Egs;
                    }
            }
    }
    

    这样就得到了壳模型 usdb sd 壳所有偶偶核基态能量,都储存在 SMEgs[ Np/2 ][ Nn/2 ] 里面。

  • 相关阅读:
    Git使用方法
    设计模式之原型模式
    php基础查找算法
    php基础排序算法
    设计模式之工厂模式
    设计模式之代理模式
    设计模式之装饰者模式
    设计模式之六大原则
    设计模式之策略模式
    设计模式之简单工厂模式
  • 原文地址:https://www.cnblogs.com/luyi07/p/15329714.html
Copyright © 2011-2022 走看看