Ejemplo n.º 1
0
def iwfm_read_lake(lake_file):
    ''' iwfm_read_lake() - Read an IWFM Lake file and returns 
        (a) a list of elements and (b) a list of properties for each lake

    Parameters
    ----------
    lake_file : str
        IWFM Preprocessor Lake file name

    Returns
    -------
    lake_elems : list
        element numbers for each lake
    
    lakes : list
        configuration info for each lake
          lake_id : int
              lake number
          max_elev : int
              column number in maximum elevation time series file
          dest : int
              destination stream node or lake id
          nelem : int
              number of elements in lake

    '''
    import iwfm as iwfm

    iwfm.file_test(lake_file)
    lake_lines = open(lake_file).read().splitlines()

    lake_index = iwfm.skip_ahead(0, lake_lines, 0)
    nlakes = int(lake_lines[lake_index].split()[0])

    lakes, lake_elems = [], []
    for i in range(0, nlakes):
        lake_index = iwfm.skip_ahead(lake_index + 1, lake_lines, 0)
        l = lake_lines[lake_index].split()
        lake_id = int(l.pop(0))
        max_elev = float(l.pop(0))
        dest = int(l.pop(0))
        nelem = int(l.pop(0))
        lakes.append([lake_id, max_elev, dest, nelem])
        for j in range(0, nelem):
            e = []
            if j > 0:
                lake_index = iwfm.skip_ahead(lake_index + 1, lake_lines, 0)
                l = lake_lines[lake_index].split()
            e.append(lake_id)
            e.append(int(l[0]))
            lake_elems.append(e)
    return lake_elems, lakes
Ejemplo n.º 2
0
def iwfm_read_elements(elem_file, verbose=False):
    ''' iwfm_read_elements() - Read an IWFM Element file, and return a list
        of the nodes making up each element

    Parameters
    ----------
    elem_file : str
        IWFM Preprocessor Elements file name

    Returns
    -------
    elem_ids : list
        element numbers
    
    elem_nodes : list
        nodes for each element
    
    elem_sub : list
        subregion for each element

    '''
    import re
    import iwfm as iwfm

    iwfm.file_test(elem_file)

    elem_lines = open(elem_file).read().splitlines()  
    line_index = iwfm.skip_ahead(0, elem_lines, 0) 

    elements = int(re.findall('\d+', elem_lines[line_index])[0])  

    line_index = iwfm.skip_ahead(line_index + 1, elem_lines, 0)  

    subregions = int(re.findall('\d+', elem_lines[line_index])[0]) 

    line_index = iwfm.skip_ahead(line_index + 1, elem_lines, 0)  
    line_index = iwfm.skip_ahead(line_index + 1, elem_lines, subregions - 1)

    elem_ids, elem_nodes, elem_sub = [], [], []
    for i in range(0, elements):  
        l = elem_lines[line_index + i].split()
        this_elem = int(l.pop(0))
        elem_ids.append(this_elem)
        nodes = [int(s) for s in l]
        elem_sub.append(nodes.pop(4))
        if nodes[3] == 0:
            nodes.pop(3)  # remove empty node on triangles
        elem_nodes.append(nodes)
    if verbose:
        print(f'  Read {len(elem_nodes):,} elements from {elem_file}')
    return elem_ids, elem_nodes, elem_sub
Ejemplo n.º 3
0
def iwfm_read_nodes(node_file, factor=0.0):
    ''' iwfm_read_nodes() - Read an IWFM Node file and return a list of the
        nodes and their coordinates

    Parameters
    ----------
    node_file : str
        IWFM preprocessor node file

    Returns
    -------
    node_coord : list
        Nodes and coordinates

    node_list : list
        Node numbers

    factor : float
        If factor = 0.0, use the factor from the input file
        Else if factor <> 0.0 use this as the factor

    '''
    import iwfm as iwfm
    import re

    iwfm.file_test(node_file)

    node_lines = open(node_file).read().splitlines()

    line_index = iwfm.skip_ahead(0, node_lines, 0)

    inodes = int(re.findall('\d+', node_lines[line_index])[0])

    line_index = iwfm.skip_ahead(line_index + 1, node_lines, 0)

    read_factor = float(node_lines[line_index].split()[0])

    if factor == 0:
        factor = read_factor

    line_index = iwfm.skip_ahead(line_index + 1, node_lines, 0)

    node_list, node_coord = [], []
    for i in range(0, inodes):
        l = node_lines[line_index + i].split()
        node_list.append(int(l.pop(0)))
        coords = [float(s) * factor for s in l]
        node_coord.append(coords)

    return node_coord, node_list
