예제 #1
0
def create_sfr_data():
    dtype = np.dtype([('k', int),
             ('i', int),
             ('j', int),
             ('iseg', int),
             ('ireach', int)])
    r = create_empty_recarray(27, dtype=dtype)
    r['i'] = [3, 4, 5,
              7, 8, 9,
              0, 1, 2,
              4, 4, 5,
              0, 0, 0,
              3, 4, 5,
              0, 1, 2,
              4, 5, 6,
              2, 2, 2]
    r['j'] = [0, 1, 2,
              6, 6, 6,
              6, 6, 6,
              3, 4, 5,
              9, 8, 7,
              6, 6, 6,
              0, 0, 0,
              6, 6, 6,
              9, 8, 7]
    r['iseg'] = sorted(list(range(1, 10)) * 3)
    r['ireach'] = [1, 2, 3] * 9

    d = create_empty_recarray(9, dtype=np.dtype([('nseg', int), ('outseg', int)]))
    d['nseg'] = range(1, 10)
    d['outseg'] = [4, 0, 6, 8, 3, 8, 1, 2, 8]
    return r, d
예제 #2
0
파일: t009_test.py 프로젝트: aleaf/flopy
def create_sfr_data():
    dtype = np.dtype([('k', int),
             ('i', int),
             ('j', int),
             ('iseg', int),
             ('ireach', int)])
    r = create_empty_recarray(27, dtype=dtype)
    r['i'] = [3, 4, 5,
              7, 8, 9,
              0, 1, 2,
              4, 4, 5,
              0, 0, 0,
              3, 4, 5,
              0, 1, 2,
              4, 5, 6,
              2, 2, 2]
    r['j'] = [0, 1, 2,
              6, 6, 6,
              6, 6, 6,
              3, 4, 5,
              9, 8, 7,
              6, 6, 6,
              0, 0, 0,
              6, 6, 6,
              9, 8, 7]
    r['iseg'] = sorted(list(range(1, 10)) * 3)
    r['ireach'] = [1, 2, 3] * 9

    d = create_empty_recarray(9, dtype=np.dtype([('nseg', int), ('outseg', int)]))
    d['nseg'] = range(1, 10)
    d['outseg'] = [4, 0, 6, 8, 3, 8, 1, 2, 8]
    return r, d
예제 #3
0
    def get_empty(numrecords, maxells=0, block="well"):
        """
        Creates an empty record array corresponding to the block data type
        it is associated with.

        Parameters
        ----------
        numrecords : int
            number of records to create recarray with
        maxells : int, optional
            maximum number of irrigation links
        block : str
            str which indicates data set valid options are
            "well" ,
            "tabfile_well" ,
            "timeseries" ,
            "irrdiversion" ,
            "irrwell" ,
            "supwell"

        Returns:
            np.recarray

        """
        dtype = ModflowAg.get_default_dtype(maxells=maxells, block=block)
        return create_empty_recarray(numrecords, dtype, default_value=-1.0e10)
예제 #4
0
def test_sfr_renumbering():
    # test segment renumbering

    dtype = np.dtype([('iseg', int), ('ireach', int)])
    r = create_empty_recarray(27, dtype)
    r['iseg'] = sorted(list(range(1, 10)) * 3)
    r['ireach'] = [1, 2, 3] * 9

    dtype = np.dtype([('nseg', int), ('outseg', int)])
    d = create_empty_recarray(9, dtype)
    d['nseg'] = range(1, 10)
    d['outseg'] = [4, 0, 6, 8, 3, 8, 1, 2, 8]
    m = flopy.modflow.Modflow()
    sfr = flopy.modflow.ModflowSfr2(m, reach_data=r, segment_data={0: d})
    chk = sfr.check()
    assert 'segment numbering order' in chk.warnings
    sfr.renumber_segments()
    chk = sfr.check()
    assert 'continuity in segment and reach numbering' in chk.passed
    assert 'segment numbering order' in chk.passed

    # test renumbering non-consecutive segment numbers
    r['iseg'] *= 2
    r['ireach'] = [1, 2, 3] * 9

    dtype = np.dtype([('nseg', int), ('outseg', int)])
    d = create_empty_recarray(9, dtype)
    d['nseg'] = np.arange(1, 10) * 2
    d['outseg'] = np.array([4, 0, 6, 8, 3, 8, 1, 2, 8]) * 2
    m = flopy.modflow.Modflow()
    sfr = flopy.modflow.ModflowSfr2(m, reach_data=r, segment_data={0: d})
    chk = sfr.check()
    assert 'segment numbering order' in chk.warnings
    sfr.renumber_segments()
    chk = sfr.check()
    assert 'continuity in segment and reach numbering' in chk.passed
    assert 'segment numbering order' in chk.passed

    # test computing of outreaches
    assert np.array_equal(
        sfr.reach_data.outreach,
        np.array([
            2, 3, 7, 5, 6, 10, 8, 9, 16, 11, 12, 19, 14, 15, 22, 17, 18, 22,
            20, 21, 22, 23, 24, 25, 26, 27, 0
        ]))
    # test slope
    sfr.reach_data['rchlen'] = [10] * 3 * 5 + [100] * 2 * 3 + [1] * 2 * 3
    strtop = np.zeros(len(sfr.reach_data))
    strtop[2] = .3
    strtop[21] = -.2
    strtop[22] = -.4
    sfr.reach_data['strtop'] = strtop
    default_slope = .0001
    sfr.get_slopes(default_slope=default_slope)
    sl1 = sfr.reach_data.slope[2]

    def isequal(v1, v2):
        return np.abs(v1 - v2) < 1e-6

    assert isequal(sfr.reach_data.slope[2], 0.03)
    assert isequal(sfr.reach_data.slope[14], 0.02)
    assert isequal(sfr.reach_data.slope[20], sfr.reach_data.slope[17])
    assert isequal(sfr.reach_data.slope[21], 0.2)
    assert isequal(sfr.reach_data.slope[-1], default_slope)
