
#################################################
##
## 这个文件包含了数值相对论程序 AMSS-NCKU 所需要的输入
## 小曲
## 2024/03/19 --- 2024/12/02
##
#################################################

import numpy   ## 导入 numpy 包 

#################################################

## 设置程序运行目录和计算资源

File_directionary   = "xiaoqu_Results_GW150914_test"     ## 程序运行目录
Output_directionary = "output_file"                 ## 存放二进制数据的子目录
MPI_processes       = 32                            ## 想要调用的进程数目

GPU_Calculation     = "no"                          ## 是否开启 GPU 计算，可选 yes 或 no
CPU_Part            = 0.5
GPU_Part            = 0.5

#################################################


#################################################

## 设置程序计算方法

Symmetry                 = "equatorial-symmetry"   ## 系统对称性，可选 equatorial-symmetry、no-symmetry
Equation_Class           = "BSSN"                  ## 设置方程形式，可选 BSSN、Z4C、BSSN-EScalar、BSSN-EM
                                                   ## 注意：GPU 计算仅支持 BSSN
Initial_Data_Method      = "Ansorg-TwoPuncture"    ## 设置初值的方法，可选 Ansorg-TwoPuncture、Lousto-Analytical、KerrSchild-Analytical
Time_Evolution_Method    = "runge-kutta-45"        ## 时间演化方法，可选 runge-kutta-45
Finite_Diffenence_Method = "6th-order"             ## 有限差分方法，可选 2nd-order、4th-order、6th-order、8th-order

#################################################


#################################################

## 设置时间演化信息

Start_Evolution_Time     = 0.0                    ## 起始演化时间
Final_Evolution_Time     = 1500.0                 ## 最终演化时间
Check_Time               = 1000.0
Dump_Time                = 50.0                   ## 每隔一定时间间隔储存数据
D2_Dump_Time             = 300.0
Analysis_Time            = 0.1
Evolution_Step_Number    = 10000000               ## 时间迭代次数
Courant_Factor           = 0.5                    ## Courant 因子（决定每一步时间演化的时间间隔）
Dissipation              = 0.2                    ## 耗散因子

#################################################


#################################################

## 设置多层格点信息

basic_grid_set    = "Patch"                          ## 设定网格类型，可选 Patch 和 Shell-Patch
grid_center_set   = "Vertex"                         ## 网格中心设置，可选 Cell 和 Vertex

grid_level        = 11                                ## 设置格点的总层数
static_grid_level = 6                                ## 设置静态格点的层数
moving_grid_level = grid_level - static_grid_level   ## 可移动格点的层数

analysis_level    = 0
refinement_level  = 4                                ## 从该层开始进行时间细化

grid_maxvalue     =  500.0                           ## 设置最外层格点的坐标最大值
grid_minvalue     = - grid_maxvalue                  ## 设置最外层格点的坐标最小值ֵ

static_grid_number = 96                             ## 设置固定格点每一层每一维数的格点数目
moving_grid_number = 48                              ## 设置可移动格点每一层每一维数的格点数目
shell_grid_number  = [32, 32, 80]                   ## 设置最外层球状网格（shell patch）的格点数目
                                                     ## 以 phi、theta、r 的顺序给定
devide_factor      = 2.0                             ## 设置相邻两层网格分辨率的比例（不要轻易改变）
static_grid_type   = 'Linear'                        ## 设置固定格点的类型，可选 'Linear'
moving_grid_type   = 'Linear'                        ## 设置固定格点的类型，可选 'Linear'

quarter_sphere_number = 64                           ## 1/4 球面积分的格点数目

#################################################


#################################################

## 设置黑洞 puncture （穿刺法）的信息

puncture_number       = 2                                     ## 设置 puncture 的数目

position_BH           = numpy.zeros( (puncture_number, 3) )   ## 初始化每个黑洞的初始位置
parameter_BH          = numpy.zeros( (puncture_number, 3) )   ## 初始化每个黑洞的参数
dimensionless_spin_BH = numpy.zeros( (puncture_number, 3) )   ## 初始化每个黑洞的无量纲自旋
momentum_BH           = numpy.zeros( (puncture_number, 3) )   ## 初始化每个黑洞的动量
## angular_momentum_BH = numpy.zeros( (puncture_number, 3) )  ## 初始化每个黑洞的自旋角动量

puncture_data_set     = "TwoPuncture"                         ## 设置 puncture data 的方式，可选 Manually 和 TwoPuncture

#---------------------------------------------

