Files
cumcm2024-code/A/4/seek_max.py
2024-09-07 15:52:12 +08:00

35 lines
1.3 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(0, 10, 0.1):
tasks_list.append(i)
for i in np.arange(5, 10, 5.0/1000):
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")
for ti in ti_list:
print(f"calculating time_point={ti}",file=sys.stderr)
res = loong.CalcStatusListByTime(mp.mpf(ti))
for node in res:
max_speed_found=max(max_speed_found,node["v"])
return max_speed_found
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=max(res_list)
valid_head_speed = mp.mpf("1.0") * (mp.mpf("2.0")/max_speed_found)
print(f"max_speed_found={max_speed_found}, valid_head_speed={valid_head_speed}")