Ejemplo n.º 4
0
def dll_open(iwfm_dll, pre_file, sim_file, routed_streams=1, for_inquiry=1):
    ''' IWFM DLL: instantiate an IWFM_Model object from Preprocessor and Simulation filenames

    Parameters
    ----------
    iwfm_dll :  IWFM DLL object
        instantiated IWFM DLL object

    pre_file : str
        file path and name of the model preprocessor input file

    sim_file : str
        file path and name of the model simulation input file

    routed_streams : int, default=1
        1: model has routed streams
        0: stream routing in a linked model

    for_inquiry : int, default=1
        1: accessing the model to return input and output data
        0: running simulations

    Returns
    -------
    iwfm_model : object
        instantiated IWFM model object

    status : int
        0 if everything worked
 
    '''

    #import ctypes
    from ctypes import byref, c_int, create_string_buffer, sizeof
    import iwfm as iwfm

    iwfm.file_test(pre_file)
    iwfm.file_test(sim_file)

    pfile = create_string_buffer(pre_file.encode('utf-8'))
    sfile = create_string_buffer(sim_file.encode('utf-8'))

    status = c_int(-1)

    iwfm_dll.IW_Model_New(byref(c_int(sizeof(pfile))), pfile,
                          byref(c_int(sizeof(sfile))), sfile,
                          byref(c_int(routed_streams)),
                          byref(c_int(for_inquiry)), byref(status))

    return status.value
Ejemplo n.º 5
0
def iwfm_read_strat(strat_file, node_coords):
    ''' iwfm_read_strat() - Read an IWFM Stratigraphy file and return a 
        list of stratigraphy for each node
    
    Parameters:
    -----------
    strat_file : str
        name of existing IWFM stratigraphy file
    
    node_coords : list
        (x,y) locations of IWFM model nodes

    Returns
    -------
    strat : list
        stratigraphy for each node
    
    nlayers : int
        number of layers

    '''
    import iwfm as iwfm
    import re

    iwfm.file_test(strat_file)

    strat_lines = open(strat_file).read().splitlines()
    line_index = iwfm.skip_ahead(0, strat_lines, 0)

    layers = int(re.findall('\d+', strat_lines[line_index])[0])

    line_index = iwfm.skip_ahead(line_index + 1, strat_lines, 0)
    factor = float(re.findall('\d+', strat_lines[line_index])[0])

    line_index = iwfm.skip_ahead(line_index + 1, strat_lines, 0)

    strat = []
    for i in range(0, len(node_coords)):
        l = strat_lines[line_index + i].split()
        s = []
        s.append(int(l.pop(0)))
        for j in range(0, len(l)):
            s.append(factor * float(l.pop(0)))
        strat.append(s)
    nlayers = int((len(strat[0]) - 1) / 2)
    return strat, nlayers
Ejemplo n.º 6
0
def dll_init(dll_path):
    ''' dll_init() - Initialize IWFM DLL

    Parameters
    ----------
    dll_path : str
        file path and name of the IWFM DLL to access IWFM procedures


    Returns
    -------
    iwfm_dll : object
        iwfm dll object

    '''
    import ctypes
    import iwfm as iwfm

    iwfm.file_test(dll_path)

    return ctypes.windll.LoadLibrary(dll_path)
Ejemplo n.º 7
0

if __name__ == '__main__':
    ' Run nearest_node() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        node_file = sys.argv[1]
        well_file = sys.argv[2]
    else:  # ask for file names from terminal
        node_file = input('IWFM Node file name: ')
        well_file = input('Well file name: ')

    iwfm.file_test(node_file)
    iwfm.file_test(well_file)

    idb.exe_time()  # initialize timer
    node_coord, node_list = iwfm.iwfm_read_nodes(node_file)
    # read list of points from well file
    # ** TODO: NEED TO ADD THIS PART **
    print(f'  ** NEED TO UPDATE nearest_node.py TO READ WELL FILE ')
    print(f'  ** EXITING')
    sys.exit()

    # cycle through points for nearest node
    nearest = iwfm.nearest_node(point, node_set)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 8
