Beispiel #1
0
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)
Beispiel #2
0
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()
Beispiel #3
0
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)
Beispiel #4
0
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)