## 如果设置 puncture data 的方式选为 TwoPuncture，只需要给定黑洞参数，偏心率，距离
## 这一步要与初值中的 Ansorg-TwoPuncture 配合使用，否则会报错

Distance = 10.0
e0       = 0.0

## 设置每个黑洞的参数 (M Q a*)  
## 质量  电荷  无量纲自旋
## 注意，如果设置 puncture data 的方式选为 TwoPuncture，第一个黑洞必须为质量较大的那个
parameter_BH[0] = [ 36.0,  0.0,  0.31 ]   
parameter_BH[1] = [ 29.0,  0.0, -0.46 ]  
# parameter_BH[2] = [ 0.3247293,  0.0,  0.0 ]  # 多黑洞手动补加 

## 设置每个黑洞的无量纲自旋
## 无对称性时 ，需要手动给 3 个方向的自旋角动量
dimensionless_spin_BH[0] = [ 0.0,  0.0,  0.0 ]   
dimensionless_spin_BH[1] = [ 0.0,  0.0,  0.0 ]  
# dimensionless_spin_BH[2] = [ 0.0,  0.0,  0.0 ]   # 多黑洞手动补加

## 注意，如果设置 puncture data 的方式选为 TwoPuncture，则自动调整将较大质量黑洞放在 y 轴正向，将较小质量黑洞放在 y 轴负向
## use Brugmann's convention
##  -----0-----> y
##   -      +     

#---------------------------------------------

## 如果设置 puncture data 的方式选为 Manually，需要手动给定所有黑洞参数

## 设置每个黑洞的初始位置
position_BH[0]  = [  0.0,  +3.6321068,  0.0 ]  
position_BH[1]  = [  0.0,  -3.6321068,  0.0 ] 
# position_BH[2]  = [  0.0,   0.0,   14.5284272 ]  # 多黑洞手动补加  

## 设置每个黑洞的动量信息  
momentum_BH[0]  = [ -0.0613136, 0.0,   0.0 ]
momentum_BH[1]  = [ +0.0613136, 0.0,   0.0 ]
# momentum_BH[2]  = [  0.0,       0.0,  -0.0668610 ]  # 多黑洞手动补加 


#################################################


#################################################

## 设置引力波和探测器的相关信息

GW_L_max        = 4                      ## 引力波最大的 L
GW_M_max        = 4                      ## 引力波最大的 M
Detector_Number = 11                     ## 探测器的数目
Detector_Rmin   = 50.0                   ## 最近探测器的距离
Detector_Rmax   = 150.0                  ## 最远探测器的距离

#################################################


#################################################

## 设置其它参数

AHF_Find       = "no"                    ## 是否开启表观视界计算，可选 yes 或 no

AHF_Find_Every = 24
AHF_Dump_Time  = 20.0

FR_a2          = 3
FR_phi0        = 0.00005  

#################################################


#################################################

## 未来可以考虑加入的选项
## AMSS-NCKU 程序支持，但现在的 python 接口尚未支持
##（还未测试）
## 但不建议用户轻易改动这些选项

## boundary_choice = "BAM-choice"  ## 索莫菲边界条件设定，可选 "BAM-choice" 和 "Shibata-choice"
                                   ## 目前的版本定死为 "BAM-choice"

## gauge_choice  =                 # Gauge condition type
                                   # 0: B^i gauge
                                   # 1: David's puncture gauge
                                   # 2: MB B^i gauge
                                   # 3: RIT B^i gauge
                                   # 4: MB beta gauge (beta gauge not means Eq.(3) of PRD 84, 124006)
                                   # 5: RIT beta gauge (beta gauge not means Eq.(3) of PRD 84, 124006)
                                   # 6: MGB1 B^i gauge
                                   # 7: MGB2 B^i gauge
                                   ## 目前的版本定死为 0 或 1（根据方程不同选择）

## tetrad-type = 2                 # tetradtype 0
                                   # v^a = (x,y,z)
                                   # orthonormal order: v,u,w
                                   # m = (phi - i theta)/sqrt(2) following Frans, Eq.(8) of  PRD 75, 124018(2007)
    
                                   # tetradtype 1
                                   # orthonormal order: w,u,v
                                   # m = (theta + i phi)/sqrt(2) following Sperhake, Eq.(3.2) of  PRD 85, 124062(2012)
    
                                   # tetradtype 2
                                   # v_a = (x,y,z)
                                   # orthonormal order: v,u,w
                                   # m = (phi - i theta)/sqrt(2) following Frans, Eq.(8) of  PRD 75, 124018(2007)
                                   
#################################################
                                   
                                   