0
                                       iwfm.bias_calc(sim_all, meas_all)))
    if verbose:
        print(f'  Wrote {out_file}')
    return


if __name__ == '__main__':
    ' Run pest_res_stats() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        pest_smp_file = sys.argv[1]
        gwhyd_info_file = sys.argv[2]
        gwhyd_file = sys.argv[3]
    else:
        # ask for file names from terminal
        pest_smp_file = input('  Observation file name: ')
        gwhyd_info_file = input('  IWFM Groundwater.dat file name: ')
        gwhyd_file = input('  IWFM Groundwater Hydrograph file name: ')

    iwfm.file_test(pest_smp_file)
    iwfm.file_test(gwhyd_info_file)
    iwfm.file_test(gwhyd_file)

    idb.exe_time()  # initialize timer
    pest_res_stats(pest_smp_file, gwhyd_info_file, gwhyd_file, verbose=True)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 9
0
    excel.DisplayAlerts = False  # return to defaults
    excel.Visible = False
    excel.Application.Quit()
    if verbose:
        print(f'  Closed {excel_file}')
    return


if __name__ == '__main__':
    ' Run bud2xl() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        budget_file = sys.argv[1]
        excel_file = sys.argv[2]

    else:  # ask for file names from terminal
        budget_file = input('IWFM Budget file name: ')
        excel_file = input('Output Excel file name: ')

    iwfm.file_test(budget_file)
    iwfm.file_test(excel_file)

    idb.exe_time()  # initialize timer
    bud2xl(budget_file, excel_file, verbose=True)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 10
0
        for line in gwhyd_lines_out:
            f.write("%s\n" % line)

    return


if __name__ == '__main__':
    ' Run hyd_diff() from command line '
    import sys
    import iwfm as iwfm
    import iwfm.debug as idb

    if len(sys.argv) > 1:  # arguments are listed on the command line
        gwhyd_file_1 = sys.argv[1]
        gwhyd_file_2 = sys.argv[2]
        outname = sys.argv[3]

    else:  # get everything form the command line
        gwhyd_file_1 = input('Base IWFM hydrograph file name: ')
        gwhyd_file_2 = input('Comparison IWFM hydrograph file name: ')
        outname = input('Output hydrograph file name: ')

    # test that the input files exist
    iwfm.file_test(gwhyd_file_1)
    iwfm.file_test(gwhyd_file_2)

    idb.exe_time()  # initialize timer
    hyd_diff(gwhyd_file_1, gwhyd_file_2, outname)
    print(f'  Created hydrograph file {outname}')  # update cli
    idb.exe_time()  # print elapsed time
Ejemplo n.º 11
0
                sys.argv[6 + i * 2])  # IWFM groundwater hydrograph file
            gwhyd_names.append(sys.argv[6 + i * 2 +
                                        1])  # Legend name for this hydrograph

    else:  # get everything form the command line
        titlewords = input('Graph title: ')
        obs_file = input(
            'Observed values file name (smp format) or \'none\'): ')
        gwhyd_info_file = input('IWFM Groundwater.dat file name: ')
        yaxis_width = input('Minimum y-axis scale (-1 to autoscale): ')
        no_hyds = int(input('Number of hydrographs to plot: '))
        for i in range(0, no_hyds):
            filename = input(
                f'  IWFM Groundwater Hydrograph {i+1} file name: ')
            gwhyd_files.append(filename)
            legendname = input(f'  Graph legend for {filename}: ')
            gwhyd_names.append(legendname)

    # test that the input files exist
    if obs_file.lower() != 'none':
        iwfm.file_test(obs_file)
    iwfm.file_test(gwhyd_info_file)
    for i in range(0, no_hyds):
        iwfm.file_test(gwhyd_files[i])

    idb.exe_time()  # initialize timer
    count = gw_plot(obs_file, gwhyd_info_file, gwhyd_files, gwhyd_names,
                    yaxis_width, titlewords)
    print(f'  Created {count} PDF hydrograph files')  # update cli
    idb.exe_time()  # print elapsed time