예제 #5
0
파일: t009_test.py 프로젝트: aleaf/flopy
def test_sfr_renumbering():
    # test segment renumbering

    dtype = np.dtype([('iseg', int), ('ireach', int)])
    r = create_empty_recarray(27, dtype)
    r['iseg'] = sorted(list(range(1, 10)) * 3)
    r['ireach'] = [1, 2, 3] * 9

    dtype = np.dtype([('nseg', int), ('outseg', int)])
    d = create_empty_recarray(9, dtype)
    d['nseg'] = range(1, 10)
    d['outseg'] = [4, 0, 6, 8, 3, 8, 1, 2, 8]
    m = flopy.modflow.Modflow()
    sfr = flopy.modflow.ModflowSfr2(m, reach_data=r, segment_data={0: d})
    chk = sfr.check()
    assert 'segment numbering order' in chk.warnings
    sfr.renumber_segments()
    chk = sfr.check()
    assert 'continuity in segment and reach numbering' in chk.passed
    assert 'segment numbering order' in chk.passed

    # test renumbering non-consecutive segment numbers
    r['iseg'] *= 2
    r['ireach'] = [1, 2, 3] * 9

    dtype = np.dtype([('nseg', int), ('outseg', int)])
    d = create_empty_recarray(9, dtype)
    d['nseg'] = np.arange(1, 10) * 2
    d['outseg'] = np.array([4, 0, 6, 8, 3, 8, 1, 2, 8]) * 2
    m = flopy.modflow.Modflow()
    sfr = flopy.modflow.ModflowSfr2(m, reach_data=r, segment_data={0: d})
    chk = sfr.check()
    assert 'segment numbering order' in chk.warnings
    sfr.renumber_segments()
    chk = sfr.check()
    assert 'continuity in segment and reach numbering' in chk.passed
    assert 'segment numbering order' in chk.passed

    # test computing of outreaches
    assert np.array_equal(sfr.reach_data.outreach,
                          np.array([2, 3, 7,
                                    5, 6, 10,
                                    8, 9, 16,
                                    11, 12, 19,
                                    14, 15, 22,
                                    17, 18, 22,
                                    20, 21, 22,
                                    23, 24, 25,
                                    26, 27, 0]))
    # test slope
    sfr.reach_data['rchlen'] = [10] * 3 * 5 + [100] * 2 * 3 + [1] * 2 * 3
    strtop = np.zeros(len(sfr.reach_data))
    strtop[2] = .3
    strtop[21] = -.2
    strtop[22] = -.4
    sfr.reach_data['strtop'] = strtop
    default_slope = .0001
    sfr.get_slopes(default_slope=default_slope)
    sl1 = sfr.reach_data.slope[2]
    def isequal(v1, v2):
        return np.abs(v1-v2) < 1e-6
    assert isequal(sfr.reach_data.slope[2], 0.03)
    assert isequal(sfr.reach_data.slope[14], 0.02)
    assert isequal(sfr.reach_data.slope[20], sfr.reach_data.slope[17])
    assert isequal(sfr.reach_data.slope[21], 0.2)
    assert isequal(sfr.reach_data.slope[-1], default_slope)
예제 #6
0
def create_sfr_data():
    dtype = np.dtype([("k", int), ("i", int), ("j", int), ("iseg", int),
                      ("ireach", int)])
    r = create_empty_recarray(27, dtype=dtype)
    r["i"] = [
        3,
        4,
        5,
        7,
        8,
        9,
        0,
        1,
        2,
        4,
        4,
        5,
        0,
        0,
        0,
        3,
        4,
        5,
        0,
        1,
        2,
        4,
        5,
        6,
        2,
        2,
        2,
    ]
    r["j"] = [
        0,
        1,
        2,
        6,
        6,
        6,
        6,
        6,
        6,
        3,
        4,
        5,
        9,
        8,
        7,
        6,
        6,
        6,
        0,
        0,
        0,
        6,
        6,
        6,
        9,
        8,
        7,
    ]
    r["iseg"] = sorted(list(range(1, 10)) * 3)
    r["ireach"] = [1, 2, 3] * 9

    d = create_empty_recarray(9,
                              dtype=np.dtype([("nseg", int), ("outseg", int)]))
    d["nseg"] = range(1, 10)
    d["outseg"] = [4, 0, 6, 8, 3, 8, 1, 2, 8]
    return r, d