def thetav(data, k, j, i): return SAM.theta_v(data['p'][k, numpy.newaxis, numpy.newaxis]*100., data['TABS'][k, j, i], data['QV'][k, j, i]/1000., data['QN'][k, j, i]/1000., 0.).mean()
def main(filename): time_step = mc.time_picker(filename) # Load all the data needed to calculation core, clouds, updrafts, etc # at the current time_step. nc_file = Dataset(filename) tabs_field = nc_file.variables["TABS"][0, :].astype(double) qv_field = nc_file.variables["QV"][0, :].astype(double) / 1000.0 qn_field = nc_file.variables["QN"][0, :].astype(double) / 1000.0 p_field = nc_file.variables["p"][:].astype(double) * 100.0 cloud_field = qn_field > 0.0 thetav_field = SAM.theta_v(p_field[:, numpy.newaxis, numpy.newaxis], tabs_field, qv_field, qn_field, 0.0) buoy_field = thetav_field > (thetav_field.mean(2).mean(1))[:, numpy.newaxis, numpy.newaxis] u_field = nc_file.variables["U"][0, :].astype(double) u_field[:, :-1, :] += u_field[:, 1:, :] u_field[:, -1, :] += u_field[:, 0, :] u_field = u_field / 2.0 v_field = nc_file.variables["V"][0, :].astype(double) v_field[:, :, :-1] += v_field[:, :, 1:] v_field[:, :, -1] += v_field[:, :, 0] v_field = v_field / 2.0 # print "Load w" w_field = nc_file.variables["W"][0, :].astype(double) w_field[:-1, :, :] += w_field[1:, :, :] w_field[:-1, :, :] = w_field[:-1, :, :] / 2.0 up_field = w_field > 0.0 core_field = up_field & buoy_field & cloud_field # print "Load plume" tr_field = nc_file.variables["TR01"][0, :].astype(double) x = nc_file.variables["x"][:].astype(double) y = nc_file.variables["y"][:].astype(double) z = nc_file.variables["z"][:].astype(double) nc_file.close() tr_mean = tr_field.reshape((len(z), len(y) * len(x))).mean(1) tr_stdev = numpy.sqrt(tr_field.reshape((len(z), len(y) * len(x))).var(1)) tr_min = 0.05 * numpy.cumsum(tr_stdev) / (numpy.arange(len(tr_stdev)) + 1) # plume_field = (tr_field > numpy.max(numpy.array([tr_mean + tr_stdev, tr_min]), 0)[:, numpy.newaxis, numpy.newaxis]) & up_field plume_field = tr_field > numpy.max(numpy.array([tr_mean + tr_stdev, tr_min]), 0)[:, numpy.newaxis, numpy.newaxis] save_file = Dataset("%s/tracking/cloudtracker_input_%08g.nc" % (mc.data_directory, time_step), "w") save_file.createDimension("x", len(x)) save_file.createDimension("y", len(y)) save_file.createDimension("z", len(z)) xvar = save_file.createVariable("x", "f", ("x",)) yvar = save_file.createVariable("y", "f", ("y",)) zvar = save_file.createVariable("z", "f", ("z",)) corevar = save_file.createVariable("core", "i", ("z", "y", "x")) condvar = save_file.createVariable("condensed", "i", ("z", "y", "x")) plumevar = save_file.createVariable("plume", "i", ("z", "y", "x")) uvar = save_file.createVariable("u", "f", ("z", "y", "x")) vvar = save_file.createVariable("v", "f", ("z", "y", "x")) wvar = save_file.createVariable("w", "f", ("z", "y", "x")) xvar[:] = x[:] yvar[:] = y[:] zvar[:] = z[:] corevar[:] = core_field[:] condvar[:] = cloud_field[:] plumevar[:] = plume_field[:] uvar[:] = u_field[:] vvar[:] = v_field[:] wvar[:] = w_field[:] save_file.close()