Ejemplo n.º 12
0
def iwfm_read_streams(stream_file):
    ''' iwfm_read_streams() - Read an IWFM Stream Geometry file and return
        a list of stream reaches, a dictionary of stream nodes, and the 
        number of stream nodes

    Parameters
    ----------
    stream_file : str
        IWFM Streams file name

    Returns
    -------
    reach_list : list
        information for each stream reach
    
    stnodes_dict : dictionary
        key = stream node ID, value = groundwater node
    
    len(snodes_list) : int
        number of stream nodes
    
    rating_dict : dictionary
        key = stream node ID, values = rating table
    
    '''
    import iwfm as iwfm

    iwfm.file_test(stream_file)
    comments = 'Cc*#'

    stream_lines = open(stream_file).read().splitlines()
    stream_type = stream_lines[0][1:]
    stream_index = iwfm.skip_ahead(1, stream_lines, 0)

    nreach = int(stream_lines[stream_index].split()[0])
    stream_index += 1
    rating = int(stream_lines[stream_index].split()[0])

    reach_list, snodes_list, nsnodes = [], [], 0
    for i in range(0, nreach):
        stream_index = iwfm.skip_ahead(stream_index + 1, stream_lines, 0)
        l = stream_lines[stream_index].split()

        # ***** TODO ************************************
        # Handle multiple types of stream packages (stream_type)
        # ***** TODO ************************************

        # streams package version 4.2
        # if stream_type == '4.2':
        reach = int(l.pop(0))
        snodes = int(l.pop(0))

        # streams package version 5
        # elif stream_type == '5':
        # upper = int(l.pop(0))
        # lower = int(l.pop(0))
        # snodes = lower - upper + 1

        oflow = int(l.pop(0))

        # read stream node information
        for j in range(0, snodes):
            stream_index = iwfm.skip_ahead(stream_index, stream_lines, 1)
            l = stream_lines[stream_index].split()
            t = [int(l[0]), int(l[1]), reach]
            snodes_list.append(t)
            if j == 0:
                upper = int(l[0])
            else:
                lower = int(l[0])
        reach_list.append([reach, upper, lower, oflow])

    stream_index = iwfm.skip_ahead(stream_index + 1, stream_lines, 3)
    rating_dict = {}
    selev = []
    for i in range(0, len(snodes_list)):
        l = stream_lines[stream_index].split()
        snd = l[0]
        selev.append(float(l[1]))
        # read the rating table values for this stream node
        temp = [[l[2], l[3]]]
        stream_index += 1
        for t in range(0, rating - 1):
            if any((c in comments) for c in stream_lines[stream_index][0]):
                stream_index += 1
            temp.append(stream_lines[stream_index].split())
            stream_index += 1
        rating_dict[snd] = temp

        if i < len(snodes_list) - 1:  # stop at end
            stream_index = iwfm.skip_ahead(stream_index, stream_lines, 0)

    # put stream node info into a dictionary
    stnodes_dict = {}
    for i in range(0, len(snodes_list)):
        j = 0
        while snodes_list[j][0] != i + 1:  # find info for i in snodes list
            j += 1
        key, values = i + 1, [snodes_list[j][1], snodes_list[j][2], selev[i]]
        stnodes_dict[key] = values

    return reach_list, stnodes_dict, len(snodes_list), rating_dict
Ejemplo n.º 13
0
if __name__ == '__main__':
    ' Run iwfm_lu4scenario() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        out_base_name = sys.argv[1]
        in_npag_file = sys.argv[2]
        in_ponded_file = sys.argv[3]
        in_urban_file = sys.argv[4]
        in_nvrv_file = sys.argv[5]
    else:  # ask for file names from terminal
        out_base_name  = input('Output file basename: ')
        in_npag_file   = input('IWFM Non-Ponded Ag file name: ')
        in_ponded_file = input('IWFM Pondes Ag file name: ')
        in_urban_file  = input('IWFM Urban file name: ')
        in_nvrv_file   = input('IWFM Native file name: ')

    iwfm.file_test(in_nvrv_file)
    iwfm.file_test(in_npag_file)
    iwfm.file_test(in_ponded_file)
    iwfm.file_test(in_urban_file)

    idb.exe_time()  # initialize timer
    iwfm_lu4scenario(out_base_name,in_npag_file,in_ponded_file,
        in_urban_file,in_nvrv_file,verbose=False)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 14
