def avg_dump_dir(dirpath, rmin, rmax, zmin, zmax, fix_ghosts=False, N2CPU=2, N3CPU=11, nproc=None): "Average dump data in directory. Save 2d files to same directory." print("Mapping dumps in {} from 3d to 2d...".format(dirpath)) fnams = io.get_dumps_full(dirpath) hdr = io.load_hdr(fnams[0]) geom = io.load_geom(hdr) inputs = [(fnam,rmin,rmax,zmin,zmax,fix_ghosts,N2CPU,N3CPU,geom) \ for fnam in fnams] p = Pool(processes=nproc) p.map(_avg_dump_file_worker, inputs)
if MODES[n] == 3: # FAST dvar[0] = 0.476395427447 dvar[1] = 0.635193903263 dvar[2] = -0.102965815319 dvar[3] = -0.316873207561 dvar[5] = 0.359559114174 dvar[6] = -0.359559114174 dvar *= amp # RUN PROBLEM FOR EACH RESOLUTION AND ANALYZE RESULT for m in xrange(len(RES)): print ['./bhlight_' + str(RES[m]), '-p', 'param_template.dat'] call(['./bhlight_' + str(RES[m]), '-p', 'param_template.dat']) dfiles = np.sort(glob.glob('dumps/dump*.h5')) hdr = io.load_hdr(dfiles[-1]) geom = io.load_geom(hdr, recalc=True) dump = io.load_dump(dfiles[-1],geom) X1 = geom['x'][:,:,0] X2 = geom['y'][:,:,0] dvar_code = [] dvar_code.append(dump['RHO'][:,:,0] - var0[0]) dvar_code.append(dump['UU'][:,:,0] - var0[1]) dvar_code.append(dump['U1'][:,:,0] - var0[2]) dvar_code.append(dump['U2'][:,:,0] - var0[3]) dvar_code.append(dump['U3'][:,:,0] - var0[4]) dvar_code.append(dump['B1'][:,:,0] - var0[5]) dvar_code.append(dump['B2'][:,:,0] - var0[6]) dvar_code.append(dump['B3'][:,:,0] - var0[7]) #dvar_sol = []
num_cpus = multiprocessing.cpu_count() os.environ['OMP_NUM_THREADS'] = str(int(np.max([2, num_cpus / num_mpi]))) # RUN EXECUTABLE os.chdir(TMP_DIR) args = ['./bhlight', '-p', 'param_template.dat'] if MPI: bcall(args, str(num_mpi)) else: bcall(args) os.chdir('../') # READ SIMULATION OUTPUT dfiles = np.sort(glob.glob(os.path.join(TMP_DIR, '') + '/dumps/dump*.h5')) Nd = len(dfiles) hdr = io.load_hdr(dfiles[0]) geom = io.load_geom(hdr) dump = io.load_dump(dfiles[-1], geom) nuLnu = dump['nuLnu'] if np.any(np.abs(nuLnu[1:, :, :, :]) >= 1e-15): nuLnu = np.sum(nuLnu, axis=0) else: nuLnu = nuLnu[0] def make_1d(tensor, axis): assert axis in [0, 1, 2] assert len(tensor.shape) == 3 if axis == 0: return np.sum(np.sum(tensor, axis=-1), axis=-1)
import hdf5_to_dict as io import sys preferred_keys = [ 'N1', 'N2', 'N3', 'a', 'M_unit', 'B_unit', 'L_unit', 'Ne_unit' ] if len(sys.argv) != 2: print('ERROR format is') print(' python hdr.py [filename]') sys.exit() fnam = sys.argv[1] hdr = io.load_hdr(fnam) used_keys = [] def print_val(vnam): if vnam in hdr.keys() and vnam not in used_keys: format_string = '%e' if type(hdr[vnam]) is float else '%s' print(vnam, '=', format_string % hdr[vnam]) used_keys.append(vnam) for k in preferred_keys: print_val(k) for k in hdr.keys(): print_val(k)
help=('Number of parallel processe to use. ' + 'If not set, defaults to all available cores.')) args = parser.parse_args() dfold = util.sanitize_path(args.dumpfolder) if not os.path.exists(dfold): print('ERROR Folder ' + dfnam + ' does not exist!') sys.exit() tmpdir = 'FRAMES' util.safe_remove(tmpdir) os.mkdir(tmpdir) dfnams = io.get_dumps_full(dfold) hdr = io.load_hdr(dfnams[0]) geom = io.load_geom(hdr) num_files = len(dfnams) def make_frame(pair): i, d = pair gc.collect() print("frame %d/%d" % (i, num_files)) make_snap(d, args.variable, args.coords, args.size, args.cmap, args.log, os.path.join(tmpdir, 'frame_%08d.png' % i),
os.chdir(TMP_DIR) run_args = ['./bhlight', '-p', 'param_template.dat'] if MPI: NPROC = 4 import psutil NCORE = psutil.cpu_count(logical=False) NTHREADS = (max(NCORE / NPROC, 1)) os.environ['OMP_NUM_THREADS'] = '%d' % NTHREADS bcall(run_args, int(NPROC), stdin=DEVNULL) else: bcall(run_args) os.chdir('../') # load simulation output dumps = sorted(glob.glob(os.path.join(TMP_DIR, '') + '/dumps/dump*.h5')) hdr = io.load_hdr(dumps[0]) geom = io.load_geom(hdr) N1, N2, N3 = [hdr[i] for i in ['N1', 'N2', 'N3']] times = np.empty(len(dumps)) Yes = np.empty((len(dumps), N1, N2)) dump = io.load_dump(dumps[0]) x, y = geom['xf'][:, :, 0], geom['yf'][:, :, 0] #STOPPED EDITING HERE for i, d in enumerate(dumps): dump = io.load_dump(d) times[i] = dump['t'] Yes[i] = dump['Ye'].reshape(N1, N2) times *= hdr['T_unit']
dvar[2] = -0.0832240462505 dvar[3] = -0.224080007379 dvar[4] = -0.224080007379 dvar[5] = 0.406380545676 dvar[6] = -0.203190272838 dvar[7] = -0.203190272838 dvar *= amp # USE DUMPS IN FOLDERS OF GIVEN FORMAT for m in xrange(len(RES)): print '../dumps_' + str(RES[m]) + '_' + str(MODES[n]) os.chdir('../dumps_' + str(RES[m]) + '_' + str(MODES[n])) dfile = np.sort(glob.glob('dump*.h5'))[-1] hdr = io.load_hdr(dfile) geom = io.load_geom(hdr, dfile) dump = io.load_dump(hdr, geom, dfile) X1 = dump['x'] X2 = dump['y'] X3 = dump['z'] dvar_code = [] dvar_code.append(dump['RHO'] - var0[0]) dvar_code.append(dump['UU'] - var0[1]) dvar_code.append(dump['U1'] - var0[2]) dvar_code.append(dump['U2'] - var0[3]) dvar_code.append(dump['U3'] - var0[4]) dvar_code.append(dump['B1'] - var0[5]) dvar_code.append(dump['B2'] - var0[6])
import util import os import matplotlib import matplotlib.pyplot as plt SADW = True if len(sys.argv) < 3: print('ERROR Format is') print(' savg.py [/path/to/dumpfile] [variable] [SADW=True]') sys.exit() path = sys.argv[1] vnam = sys.argv[2] hdr = io.load_hdr(path) geom = io.load_geom(hdr) dump = io.load_dump(path, geom) N1 = hdr['N1'] N2 = hdr['N2'] N3 = hdr['N3'] dx1 = hdr['dx'][1] dx2 = hdr['dx'][2] dx3 = hdr['dx'][3] savg = np.zeros(N1) for i in range(N1): vol = 0 vol = (dump['RHO'][i, :, :] * dx2 * dx3 * geom['gdet'][i, :, :]).sum(axis=-1).sum(axis=-1)
def make_snap(dfnam, vnam, coords, size, cmap, logplot, savefig, label, vmin, vmax, index=None, geom=None): if not os.path.exists(dfnam): print('ERROR File ' + dfnam + ' does not exist!') sys.exit() import matplotlib if savefig is not None and savefig: matplotlib.use('Agg') import matplotlib.pyplot as plt import plot as bplt import hdf5_to_dict as io import numpy as np font = {'size': 16} matplotlib.rc('font', **font) hdr = io.load_hdr(dfnam) if geom is None: geom = io.load_geom(hdr) dump = io.load_dump(dfnam, geom=geom) if not vnam in dump.keys(): print('ERROR Variable ' + vnam + ' is not contained in dump file!') print('Available variables are:') for key in dump.keys(): if type(dump[key]) is np.ndarray: if (len(dump[key].shape) == 3 and dump[key].shape[0] == hdr['N1'] and dump[key].shape[1] == hdr['N2'] and dump[key].shape[2] == hdr['N3']): print(key, end=' ') print('') sys.exit() IS_3D = hdr['N3'] > 1 var = dump[vnam] if index is not None: var = var[..., index] if logplot: var = np.log10(var) if label is None: label = vnam if index is not None: label += '[{}]'.format(index) if IS_3D: if coords == 'mks': fig, (a0, a1) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 1]}, figsize=(12, 6)) elif coords == 'cart': fig, (a0, a1) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 1]}, figsize=(13, 7)) ax = a0 if coords == 'mks': bplt.plot_X1X2(ax, geom, var, dump, cmap=cmap, vmin=vmin, vmax=vmax, cbar=False, label=label, ticks=None, shading='gouraud') elif coords == 'cart': bplt.plot_xz(ax, geom, var, dump, cmap=cmap, vmin=vmin, vmax=vmax, cbar=False, label=label, ticks=None, shading='gouraud') ax.set_xlim([-size, size]) ax.set_ylim([-size, size]) ax = a1 if coords == 'mks': bplt.plot_X1X3(ax, geom, var, dump, cmap=cmap, vmin=vmin, vmax=vmax, cbar=True, label=label, ticks=None, shading='gouraud') elif coords == 'cart': bplt.plot_xy(ax, geom, var, dump, cmap=cmap, vmin=vmin, vmax=vmax, cbar=True, label=label, ticks=None, shading='gouraud') ax.set_xlim([-size, size]) ax.set_ylim([-size, size]) else: if coords == 'mks': fig, ax = plt.subplots(1, 1, figsize=(10, 10)) bplt.plot_X1X2(ax, geom, var, dump, cmap=cmap, vmin=vmin, vmax=vmax, cbar=True, label=label, ticks=None, shading='gouraud') elif coords == 'cart': fig, ax = plt.subplots(1, 1, figsize=(7, 10)) bplt.plot_xz(ax, geom, var, dump, cmap=cmap, vmin=vmin, vmax=vmax, cbar=True, label=label, ticks=None, shading='gouraud') ax.set_xlim([0, size]) ax.set_ylim([-size, size]) if savefig == False: plt.show() else: plt.savefig(savefig, bbox_inches='tight') plt.cla() plt.clf() plt.close()
tstart = float(sys.argv[4]) if len(sys.argv) > 5: tend = float(sys.argv[5]) # LOAD FILES files1 = io.get_dumps_list(path1) files2 = io.get_dumps_list(path2) if len(files1) == 0 or len(files2) == 0: util.warn("INVALID PATH TO DUMP FOLDER") sys.exit(1) frame_dir = "frames_compare_"+movie_type util.make_dir(frame_dir) hdr1 = io.load_hdr(files1[0]) hdr2 = io.load_hdr(files2[0]) geom1 = io.load_geom(hdr1, path1) geom2 = io.load_geom(hdr2, path2) # TODO diags from post? # Load diagnostics from HARM itself diag1 = io.load_log(path1) diag2 = io.load_log(path2) nthreads = util.calc_nthreads(hdr1) if debug: for i in range(len(files1)): plot(i) else: util.run_parallel(plot, len(files1), nthreads)
dumpfile = sys.argv[1] if len(sys.argv) > 3: gridfile = sys.argv[2] var = sys.argv[3] elif len(sys.argv) > 2: gridfile = None var = sys.argv[2] # Optionally take extra name name = sys.argv[-1] if UNITS and var not in ['Tp']: M_unit = float(sys.argv[-1]) if gridfile is not None: hdr = io.load_hdr(dumpfile) geom = io.load_geom(hdr, gridfile) dump = io.load_dump(dumpfile, hdr, geom) else: # Assumes gridfile in same directory hdr, geom, dump = io.load_all(dumpfile) # If we're plotting a derived variable, calculate + add it if var in ['jcov', 'jsq']: dump['jcov'] = np.einsum("...i,...ij->...j", dump['jcon'], geom['gcov'][:, :, None, :, n]) dump['jsq'] = np.sum(dump['jcon'] * dump['jcov'], axis=-1) elif var in ['divE2D']: JE1g, JE2g = T_mixed(dump, 1, 0).mean(axis=-1) * geom['gdet'], T_mixed( dump, 2, 0).mean(axis=-1) * geom['gdet'] face_JE1 = 0.5 * (JE1g[:-1, :] + JE1g[1:, :])