52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
from simulator import *
|
|
|
|
kTiBeg = -100
|
|
kTiEnd = 100
|
|
kSampleNum = 1000
|
|
kStep = (kTiEnd - kTiBeg) / kSampleNum
|
|
kParallelNum=24
|
|
tasks_list = [i for i in np.arange(kTiBeg, kTiEnd, kStep)]
|
|
for i in np.arange(10, 20, 1/1000):
|
|
tasks_list.append(i)
|
|
for i in np.arange(12, 14.2, 1/10000):
|
|
tasks_list.append(i)
|
|
for i in np.arange(13.085,13.095,1/1000000):
|
|
tasks_list.append(i)
|
|
task_list_per_process=[tasks_list[i::kParallelNum] for i in range(kParallelNum)]
|
|
|
|
print(f"len(task_list_per_thread)={len(task_list_per_process)}",file=sys.stderr)
|
|
def ProcessEntryPoint(arg):
|
|
ti_list, process_id = arg
|
|
orbit = GoodOrbit()
|
|
loong = Loong(orbit, 224, mp.mpf("1.0"), mp.mpf("1e-8"))
|
|
max_speed_found=mp.mpf("0.0")
|
|
max_speed_time=0
|
|
last_status = None
|
|
last_ti = ti_list[0]
|
|
for ti in ti_list:
|
|
print(f"calculating time_point={ti}",file=sys.stderr)
|
|
try:
|
|
res = loong.CalcStatusListByTime(mp.mpf(ti), last_status if (last_status and abs(ti-last_ti)<=0.1) else None)
|
|
for node in res:
|
|
if node["v"] > max_speed_found:
|
|
max_speed_found = node["v"]
|
|
max_speed_time = ti
|
|
last_status = res
|
|
last_ti = ti
|
|
except ValueError as e:
|
|
print(f"Error: {e}",file=sys.stdout)
|
|
return max_speed_found, max_speed_time
|
|
|
|
if __name__ == "__main__":
|
|
manager = multiprocessing.Manager()
|
|
task_args_list = [(task_list_per_process[i], i) for i in range(kParallelNum)]
|
|
with multiprocessing.Pool(processes=kParallelNum) as pool:
|
|
res_list=pool.map(ProcessEntryPoint, task_args_list)
|
|
max_speed_found=mp.mpf("0.0")
|
|
max_speed_time=0
|
|
for res in res_list:
|
|
if res[0]>max_speed_found:
|
|
max_speed_found=res[0]
|
|
max_speed_time=res[1]
|
|
valid_head_speed = mp.mpf("1.0") * (mp.mpf("2.0")/max_speed_found)
|
|
print(f"max_speed_found={max_speed_found} at {max_speed_time}, valid_head_speed={valid_head_speed}") |