0
    gis.snodes2shp(nsnodes, stnodes_dict, node_coords, shape_name, verbose=verbose)

    gis.reach2shp(reach_list, stnodes_dict, node_coords, shape_name, verbose=verbose)

    if verbose:
        print(f'  Wrote node, element, stream node and stream reache shapefiles\n')

    return


if __name__ == "__main__":
    ''' Run igsm2shp() from command line '''
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        input_file = sys.argv[1]
        output_basename = sys.argv[2]
    else:  # ask for file names from terminal
        input_file = input('IGSM Preprocessor main file name: ')
        output_basename = input('Output shapefile basename: ')

    iwfm.file_test(input_file)

    idb.exe_time()  # initialize timer
    igsm2shp(input_file, output_basename, verbose=True)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 15
0
            this_line = out_lines[i]
            for j in range(0, len(this_line)):
                f.write(this_line[j])
            f.write('\n')
    return len(out_lines)


if __name__ == '__main__':
    ' Run iwfm_lu2sub() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        elem_file = sys.argv[1]
        lu_file = sys.argv[2]
        out_file = sys.argv[3]

    else:  # ask for file names from terminal
        elem_file = input('IEFM Element file name: ')
        lu_file = input('IWFM land use file name: ')
        out_file = input('Output file name: ')

    iwfm.file_test(elem_file)
    iwfm.file_test(lu_file)

    idb.exe_time()  # initialize timer
    iwfm_lu2sub(elem_file, lu_file, out_file, verbose=True)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 16
0
if __name__ == "__main__":
    ''' Run iwfm_sub_sim() from command line '''
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    verbose = True

    if len(sys.argv) > 1:  # arguments are listed on the command line
        in_sim_file = sys.argv[1]  # old model simulaiton.in file
        elem_pairs_file = sys.argv[2]  # file with element pairs
        out_base_name = sys.argv[3]  # output file base name
    else:  # ask for file names from terminal
        in_sim_file = input('Existing IWFM Simulation.in file: ')
        elem_pairs_file = input('Element pairs file: ')
        out_base_name = input('Output file base name: ')

    # == test that the input files exist
    iwfm.file_test(in_sim_file)
    iwfm.file_test(elem_pairs_file)

    idb.exe_time()  # initialize timer
    iwfm_sub_sim(in_sim_file, elem_pairs_file, out_base_name, verbose=verbose)

    if verbose:
        print(' ')
        print(
            f'  Created submodel {out_base_name} simulation files from {in_sim_file}.'
        )  # update cli
    idb.exe_time()  # print elapsed time
Ejemplo n.º 17
0
                ctypes.byref(has_routed_streams), 
                ctypes.byref(is_for_inquiry), 
                ctypes.byref(status))
    


if __name__ == '__main__':
    ' Run dll_init() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm
    #import iwfm.dll as dll

    if len(sys.argv) > 1:  # arguments are listed on the command line
        dll_path = sys.argv[1]
        preprocessor_file_name = sys.argv[2]
        simulation_file_name = sys.argv[3]

    else:  # ask for file names from terminal
        dll_path               = input('Path to IWFM DLL: ')
        preprocessor_file_name = input('IWFM Preprocessor file name: ')
        simulation_file_name   = input('IWFM Simulation file name: ')

    iwfm.file_test(preprocessor_file_name)
    iwfm.file_test(simulation_file_name)

    idb.exe_time()  # initialize timer
    dll_init(dll_path, preprocessor_file_name, simulation_file_name)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 18
0
        out_file.write('\n')

    if verbose:
        print(f'  Wrote results to {outFileName}\n')

    return


