def _quantities2csv(quantities, point_quantities, centroids, point_i): points_list = [] for quantity in quantities: #core quantities that are exported from the interpolator if quantity == 'stage': points_list.append(point_quantities[0]) if quantity == 'elevation': points_list.append(point_quantities[1]) if quantity == 'xmomentum': points_list.append(point_quantities[2]) if quantity == 'ymomentum': points_list.append(point_quantities[3]) #derived quantities that are calculated from the core ones if quantity == 'depth': points_list.append(point_quantities[0] - point_quantities[1]) if quantity == 'momentum': momentum = sqrt(point_quantities[2]**2 + point_quantities[3]**2) points_list.append(momentum) if quantity == 'speed': #if depth is less than 0.001 then speed = 0.0 if point_quantities[0] - point_quantities[1] < 0.001: vel = 0.0 else: if point_quantities[2] < 1.0e6: momentum = sqrt(point_quantities[2]**2 + point_quantities[3]**2) vel = momentum / (point_quantities[0] - point_quantities[1]) else: momentum = 0 vel = 0 points_list.append(vel) if quantity == 'bearing': points_list.append(calc_bearing(point_quantities[2], point_quantities[3])) if quantity == 'xcentroid': points_list.append(centroids[point_i][0]) if quantity == 'ycentroid': points_list.append(centroids[point_i][1]) return points_list
def _quantities2csv(quantities, point_quantities, centroids, point_i): points_list = [] for quantity in quantities: #core quantities that are exported from the interpolator if quantity == 'stage': points_list.append(point_quantities[0]) if quantity == 'elevation': points_list.append(point_quantities[1]) if quantity == 'xmomentum': points_list.append(point_quantities[2]) if quantity == 'ymomentum': points_list.append(point_quantities[3]) #derived quantities that are calculated from the core ones if quantity == 'depth': points_list.append(point_quantities[0] - point_quantities[1]) if quantity == 'momentum': momentum = sqrt(point_quantities[2]**2 + point_quantities[3]**2) points_list.append(momentum) if quantity == 'speed': #if depth is less than 0.001 then speed = 0.0 if point_quantities[0] - point_quantities[1] < 0.001: vel = 0.0 else: if point_quantities[2] < 1.0e6: momentum = sqrt(point_quantities[2]**2 + point_quantities[3]**2) vel = momentum / (point_quantities[0] - point_quantities[1]) else: momentum = 0 vel = 0 points_list.append(vel) if quantity == 'bearing': points_list.append( calc_bearing(point_quantities[2], point_quantities[3])) if quantity == 'xcentroid': points_list.append(centroids[point_i][0]) if quantity == 'ycentroid': points_list.append(centroids[point_i][1]) return points_list
def _generate_figures(plot_quantity, file_loc, report, reportname, surface, leg_label, f_list, gauges, locations, elev, gauge_index, production_dirs, time_min, time_max, time_unit, title_on, label_id, generate_fig, verbose): """ Generate figures based on required quantities and gauges for each sww file """ from os import sep, altsep, getcwd, mkdir, access, F_OK, environ if generate_fig is True: from pylab import ion, hold, plot, axis, figure, legend, savefig, \ xlabel, ylabel, title, close, subplot if surface is True: import pylab as p1 import mpl3d.mplot3d as p3 if report == True: texdir = getcwd()+sep+'report'+sep if access(texdir,F_OK) == 0: mkdir (texdir) if len(label_id) == 1: label_id1 = label_id[0].replace(sep,'') label_id2 = label_id1.replace('_','') texfile = texdir + reportname + '%s' % label_id2 texfile2 = reportname + '%s' % label_id2 texfilename = texfile + '.tex' fid = open(texfilename, 'w') if verbose: log.critical('Latex output printed to %s' % texfilename) else: texfile = texdir+reportname texfile2 = reportname texfilename = texfile + '.tex' fid = open(texfilename, 'w') if verbose: log.critical('Latex output printed to %s' % texfilename) else: texfile = '' texfile2 = '' p = len(f_list) n = [] n0 = 0 for i in range(len(f_list)): n.append(len(f_list[i].get_time())) if n[i] > n0: n0 = n[i] n0 = int(n0) m = len(locations) model_time = num.zeros((n0, m, p), num.float) stages = num.zeros((n0, m, p), num.float) elevations = num.zeros((n0, m, p), num.float) momenta = num.zeros((n0, m, p), num.float) xmom = num.zeros((n0, m, p), num.float) ymom = num.zeros((n0, m, p), num.float) speed = num.zeros((n0, m, p), num.float) bearings = num.zeros((n0, m, p), num.float) due_east = 90.0*num.ones((n0, 1), num.float) due_west = 270.0*num.ones((n0, 1), num.float) depths = num.zeros((n0, m, p), num.float) eastings = num.zeros((n0, m, p), num.float) min_stages = [] max_stages = [] min_momentums = [] max_momentums = [] max_xmomentums = [] max_ymomentums = [] min_xmomentums = [] min_ymomentums = [] max_speeds = [] min_speeds = [] max_depths = [] model_time_plot3d = num.zeros((n0, m), num.float) stages_plot3d = num.zeros((n0, m), num.float) eastings_plot3d = num.zeros((n0, m),num.float) if time_unit is 'mins': scale = 60.0 if time_unit is 'hours': scale = 3600.0 ##### loop over each swwfile ##### for j, f in enumerate(f_list): if verbose: log.critical('swwfile %d of %d' % (j, len(f_list))) starttime = f.starttime comparefile = file_loc[j] + sep + 'gauges_maxmins' + '.csv' fid_compare = open(comparefile, 'w') file0 = file_loc[j] + 'gauges_t0.csv' fid_0 = open(file0, 'w') ##### loop over each gauge ##### for k in gauge_index: if verbose: log.critical('Gauge %d of %d' % (k, len(gauges))) g = gauges[k] min_stage = 10 max_stage = 0 max_momentum = max_xmomentum = max_ymomentum = 0 min_momentum = min_xmomentum = min_ymomentum = 100 max_speed = 0 min_speed = 0 max_depth = 0 gaugeloc = str(locations[k]) thisfile = file_loc[j] + sep + 'gauges_time_series' + '_' \ + gaugeloc + '.csv' if j == 0: fid_out = open(thisfile, 'w') s = 'Time, Stage, Momentum, Speed, Elevation, xmom, ymom, Bearing \n' fid_out.write(s) #### generate quantities ####### for i, t in enumerate(f.get_time()): if time_min <= t <= time_max: w = f(t, point_id = k)[0] z = f(t, point_id = k)[1] uh = f(t, point_id = k)[2] vh = f(t, point_id = k)[3] depth = w-z m = sqrt(uh*uh + vh*vh) if depth < 0.001: vel = 0.0 else: vel = m / (depth + 1.e-6/depth) bearing = calc_bearing(uh, vh) model_time[i,k,j] = (t + starttime)/scale #t/60.0 stages[i,k,j] = w elevations[i,k,j] = z xmom[i,k,j] = uh ymom[i,k,j] = vh momenta[i,k,j] = m speed[i,k,j] = vel bearings[i,k,j] = bearing depths[i,k,j] = depth thisgauge = gauges[k] eastings[i,k,j] = thisgauge[0] s = '%.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f,\n' \ % (t, w, m, vel, z, uh, vh, bearing) fid_out.write(s) if t == 0: s = '%.2f, %.2f, %.2f\n' % (g[0], g[1], w) fid_0.write(s) if t/60.0 <= 13920: tindex = i if w > max_stage: max_stage = w if w < min_stage: min_stage = w if m > max_momentum: max_momentum = m if m < min_momentum: min_momentum = m if uh > max_xmomentum: max_xmomentum = uh if vh > max_ymomentum: max_ymomentum = vh if uh < min_xmomentum: min_xmomentum = uh if vh < min_ymomentum: min_ymomentum = vh if vel > max_speed: max_speed = vel if vel < min_speed: min_speed = vel if z > 0 and depth > max_depth: max_depth = depth s = '%.2f, %.2f, %.2f, %.2f, %s\n' \ % (max_stage, min_stage, z, thisgauge[0], leg_label[j]) fid_compare.write(s) max_stages.append(max_stage) min_stages.append(min_stage) max_momentums.append(max_momentum) max_xmomentums.append(max_xmomentum) max_ymomentums.append(max_ymomentum) min_xmomentums.append(min_xmomentum) min_ymomentums.append(min_ymomentum) min_momentums.append(min_momentum) max_depths.append(max_depth) max_speeds.append(max_speed) min_speeds.append(min_speed) #### finished generating quantities for each swwfile ##### model_time_plot3d[:,:] = model_time[:,:,j] stages_plot3d[:,:] = stages[:,:,j] eastings_plot3d[:,] = eastings[:,:,j] if surface is True: log.critical('Printing surface figure') for i in range(2): fig = p1.figure(10) ax = p3.Axes3D(fig) if len(gauges) > 80: ax.plot_surface(model_time[:,:,j], eastings[:,:,j], stages[:,:,j]) else: ax.plot3D(num.ravel(eastings[:,:,j]), num.ravel(model_time[:,:,j]), num.ravel(stages[:,:,j])) ax.set_xlabel('time') ax.set_ylabel('x') ax.set_zlabel('stage') fig.add_axes(ax) p1.show() surfacefig = 'solution_surface%s' % leg_label[j] p1.savefig(surfacefig) p1.close() #### finished generating quantities for all swwfiles ##### # x profile for given time if surface is True: figure(11) plot(eastings[tindex,:,j], stages[tindex,:,j]) xlabel('x') ylabel('stage') profilefig = 'solution_xprofile' savefig('profilefig') elev_output = [] if generate_fig is True: depth_axis = axis([starttime/scale, time_max/scale, -0.1, max(max_depths)*1.1]) stage_axis = axis([starttime/scale, time_max/scale, min(min_stages), max(max_stages)*1.1]) vel_axis = axis([starttime/scale, time_max/scale, min(min_speeds), max(max_speeds)*1.1]) mom_axis = axis([starttime/scale, time_max/scale, min(min_momentums), max(max_momentums)*1.1]) xmom_axis = axis([starttime/scale, time_max/scale, min(min_xmomentums), max(max_xmomentums)*1.1]) ymom_axis = axis([starttime/scale, time_max/scale, min(min_ymomentums), max(max_ymomentums)*1.1]) cstr = ['g', 'r', 'b', 'c', 'm', 'y', 'k'] nn = len(plot_quantity) no_cols = 2 if len(label_id) > 1: graphname_report = [] pp = 1 div = 11. cc = 0 for k in gauge_index: g = gauges[k] count1 = 0 if report == True and len(label_id) > 1: s = '\\begin{figure}[ht] \n' \ '\\centering \n' \ '\\begin{tabular}{cc} \n' fid.write(s) if len(label_id) > 1: graphname_report = [] #### generate figures for each gauge #### for j, f in enumerate(f_list): ion() hold(True) count = 0 where1 = 0 where2 = 0 word_quantity = '' if report == True and len(label_id) == 1: s = '\\begin{figure}[hbt] \n' \ '\\centering \n' \ '\\begin{tabular}{cc} \n' fid.write(s) for which_quantity in plot_quantity: count += 1 where1 += 1 figure(count, frameon = False) if which_quantity == 'depth': plot(model_time[0:n[j]-1,k,j], depths[0:n[j]-1,k,j], '-', c = cstr[j]) units = 'm' axis(depth_axis) if which_quantity == 'stage': if elevations[0,k,j] <= 0: plot(model_time[0:n[j]-1,k,j], stages[0:n[j]-1,k,j], '-', c = cstr[j]) axis(stage_axis) else: plot(model_time[0:n[j]-1,k,j], depths[0:n[j]-1,k,j], '-', c = cstr[j]) #axis(depth_axis) units = 'm' if which_quantity == 'momentum': plot(model_time[0:n[j]-1,k,j], momenta[0:n[j]-1,k,j], '-', c = cstr[j]) axis(mom_axis) units = 'm^2 / sec' if which_quantity == 'xmomentum': plot(model_time[0:n[j]-1,k,j], xmom[0:n[j]-1,k,j], '-', c = cstr[j]) axis(xmom_axis) units = 'm^2 / sec' if which_quantity == 'ymomentum': plot(model_time[0:n[j]-1,k,j], ymom[0:n[j]-1,k,j], '-', c = cstr[j]) axis(ymom_axis) units = 'm^2 / sec' if which_quantity == 'speed': plot(model_time[0:n[j]-1,k,j], speed[0:n[j]-1,k,j], '-', c = cstr[j]) axis(vel_axis) units = 'm / sec' if which_quantity == 'bearing': plot(model_time[0:n[j]-1,k,j],bearings[0:n[j]-1,k,j],'-', model_time[0:n[j]-1,k,j], due_west[0:n[j]-1], '-.', model_time[0:n[j]-1,k,j], due_east[0:n[j]-1], '-.') units = 'degrees from North' #ax = axis([time_min, time_max, 0.0, 360.0]) legend(('Bearing','West','East')) if time_unit is 'mins': xlabel('time (mins)') if time_unit is 'hours': xlabel('time (hours)') #if which_quantity == 'stage' \ # and elevations[0:n[j]-1,k,j] > 0: # ylabel('%s (%s)' %('depth', units)) #else: # ylabel('%s (%s)' %(which_quantity, units)) #ylabel('%s (%s)' %('wave height', units)) ylabel('%s (%s)' %(which_quantity, units)) if len(label_id) > 1: legend((leg_label),loc='upper right') #gaugeloc1 = gaugeloc.replace(' ','') #gaugeloc2 = gaugeloc1.replace('_','') gaugeloc2 = str(locations[k]).replace(' ','') graphname = '%sgauge%s_%s' %(file_loc[j], gaugeloc2, which_quantity) if report == True and len(label_id) > 1: figdir = getcwd()+sep+'report_figures'+sep if access(figdir,F_OK) == 0 : mkdir (figdir) latex_file_loc = figdir.replace(sep,altsep) # storing files in production directory graphname_latex = '%sgauge%s%s' \ % (latex_file_loc, gaugeloc2, which_quantity) # giving location in latex output file graphname_report_input = '%sgauge%s%s' % \ ('..' + altsep + 'report_figures' + altsep, gaugeloc2, which_quantity) graphname_report.append(graphname_report_input) # save figures in production directory for report savefig(graphname_latex) if report == True: figdir = getcwd() + sep + 'report_figures' + sep if access(figdir,F_OK) == 0: mkdir(figdir) latex_file_loc = figdir.replace(sep,altsep) if len(label_id) == 1: # storing files in production directory graphname_latex = '%sgauge%s%s%s' % \ (latex_file_loc, gaugeloc2, which_quantity, label_id2) # giving location in latex output file graphname_report = '%sgauge%s%s%s' % \ ('..' + altsep + 'report_figures' + altsep, gaugeloc2, which_quantity, label_id2) s = '\includegraphics' \ '[width=0.49\linewidth, height=50mm]{%s%s}' % \ (graphname_report, '.png') fid.write(s) if where1 % 2 == 0: s = '\\\\ \n' where1 = 0 else: s = '& \n' fid.write(s) savefig(graphname_latex) if title_on == True: title('%s scenario: %s at %s gauge' % \ (label_id, which_quantity, gaugeloc2)) #title('Gauge %s (MOST elevation %.2f, ' \ # 'ANUGA elevation %.2f)' % \ # (gaugeloc2, elevations[10,k,0], # elevations[10,k,1])) savefig(graphname) # save figures with sww file if report == True and len(label_id) == 1: for i in range(nn-1): if nn > 2: if plot_quantity[i] == 'stage' \ and elevations[0,k,j] > 0: word_quantity += 'depth' + ', ' else: word_quantity += plot_quantity[i] + ', ' else: if plot_quantity[i] == 'stage' \ and elevations[0,k,j] > 0: word_quantity += 'depth' + ', ' else: word_quantity += plot_quantity[i] if plot_quantity[nn-1] == 'stage' and elevations[0,k,j] > 0: word_quantity += ' and ' + 'depth' else: word_quantity += ' and ' + plot_quantity[nn-1] caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elev[k]) if elev[k] == 0.0: caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elevations[0,k,j]) east = gauges[0] north = gauges[1] elev_output.append([locations[k], east, north, elevations[0,k,j]]) label = '%sgauge%s' % (label_id2, gaugeloc2) s = '\end{tabular} \n' \ '\\caption{%s} \n' \ '\label{fig:%s} \n' \ '\end{figure} \n \n' % (caption, label) fid.write(s) cc += 1 if cc % 6 == 0: fid.write('\\clearpage \n') savefig(graphname_latex) if report == True and len(label_id) > 1: for i in range(nn-1): if nn > 2: if plot_quantity[i] == 'stage' and elevations[0,k,j] > 0: word_quantity += 'depth' + ',' else: word_quantity += plot_quantity[i] + ', ' else: if plot_quantity[i] == 'stage' and elevations[0,k,j] > 0: word_quantity += 'depth' else: word_quantity += plot_quantity[i] where1 = 0 count1 += 1 index = j*len(plot_quantity) for which_quantity in plot_quantity: where1 += 1 s = '\includegraphics' \ '[width=0.49\linewidth, height=50mm]{%s%s}' % \ (graphname_report[index], '.png') index += 1 fid.write(s) if where1 % 2 == 0: s = '\\\\ \n' where1 = 0 else: s = '& \n' fid.write(s) word_quantity += ' and ' + plot_quantity[nn-1] label = 'gauge%s' %(gaugeloc2) caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elev[k]) if elev[k] == 0.0: caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elevations[0,k,j]) thisgauge = gauges[k] east = thisgauge[0] north = thisgauge[1] elev_output.append([locations[k], east, north, elevations[0,k,j]]) s = '\end{tabular} \n' \ '\\caption{%s} \n' \ '\label{fig:%s} \n' \ '\end{figure} \n \n' % (caption, label) fid.write(s) if float((k+1)/div - pp) == 0.: fid.write('\\clearpage \n') pp += 1 #### finished generating figures ### close('all') return texfile2, elev_output
def _generate_figures(plot_quantity, file_loc, report, reportname, surface, leg_label, f_list, gauges, locations, elev, gauge_index, production_dirs, time_min, time_max, time_unit, title_on, label_id, generate_fig, verbose): """ Generate figures based on required quantities and gauges for each sww file """ from os import sep, altsep, getcwd, mkdir, access, F_OK, environ if generate_fig is True: from pylab import ion, hold, plot, axis, figure, legend, savefig, \ xlabel, ylabel, title, close, subplot if surface is True: import pylab as p1 import mpl3d.mplot3d as p3 if report == True: texdir = getcwd() + sep + 'report' + sep if access(texdir, F_OK) == 0: mkdir(texdir) if len(label_id) == 1: label_id1 = label_id[0].replace(sep, '') label_id2 = label_id1.replace('_', '') texfile = texdir + reportname + '%s' % label_id2 texfile2 = reportname + '%s' % label_id2 texfilename = texfile + '.tex' fid = open(texfilename, 'w') if verbose: log.critical('Latex output printed to %s' % texfilename) else: texfile = texdir + reportname texfile2 = reportname texfilename = texfile + '.tex' fid = open(texfilename, 'w') if verbose: log.critical('Latex output printed to %s' % texfilename) else: texfile = '' texfile2 = '' p = len(f_list) n = [] n0 = 0 for i in range(len(f_list)): n.append(len(f_list[i].get_time())) if n[i] > n0: n0 = n[i] n0 = int(n0) m = len(locations) model_time = num.zeros((n0, m, p), num.float) stages = num.zeros((n0, m, p), num.float) elevations = num.zeros((n0, m, p), num.float) momenta = num.zeros((n0, m, p), num.float) xmom = num.zeros((n0, m, p), num.float) ymom = num.zeros((n0, m, p), num.float) speed = num.zeros((n0, m, p), num.float) bearings = num.zeros((n0, m, p), num.float) due_east = 90.0 * num.ones((n0, 1), num.float) due_west = 270.0 * num.ones((n0, 1), num.float) depths = num.zeros((n0, m, p), num.float) eastings = num.zeros((n0, m, p), num.float) min_stages = [] max_stages = [] min_momentums = [] max_momentums = [] max_xmomentums = [] max_ymomentums = [] min_xmomentums = [] min_ymomentums = [] max_speeds = [] min_speeds = [] max_depths = [] model_time_plot3d = num.zeros((n0, m), num.float) stages_plot3d = num.zeros((n0, m), num.float) eastings_plot3d = num.zeros((n0, m), num.float) if time_unit is 'mins': scale = 60.0 if time_unit is 'hours': scale = 3600.0 ##### loop over each swwfile ##### for j, f in enumerate(f_list): if verbose: log.critical('swwfile %d of %d' % (j, len(f_list))) starttime = f.starttime comparefile = file_loc[j] + sep + 'gauges_maxmins' + '.csv' fid_compare = open(comparefile, 'w') file0 = file_loc[j] + 'gauges_t0.csv' fid_0 = open(file0, 'w') ##### loop over each gauge ##### for k in gauge_index: if verbose: log.critical('Gauge %d of %d' % (k, len(gauges))) g = gauges[k] min_stage = 10 max_stage = 0 max_momentum = max_xmomentum = max_ymomentum = 0 min_momentum = min_xmomentum = min_ymomentum = 100 max_speed = 0 min_speed = 0 max_depth = 0 gaugeloc = str(locations[k]) thisfile = file_loc[j] + sep + 'gauges_time_series' + '_' \ + gaugeloc + '.csv' if j == 0: fid_out = open(thisfile, 'w') s = 'Time, Stage, Momentum, Speed, Elevation, xmom, ymom, Bearing \n' fid_out.write(s) #### generate quantities ####### for i, t in enumerate(f.get_time()): if time_min <= t <= time_max: w = f(t, point_id=k)[0] z = f(t, point_id=k)[1] uh = f(t, point_id=k)[2] vh = f(t, point_id=k)[3] depth = w - z m = sqrt(uh * uh + vh * vh) if depth < 0.001: vel = 0.0 else: vel = m / (depth + 1.e-6 / depth) bearing = calc_bearing(uh, vh) model_time[i, k, j] = (t + starttime) / scale #t/60.0 stages[i, k, j] = w elevations[i, k, j] = z xmom[i, k, j] = uh ymom[i, k, j] = vh momenta[i, k, j] = m speed[i, k, j] = vel bearings[i, k, j] = bearing depths[i, k, j] = depth thisgauge = gauges[k] eastings[i, k, j] = thisgauge[0] s = '%.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f,\n' \ % (t, w, m, vel, z, uh, vh, bearing) fid_out.write(s) if t == 0: s = '%.2f, %.2f, %.2f\n' % (g[0], g[1], w) fid_0.write(s) if t / 60.0 <= 13920: tindex = i if w > max_stage: max_stage = w if w < min_stage: min_stage = w if m > max_momentum: max_momentum = m if m < min_momentum: min_momentum = m if uh > max_xmomentum: max_xmomentum = uh if vh > max_ymomentum: max_ymomentum = vh if uh < min_xmomentum: min_xmomentum = uh if vh < min_ymomentum: min_ymomentum = vh if vel > max_speed: max_speed = vel if vel < min_speed: min_speed = vel if z > 0 and depth > max_depth: max_depth = depth s = '%.2f, %.2f, %.2f, %.2f, %s\n' \ % (max_stage, min_stage, z, thisgauge[0], leg_label[j]) fid_compare.write(s) max_stages.append(max_stage) min_stages.append(min_stage) max_momentums.append(max_momentum) max_xmomentums.append(max_xmomentum) max_ymomentums.append(max_ymomentum) min_xmomentums.append(min_xmomentum) min_ymomentums.append(min_ymomentum) min_momentums.append(min_momentum) max_depths.append(max_depth) max_speeds.append(max_speed) min_speeds.append(min_speed) #### finished generating quantities for each swwfile ##### model_time_plot3d[:, :] = model_time[:, :, j] stages_plot3d[:, :] = stages[:, :, j] eastings_plot3d[:, ] = eastings[:, :, j] if surface is True: log.critical('Printing surface figure') for i in range(2): fig = p1.figure(10) ax = p3.Axes3D(fig) if len(gauges) > 80: ax.plot_surface(model_time[:, :, j], eastings[:, :, j], stages[:, :, j]) else: ax.plot3D(num.ravel(eastings[:, :, j]), num.ravel(model_time[:, :, j]), num.ravel(stages[:, :, j])) ax.set_xlabel('time') ax.set_ylabel('x') ax.set_zlabel('stage') fig.add_axes(ax) p1.show() surfacefig = 'solution_surface%s' % leg_label[j] p1.savefig(surfacefig) p1.close() #### finished generating quantities for all swwfiles ##### # x profile for given time if surface is True: figure(11) plot(eastings[tindex, :, j], stages[tindex, :, j]) xlabel('x') ylabel('stage') profilefig = 'solution_xprofile' savefig('profilefig') elev_output = [] if generate_fig is True: depth_axis = axis( [starttime / scale, time_max / scale, -0.1, max(max_depths) * 1.1]) stage_axis = axis([ starttime / scale, time_max / scale, min(min_stages), max(max_stages) * 1.1 ]) vel_axis = axis([ starttime / scale, time_max / scale, min(min_speeds), max(max_speeds) * 1.1 ]) mom_axis = axis([ starttime / scale, time_max / scale, min(min_momentums), max(max_momentums) * 1.1 ]) xmom_axis = axis([ starttime / scale, time_max / scale, min(min_xmomentums), max(max_xmomentums) * 1.1 ]) ymom_axis = axis([ starttime / scale, time_max / scale, min(min_ymomentums), max(max_ymomentums) * 1.1 ]) cstr = ['g', 'r', 'b', 'c', 'm', 'y', 'k'] nn = len(plot_quantity) no_cols = 2 if len(label_id) > 1: graphname_report = [] pp = 1 div = 11. cc = 0 for k in gauge_index: g = gauges[k] count1 = 0 if report == True and len(label_id) > 1: s = '\\begin{figure}[ht] \n' \ '\\centering \n' \ '\\begin{tabular}{cc} \n' fid.write(s) if len(label_id) > 1: graphname_report = [] #### generate figures for each gauge #### for j, f in enumerate(f_list): ion() hold(True) count = 0 where1 = 0 where2 = 0 word_quantity = '' if report == True and len(label_id) == 1: s = '\\begin{figure}[hbt] \n' \ '\\centering \n' \ '\\begin{tabular}{cc} \n' fid.write(s) for which_quantity in plot_quantity: count += 1 where1 += 1 figure(count, frameon=False) if which_quantity == 'depth': plot(model_time[0:n[j] - 1, k, j], depths[0:n[j] - 1, k, j], '-', c=cstr[j]) units = 'm' axis(depth_axis) if which_quantity == 'stage': if elevations[0, k, j] <= 0: plot(model_time[0:n[j] - 1, k, j], stages[0:n[j] - 1, k, j], '-', c=cstr[j]) axis(stage_axis) else: plot(model_time[0:n[j] - 1, k, j], depths[0:n[j] - 1, k, j], '-', c=cstr[j]) #axis(depth_axis) units = 'm' if which_quantity == 'momentum': plot(model_time[0:n[j] - 1, k, j], momenta[0:n[j] - 1, k, j], '-', c=cstr[j]) axis(mom_axis) units = 'm^2 / sec' if which_quantity == 'xmomentum': plot(model_time[0:n[j] - 1, k, j], xmom[0:n[j] - 1, k, j], '-', c=cstr[j]) axis(xmom_axis) units = 'm^2 / sec' if which_quantity == 'ymomentum': plot(model_time[0:n[j] - 1, k, j], ymom[0:n[j] - 1, k, j], '-', c=cstr[j]) axis(ymom_axis) units = 'm^2 / sec' if which_quantity == 'speed': plot(model_time[0:n[j] - 1, k, j], speed[0:n[j] - 1, k, j], '-', c=cstr[j]) axis(vel_axis) units = 'm / sec' if which_quantity == 'bearing': plot(model_time[0:n[j] - 1, k, j], bearings[0:n[j] - 1, k, j], '-', model_time[0:n[j] - 1, k, j], due_west[0:n[j] - 1], '-.', model_time[0:n[j] - 1, k, j], due_east[0:n[j] - 1], '-.') units = 'degrees from North' #ax = axis([time_min, time_max, 0.0, 360.0]) legend(('Bearing', 'West', 'East')) if time_unit is 'mins': xlabel('time (mins)') if time_unit is 'hours': xlabel('time (hours)') #if which_quantity == 'stage' \ # and elevations[0:n[j]-1,k,j] > 0: # ylabel('%s (%s)' %('depth', units)) #else: # ylabel('%s (%s)' %(which_quantity, units)) #ylabel('%s (%s)' %('wave height', units)) ylabel('%s (%s)' % (which_quantity, units)) if len(label_id) > 1: legend((leg_label), loc='upper right') #gaugeloc1 = gaugeloc.replace(' ','') #gaugeloc2 = gaugeloc1.replace('_','') gaugeloc2 = str(locations[k]).replace(' ', '') graphname = '%sgauge%s_%s' % (file_loc[j], gaugeloc2, which_quantity) if report == True and len(label_id) > 1: figdir = getcwd() + sep + 'report_figures' + sep if access(figdir, F_OK) == 0: mkdir(figdir) latex_file_loc = figdir.replace(sep, altsep) # storing files in production directory graphname_latex = '%sgauge%s%s' \ % (latex_file_loc, gaugeloc2, which_quantity) # giving location in latex output file graphname_report_input = '%sgauge%s%s' % \ ('..' + altsep + 'report_figures' + altsep, gaugeloc2, which_quantity) graphname_report.append(graphname_report_input) # save figures in production directory for report savefig(graphname_latex) if report == True: figdir = getcwd() + sep + 'report_figures' + sep if access(figdir, F_OK) == 0: mkdir(figdir) latex_file_loc = figdir.replace(sep, altsep) if len(label_id) == 1: # storing files in production directory graphname_latex = '%sgauge%s%s%s' % \ (latex_file_loc, gaugeloc2, which_quantity, label_id2) # giving location in latex output file graphname_report = '%sgauge%s%s%s' % \ ('..' + altsep + 'report_figures' + altsep, gaugeloc2, which_quantity, label_id2) s = '\includegraphics' \ '[width=0.49\linewidth, height=50mm]{%s%s}' % \ (graphname_report, '.png') fid.write(s) if where1 % 2 == 0: s = '\\\\ \n' where1 = 0 else: s = '& \n' fid.write(s) savefig(graphname_latex) if title_on == True: title('%s scenario: %s at %s gauge' % \ (label_id, which_quantity, gaugeloc2)) #title('Gauge %s (MOST elevation %.2f, ' \ # 'ANUGA elevation %.2f)' % \ # (gaugeloc2, elevations[10,k,0], # elevations[10,k,1])) savefig(graphname) # save figures with sww file if report == True and len(label_id) == 1: for i in range(nn - 1): if nn > 2: if plot_quantity[i] == 'stage' \ and elevations[0,k,j] > 0: word_quantity += 'depth' + ', ' else: word_quantity += plot_quantity[i] + ', ' else: if plot_quantity[i] == 'stage' \ and elevations[0,k,j] > 0: word_quantity += 'depth' + ', ' else: word_quantity += plot_quantity[i] if plot_quantity[nn - 1] == 'stage' and elevations[0, k, j] > 0: word_quantity += ' and ' + 'depth' else: word_quantity += ' and ' + plot_quantity[nn - 1] caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elev[k]) if elev[k] == 0.0: caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elevations[0,k,j]) east = gauges[0] north = gauges[1] elev_output.append( [locations[k], east, north, elevations[0, k, j]]) label = '%sgauge%s' % (label_id2, gaugeloc2) s = '\end{tabular} \n' \ '\\caption{%s} \n' \ '\label{fig:%s} \n' \ '\end{figure} \n \n' % (caption, label) fid.write(s) cc += 1 if cc % 6 == 0: fid.write('\\clearpage \n') savefig(graphname_latex) if report == True and len(label_id) > 1: for i in range(nn - 1): if nn > 2: if plot_quantity[i] == 'stage' and elevations[0, k, j] > 0: word_quantity += 'depth' + ',' else: word_quantity += plot_quantity[i] + ', ' else: if plot_quantity[i] == 'stage' and elevations[0, k, j] > 0: word_quantity += 'depth' else: word_quantity += plot_quantity[i] where1 = 0 count1 += 1 index = j * len(plot_quantity) for which_quantity in plot_quantity: where1 += 1 s = '\includegraphics' \ '[width=0.49\linewidth, height=50mm]{%s%s}' % \ (graphname_report[index], '.png') index += 1 fid.write(s) if where1 % 2 == 0: s = '\\\\ \n' where1 = 0 else: s = '& \n' fid.write(s) word_quantity += ' and ' + plot_quantity[nn - 1] label = 'gauge%s' % (gaugeloc2) caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elev[k]) if elev[k] == 0.0: caption = 'Time series for %s at %s location ' \ '(elevation %.2fm)' % \ (word_quantity, locations[k], elevations[0,k,j]) thisgauge = gauges[k] east = thisgauge[0] north = thisgauge[1] elev_output.append( [locations[k], east, north, elevations[0, k, j]]) s = '\end{tabular} \n' \ '\\caption{%s} \n' \ '\label{fig:%s} \n' \ '\end{figure} \n \n' % (caption, label) fid.write(s) if float((k + 1) / div - pp) == 0.: fid.write('\\clearpage \n') pp += 1 #### finished generating figures ### close('all') return texfile2, elev_output