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
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)
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)
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)
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