if __name__ == "__main__":
    ''' Run vic_2_table() from command line '''
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        factorsFileName = sys.argv[1]
        output_file = sys.argv[2]
        col = int(sys.argv[3])
    else:                  # ask for file names from terminal
        factorsFileName = input('  P-ET factor file name: ')
        output_file     = input('  Output file name: ')
        col             = input('  Column to process:   ')

    iwfm.file_test(factorsFileName)

    idb.exe_time()  # initialize timer
    vic_2_table(factorsFileName, output_file, col, verbose=True)

    print(f'  Read {factorsFileName} and wrote {output_file}.')  # update cli
    idb.exe_time()  # print elapsed time
Ejemplo n.º 19
0
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        precip_filename = sys.argv[1]
        elem_VIC_filemane = sys.argv[2]
        factors_filename = sys.argv[3]
        years_filename = sys.argv[4]
        out_filename = sys.argv[5]

    else:  # ask for file names from terminal
        precip_filename = input('IWFM Precipitation file name: ')
        elem_VIC_filemane = input('Element-VIC file name: ')
        factors_filename = input('Factors file name: ')
        years_filename = input('Years file name: ')
        out_filename = input('Output file name: ')

    iwfm.file_test(precip_filename)
    iwfm.file_test(elem_VIC_filemane)
    iwfm.file_test(factors_filename)
    iwfm.file_test(years_filename)

    idb.exe_time()  # initialize timer
    iwfm_precip_adj(precip_filename,
                    elem_VIC_filemane,
                    factors_filename,
                    years_filename,
                    out_filename,
                    verbose=True)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 20
0
    import iwfm.debug as idb
    import iwfm as iwfm

    verbose = True

    if len(sys.argv) > 1:  # arguments are listed on the command line
        in_pp_file = sys.argv[1]  # in: old model preprocessor.in file
        elem_pairs_file = sys.argv[2]  # in: file with element pairs
        out_base_name = sys.argv[3]  # output file base name
    else:  # ask for file names from terminal
        in_pp_file = input('Existing IWFM Preprocessor.in file: ')
        elem_pairs_file = input('Element pairs file: ')
        out_base_name = input('Output file base name: ')

    # == test that the input files exist
    iwfm.file_test(in_pp_file)
    iwfm.file_test(elem_pairs_file)

    idb.exe_time()  # initialize timer
    iwfm_sub_preproc(in_pp_file,
                     elem_pairs_file,
                     out_base_name,
                     verbose=verbose)

    if verbose:
        print(' ')
        print(
            f'  Created submodel {out_base_name} preprocessor files from {in_pp_file}'
        )
    idb.exe_time()  # print elapsed time
Ejemplo n.º 21
0
            item = file_lines[line].split()  # read line w/date
            data.append(item)
            end_date = item.pop(0)  # remove the date

    return


if __name__ == '__main__':
    ' Run headall2table() from command line '
    import sys
    import os
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        heads_file = sys.argv[1]
        output_file = sys.argv[2]
        out_date = sys.argv[3]
    else:  # ask for file names from terminal
        heads_file  = input('IWFM Headall file name: ')
        output_file = input('Output file name: ')
        out_date    = input('Output date: ')

    iwfm.file_test(heads_file)

    idb.exe_time()  # initialize timer
    headall2table(heads_file, output_file, out_date)

    print(f'  Read {heads_file} and wrote {output_file}.')  # update cli
    idb.exe_time()  # print elapsed time
Ejemplo n.º 22
0
if __name__ == '__main__':
    ' Run get_node_ids() from command line '
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm
    import iwfm.dll as idll

    if len(sys.argv) > 1:  # arguments are listed on the command line
        dll_path, pre_file, sim_file = sys.argv[1], sys.argv[2], sys.argv[3]

    else:  # ask for file names from terminal
        dll_path = input('Path to IWFM DLL: ')
        pre_file = input('IWFM Preprocessor file name: ')
        sim_file = input('IWFM Simulation file name: ')

    iwfm.file_test(pre_file)
    iwfm.file_test(sim_file)

    idb.exe_time()  # initialize timer

    iwfm_dll = idll.dll_init(dll_path)  # instatiate the IWFM DLL

    status = idll.dll_open(iwfm_dll, pre_file,
                           sim_file)  # instantiate the model

    node_ids, status = get_node_ids(iwfm_dll)

    print(f'  No of node IDs: {len(node_ids):,}')
    print(f'  First node ID: {node_ids[0]:,}')

    idb.exe_time()  # print elapsed time
