12 rank = int(os.environ[
'OMPI_COMM_WORLD_RANK'])
13 c = ch.carmaWrap_context()
14 c.set_active_device(rank % c.get_ndevice())
19 from mpi4py
import MPI
20 import hdf5_util
as h5u
23 comm_size = comm.Get_size()
24 rank = comm.Get_rank()
26 print(
"TEST SHESHA\n closed loop with MPI")
28 if (len(sys.argv) != 2):
29 error =
'command line should be:"python test.py parameters_filename"\n with "parameters_filename" the path to the parameters file'
30 raise Exception(error)
33 param_file = sys.argv[1]
34 if (param_file.split(
'.')[-1] == b
"py"):
35 filename = param_file.split(
'/')[-1]
36 param_path = param_file.split(filename)[0]
37 sys.path.insert(0, param_path)
38 exec(
"import %s as config" % filename.split(
".py")[0])
39 sys.path.remove(param_path)
40 elif (param_file.split(
'.')[-1] == b
"h5"):
41 sys.path.insert(0, os.environ[
"SHESHA_ROOT"] +
"/data/par/par4bench/")
42 import scao_sh_16x16_8pix
as config
43 sys.path.remove(os.environ[
"SHESHA_ROOT"] +
"/data/par/par4bench/")
44 h5u.configFromH5(param_file, config)
46 raise ValueError(
"Parameter file extension must be .py or .h5")
48 print(
"param_file is", param_file)
50 if (hasattr(config,
"simul_name")):
51 if (config.simul_name
is None):
54 simul_name = config.simul_name
57 print(
"simul name is", simul_name)
60 if (simul_name == b
""):
64 param_dict = h5u.params_dictionary(config)
65 matricesToLoad = h5u.checkMatricesDataBase(os.environ[
"SHESHA_ROOT"] +
"/data/",
71 wfs, tel = ao.wfs_init(config.p_wfss, config.p_atmos, config.p_tel, config.p_geom,
72 config.p_target, config.p_loop, comm_size, rank, config.p_dms)
76 atm = ao.atmos_init(c, config.p_atmos, config.p_tel, config.p_geom, config.p_loop,
77 rank=rank, load=matricesToLoad)
81 dms = ao.dm_init(config.p_dms, config.p_wfss, wfs, config.p_geom, config.p_tel)
85 tar = ao.target_init(c, tel, config.p_target, config.p_atmos, config.p_geom,
86 config.p_tel, config.p_dms)
90 rtc = ao.rtc_init(tel, wfs, config.p_wfss, dms, config.p_dms, config.p_geom,
91 config.p_rtc, config.p_atmos, atm, config.p_tel, config.p_loop,
92 clean=clean, simul_name=simul_name, load=matricesToLoad)
94 if not clean
and rank == 0:
95 h5u.validDataBase(os.environ[
"SHESHA_ROOT"] +
"/data/", matricesToLoad)
99 print(
"====================")
101 print(
"====================")
102 print(
"objects initialzed on GPU:")
103 print(
"--------------------------------------------------------")
110 print(
"----------------------------------------------------")
111 print(
"iter# | S.E. SR | L.E. SR | Est. Rem. | framerate")
112 print(
"----------------------------------------------------")
130 for t
in range(config.p_target.ntargets):
131 tar.atmos_trace(t, atm, tel)
133 for w
in range(len(config.p_wfss)):
134 wfs.sensors_trace(w,
"all", tel, atm, dms)
136 for w
in range(len(config.p_wfss)):
137 wfs.sensors_compimg(w)
138 wfs.gather_bincube(w)
142 rtc.applycontrol(0, dms)
144 if ((i + 1) % 50 == 0):
147 """ FOR DEBUG PURPOSE
153 screen=atm.get_screen(0.)
155 im=tar.get_image(0,"se")
156 im=np.roll(im,im.shape[0]/2,axis=0)
157 im=np.roll(im,im.shape[1]/2,axis=1)
159 #sh=wfs.get_binimg(0)
161 dm=dms.get_dm("pzt",0.)
163 f1=turbu.matshow(screen,cmap='Blues_r')
164 f2=image.matshow(im,cmap='Blues_r')
165 #f3=shak.matshow(sh,cmap='Blues_r')
166 f4=defMir.matshow(dm)
171 v=rtc.get_voltages(0)
173 sh_file="dbg/shak_"+str(i)+"_np_"+str(comm.Get_size())+".npy"
174 im_file="dbg/imag_"+str(i)+"_np_"+str(comm.Get_size())+".npy"
175 dm_file="dbg/DM_"+str(i)+"_np_"+str(comm.Get_size())+".npy"
176 s_file="dbg/cent_"+str(i)+"_np_"+str(comm.Get_size())+".npy"
177 c_file="dbg/comm_"+str(i)+"_np_"+str(comm.Get_size())+".npy"
178 v_file="dbg/volt_"+str(i)+"_np_"+str(comm.Get_size())+".npy"
188 strehltmp = tar.get_strehl(0)
189 print(
"%5d" % (i + 1),
" %1.5f" % strehltmp[0],
190 " %1.5f" % strehltmp[1])
193 print(rank,
"| loop execution time:", t1 - t0,
" (", n,
"iterations), ",
194 (t1 - t0) / n,
"(mean) ", n / (t1 - t0),
"Hz")
197 loop(config.p_loop.niter)