def compare(basis_dir=None, default=0.012): """ Create a set of diagnostic plots in basis_dir/figs :param string basis_dir: directory containing the test folder and landuse folders :param float default: default Manning's *n* """ if basis_dir is None: basis_dir = os.getcwd() tables = tm.read_tables(os.path.join(basis_dir, 'test')) domain = dom.domain(basis_dir) domain.read_spatial_grid() fm.mkdir(os.path.join(basis_dir, 'figs')) old_files = glob.glob(os.path.join(basis_dir, 'figs', '*.png')) for fid in old_files: os.remove(fid) domain.get_Triangulation(path=basis_dir) original = f13.read_nodal_attr_dict(os.path.join(basis_dir, 'test')) original = tmm.dict_to_array(original, default, domain.node_num) weights = np.array(tables[0].land_classes.values()) lim = (np.min(weights), np.max(weights)) bv_dict = tmm.get_basis_vectors(basis_dir) combo = tmm.combine_basis_vectors(weights, bv_dict, default, domain.node_num) bv_array = tmm.get_basis_vec_array(basis_dir, domain.node_num) plt.basis_functions(domain, bv_array, path=basis_dir) plt.field(domain, original, 'original', clim=lim, path=basis_dir) plt.field(domain, combo, 'reconstruction', clim=lim, path=basis_dir) plt.field(domain, original-combo, 'difference', path=basis_dir) combo_array = tmm.combine_bv_array(weights, bv_array) plt.field(domain, combo_array, 'combo_array', clim=lim, path=basis_dir) plt.field(domain, original-combo_array, 'diff_ori_array', path=basis_dir) plt.field(domain, combo-combo_array, 'diff_com_array', path=basis_dir) combo_bv = tmm.combine_basis_vectors(np.ones(weights.shape), bv_dict, default, domain.node_num) plt.field(domain, combo_bv, 'combo_bv', path=basis_dir)
save_dir = adcirc_dir + '/ADCIRC_landuse/Inlet/runs/poly_wall_'+str(run_no) basis_dir = adcirc_dir +'/ADCIRC_landuse/Inlet/landuse_basis/gap/beach_walls_2lands' # assume that in.prep* files are one directory up from basis_dir script = "run_script_"+str(run_no)+".sh" timeseries_files = []#["fort.63"] nontimeseries_files = ["tinun.63", "maxvel.63", "maxele.63"]#, "timemax63"] # NoNx12/TpN where NoN is number of nodes and TpN is tasks per node, 12 is the # number of cores per node See -pe line in submission_script <TpN>way<NoN x # 12> nprocs = 8 # number of processors per PADCIRC run ppnode = 12 NoN = 32 num_of_parallel_runs = (ppnode*NoN)/nprocs # procs_pnode * NoN / nproc domain = dom.domain(grid_dir) domain.update() main_run = rmw.runSet(grid_dir, save_dir, basis_dir, num_of_parallel_runs, base_dir=adcirc_dir, script_name=script) main_run.initialize_random_field_directories(num_procs=nprocs) # Set samples lam_domain = np.array([[.07, .15], [.1, .2]]) lam1 = np.linspace(lam_domain[0, 0], lam_domain[0, 1], 52) lam2 = np.linspace(lam_domain[1, 0], lam_domain[1, 1], 50) lam4 = 0.012 lam1, lam2, lam4 = np.meshgrid(lam1, lam2, lam4) lam_samples = np.column_stack((lam1.ravel(), lam2.ravel(), lam4.ravel())) mann_pts = lam_samples.transpose()
def loadmat(save_file, base_dir, grid_dir, save_dir, basis_dir): """ Loads data from ``save_file`` into a :class:`~polyadcirc.run_framework.random_manningsn.runSet` object. Reconstructs :class:`~polyadcirc.run_framework.random_manningsn.domain`. Fixes dry data if it was recorded. :param string save_file: local file name :param string grid_dir: directory containing ``fort.14``, ``fort.15``, and ``fort.22`` :param string save_dir: directory where ``RF_directory_*`` are saved, and where fort.13 is located :param string basis_dir: directory where ``landuse_*`` folders are located :param string base_dir: directory that contains ADCIRC executables, and machine specific ``in.prep#`` files :rtype: tuple of :class:`~polyadcirc.run_framework.random_manningsn.runSet` and :class:`~polyadcirc.run_framework.random_manningsn.domain` objects :returns: (main_run, domain) """ # the lines below are only necessary if you need to update what the # directories are when swithcing from euclid to your desktop/laptop # assumes that the landuse directory and ADCIRC_landuse directory are in # the same directory domain = dom.domain(grid_dir) domain.update() #domain.get_Triangulation() domain.set_station_bathymetry() main_run = runSet(grid_dir, save_dir, basis_dir, base_dir=base_dir) main_run.time_obs = {} main_run.ts_data = {} main_run.nts_data = {} # load the data from at *.mat file mdat = sio.loadmat(save_dir + '/' + save_file) if mdat.has_key('mann_pts'): mann_pts = mdat['mann_pts'] else: mann_pts = None for k, v in mdat.iteritems(): skey = k.split('_') if skey[-1] == 'time': # check to see if the key is "*_time" main_run.time_obs[skey[0]] = v elif f15.filetype.has_key(skey[0]) or skey[0] == 'timemax63': if len(v.shape) == 2: # check to see if key is nts_data main_run.nts_data[skey[0]] = v elif skey[0] == 'timemax63': main_run.nts_data[skey[0]] = v else: # check to see if key is ts_data main_run.ts_data[skey[0]] = v if main_run.ts_data.has_key('fort63'): main_run.fix_dry_nodes(domain) if main_run.ts_data.has_key('fort61'): main_run.fix_dry_data(domain) if main_run.nts_data.has_key('maxele63'): main_run.fix_dry_nodes_nts(domain) return (main_run, domain, mann_pts)
def loadmat(save_file, base_dir, grid_dir, save_dir, basis_dir): """ Loads data from ``save_file`` into a :class:`~polyadcirc.run_framework.random_manningsn.runSet` object. Reconstructs :class:`~polyadcirc.run_framework.random_manningsn.domain`. Fixes dry data if it was recorded. :param string save_file: local file name :param string grid_dir: directory containing ``fort.14``, ``fort.15``, and ``fort.22`` :param string save_dir: directory where ``RF_directory_*`` are saved, and where fort.13 is located :param string basis_dir: directory where ``landuse_*`` folders are located :param string base_dir: directory that contains ADCIRC executables, and machine specific ``in.prep#`` files :rtype: tuple of :class:`~polyadcirc.run_framework.random_manningsn.runSet` and :class:`~polyadcirc.run_framework.random_manningsn.domain` objects :returns: (main_run, domain) """ # the lines below are only necessary if you need to update what the # directories are when swithcing from euclid to your desktop/laptop # assumes that the landuse directory and ADCIRC_landuse directory are in # the same directory domain = dom.domain(grid_dir) domain.update() #domain.get_Triangulation() domain.set_station_bathymetry() main_run = runSet(grid_dir, save_dir, basis_dir, base_dir=base_dir) main_run.time_obs = {} main_run.ts_data = {} main_run.nts_data = {} # load the data from at *.mat file mdat = sio.loadmat(save_dir+'/'+save_file) if mdat.has_key('mann_pts'): mann_pts = mdat['mann_pts'] else: mann_pts = None for k, v in mdat.iteritems(): skey = k.split('_') if skey[-1] == 'time': # check to see if the key is "*_time" main_run.time_obs[skey[0]] = v elif f15.filetype.has_key(skey[0]) or skey[0] == 'timemax63': if len(v.shape) == 2: # check to see if key is nts_data main_run.nts_data[skey[0]] = v elif skey[0] == 'timemax63': main_run.nts_data[skey[0]] = v else: # check to see if key is ts_data main_run.ts_data[skey[0]] = v if main_run.ts_data.has_key('fort63'): main_run.fix_dry_nodes(domain) if main_run.ts_data.has_key('fort61'): main_run.fix_dry_data(domain) if main_run.nts_data.has_key('maxele63'): main_run.fix_dry_nodes_nts(domain) return (main_run, domain, mann_pts)