Ejemplo n.º 23
0
def igsm2shp(main_file, shape_name, verbose=False):
    ''' igsm2shp() - Read the names of the preprocessor component input files, 
        read the contents of these files, and create node, element, stream 
        node and stream reach shapefiles

    Parameters
    ----------
    main_file : str
        IGSM Preprocessor input file name
    
    shape_name : str
        output shapefiles base name

    Returns
    -------
    nothing

    '''

    import iwfm as iwfm
    import iwfm.gis as gis

    main_lines = open(main_file).read().splitlines() 
    line_index = iwfm.skip_ahead(0, main_lines, 6)
    elem_file = main_lines[line_index].split()[0]
    line_index += 1
    node_file = main_lines[line_index].split()[0]
    line_index += 1
    strat_file = main_lines[line_index].split()[0]
    line_index += 1
    stream_file = main_lines[line_index].split()[0]
    line_index += 1
    lake_file = main_lines[line_index].split()[0]
    if lake_file[0] == '/': # no lake file listed
        lake_file = ''
    line_index += 2
    char_file = main_lines[line_index].split()[0]

    iwfm.file_test(elem_file)
    iwfm.file_test(node_file)
    iwfm.file_test(strat_file)
    iwfm.file_test(stream_file)
    if len(lake_file) > 1:
        iwfm.file_test(lake_file)
    iwfm.file_test(char_file)


    elem_nodes, elem_list = iwfm.igsm_read_elements(elem_file)
    if verbose:
        print(f'  Read nodes of {len(elem_nodes):,} elements from {elem_file}')

    node_coords, node_list = iwfm.igsm_read_nodes(node_file)
    if verbose:
        print(f'  Read coordinates of {len(node_coords):,} nodes from {node_file}')

    elem_char = iwfm.igsm_read_chars(char_file, elem_nodes)
    if verbose:
        print(f'  Read characteristics for {len(elem_char):,} elements from {char_file}')

    node_strat, nlayers = iwfm.igsm_read_strat(strat_file, node_coords)
    if verbose:
        print(f'  Read stratigraphy for {len(node_strat):,} nodes from {strat_file}')

    if len(lake_file) > 1:
        lake_elems, lakes = iwfm.igsm_read_lake(lake_file)
        if verbose:
            if len(lakes) > 1:
                print(f'  Read info for {len(lakes):,} lakes from {lake_file}')
            elif len(lakes) == 1:
                print(f'  Read info for {len(lakes):,} lake from {lake_file}')
    else:
        lake_elems = [[0,0,0]]  
        if verbose:
            print(f'  No lakes')

    reach_list, stnodes_dict, nsnodes = iwfm.igsm_read_streams(stream_file)
    if verbose:
        print(f'  Read info for {len(reach_list):,} stream reaches and {nsnodes:,} stream nodes from {stream_file}\n')


    gis.nodes2shp(node_coords, node_strat, nlayers, shape_name, verbose=verbose)

    gis.igsm_elem2shp(elem_nodes,node_coords,elem_char,lake_elems,
        shape_name,verbose=verbose)

    gis.snodes2shp(nsnodes, stnodes_dict, node_coords, shape_name, verbose=verbose)

    gis.reach2shp(reach_list, stnodes_dict, node_coords, shape_name, verbose=verbose)

    if verbose:
        print(f'  Wrote node, element, stream node and stream reache shapefiles\n')

    return
Ejemplo n.º 24
0
            if len(line) > 10:
                value = mydict.get(items[0][0 : line.find(',')])
                if value is not None:
                    outfile.write(line)
                    lines_out = lines_out + 1
    if verbose:
        print(f'Processed {lines_in:,} lines from {waterlevel_file}')
        print(f'Wrote {lines_out:,} lines to {output_file}')
    return

if __name__ == '__main__':
    ' Run wdl_ts_4_wells() from command line'
    import sys
    import iwfm.debug as idb
    import iwfm as iwfm

    if len(sys.argv) > 1:  # arguments are listed on the command line
        station_file = sys.argv[1]
        waterlevel_file = sys.argv[2]
    else:  # ask for file names from terminal
        station_file = input('Well station file name: ')
        waterlevel_file   = input('Water level file name: ')

    iwfm.file_test(station_file)  
    iwfm.file_test(waterlevel_file)

    idb.exe_time()  # initialize timer
    iwfm.wdl_ts_4_wells(station_file, waterlevel_file, verbose=True)

    idb.exe_time()  # print elapsed time
Ejemplo n.º 25
0
def iwfm_lu2sub(elem_file,
                lu_file,
                out_file,
                skip=4,
                verbose=False,
                per_line=6):
    ''' iwfm_IWFM_lu2sub() - Read an IWFM Preprocessor Element File for a 
        submodel and an IWFM Land Use File for the base model, and write 
        a new land use file with land use for only the elements in the 
        Elements File

    Parameters
    ----------
    elem_file : str
        IWFM submodel Preprocessor Element file name
    
    lu_file : str
        IWFM base model land use area file
    
    out_file : str
        IWFM submodel land use area file name (output)
    
    skip : int, default=4
        number of non-comment lines to skip in each file
    
    verbose : bool, default=False
        True = command-line output on

    per_line : int, default=6
        if verbose==True, items per line to write to the console
    
    Returns
    -------
    nothing
    
    '''
    import sys, re, os
    import iwfm as iwfm

    iwfm.file_test(elem_file)
    iwfm.file_test(lu_file)

    elem_ids, _, _ = iwfm.iwfm_read_elements(elem_file)
    elem_ids.sort()

    lu_lines = open(lu_file).read().splitlines()  # open and read input file
    line_index = iwfm.skip_ahead(0, lu_lines, 4)  # skip comments
    header = line_index

    if verbose:
        outport = iwfm.Unbuffered(
            sys.stdout)  # to write unbuffered output to console

    out_lines, print_count = [], 0
    while line_index < len(lu_lines):
        out = []
        this_line = lu_lines[line_index].split()
        if re.search('/', lu_lines[line_index]):  # catch date
            this_date = this_line.pop(0)

            if verbose:  # write progress to console
                if print_count > per_line - 2:
                    outport.write(' ' + this_date[:10])
                    print_count = 0
                else:
                    if print_count == 0:
                        outport.write('\n  ' + this_date[:10])
                    else:
                        outport.write(' ' + this_date[:10])
                    print_count += 1

        # -- build the output line
        if int(this_line[0]) in elem_ids:
            if int(this_line[0]) == elem_ids[0]:  # first element -> add date
                out.append(this_date)
            for j in range(0, len(this_line)):  # add the rest of the line
                out.append('\t' + this_line[j])
            out_lines.append(out)
        line_index += 1
    outport.write('\n')

    with open(out_file, 'w') as f:
        for i in range(0, header):  # copy top of input file to output
            f.write(lu_lines[i])
            f.write('\n')
        for i in range(0, len(out_lines)):
            this_line = out_lines[i]
            for j in range(0, len(this_line)):
                f.write(this_line[j])
            f.write('\n')
    return len(out_lines)
Ejemplo n.º 26
0
        in_chg_file_UR = sys.argv[4]
        in_area_npag = sys.argv[5]
        in_area_nvrv = sys.argv[6]
        in_area_urban = sys.argv[7]
        out_basename = sys.argv[8]
    else:  # ask for file names from terminal
        in_year = input('Year: ')
        in_zone_file = input('Zone file name: ')
        in_chg_file_NV = input('Ag to Native change factors file name: ')
        in_chg_file_UR = input('Ag to Urban change factors file name: ')
        in_area_npag = input('Input Ag file name: ')
        in_area_nvrv = input('Input Native file name: ')
        in_area_urban = input('Input Urban file name: ')
        out_basename = input('Output file base name: ')

    iwfm.file_test(in_zone_file)
    iwfm.file_test(in_chg_file_NV)
    iwfm.file_test(in_chg_file_UR)
    iwfm.file_test(in_area_npag)
    iwfm.file_test(in_area_nvrv)
    iwfm.file_test(in_area_urban)

    idb.exe_time()  # initialize timer
    iwfm_adj_crops(
        in_year,
        in_zone_file,
        in_chg_file_NV,
        in_chg_file_UR,
        in_area_npag,
        in_area_nvrv,
        in_area_urban,