Пример #1
0
def test_diffusion():
    inputs = ModelParameterDictionary(os.path.join(_THIS_DIR,
                                                   'diffusion_params.txt'))
    nrows = inputs.read_int('nrows')
    ncols = inputs.read_int('ncols')
    dx = inputs.read_float('dx')
    dt = inputs.read_float('dt')
    time_to_run = inputs.read_float('run_time')
    init_elev = inputs.read_float('init_elev')

    mg = RasterModelGrid((nrows, ncols), (dx, dx))
    uplift_rate = mg.node_y[mg.core_cells] / 100000.

    # create the fields in the grid
    mg.add_zeros('topographic__elevation', at='node')
    z = mg.zeros(at='node') + init_elev
    np.random.seed(0)
    mg['node']['topographic__elevation'] = z + np.random.rand(len(z)) / 1000.

    mg.set_fixed_value_boundaries_at_grid_edges(True, True, True, True)

    # instantiate:
    dfn = LinearDiffuser(mg, inputs)

    # perform the loop:
    elapsed_time = 0.  # total time in simulation
    while elapsed_time < time_to_run:
        if elapsed_time + dt > time_to_run:
            dt = time_to_run - elapsed_time
        dfn.diffuse(dt)
        mg.at_node['topographic__elevation'][mg.core_nodes] += uplift_rate * dt
        elapsed_time += dt

    z_target = np.array([5.48813504e-04,   7.15189366e-04,   6.02763376e-04,
                         5.44883183e-04,   4.23654799e-04,   6.45894113e-04,
                         4.37587211e-04,   8.91773001e-04,   9.63662761e-04,
                         3.83441519e-04,   7.91725038e-04,   9.17712569e-04,
                         1.02071232e-03,   1.10556005e-03,   1.14946096e-03,
                         1.20022436e-03,   1.12938983e-03,   1.12734463e-03,
                         1.00699946e-03,   8.70012148e-04,   9.78618342e-04,
                         1.12639399e-03,   1.41449092e-03,   2.66410106e-03,
                         2.80054364e-03,   2.82446032e-03,   2.68730913e-03,
                         2.44468915e-03,   2.03932919e-03,   4.14661940e-04,
                         2.64555612e-04,   2.14829293e-03,   2.77874345e-03,
                         3.21568734e-03,   3.45767578e-03,   4.46407381e-03,
                         4.25087300e-03,   3.82133955e-03,   3.24905386e-03,
                         6.81820299e-04,   3.59507901e-04,   3.36368061e-03,
                         4.19756389e-03,   4.81101469e-03,   5.12991298e-03,
                         5.14551834e-03,   4.82212362e-03,   5.21733341e-03,
                         4.36590155e-03,   3.63710771e-04,   5.70196770e-04,
                         4.64503306e-03,   5.67212626e-03,   6.43364397e-03,
                         6.85196170e-03,   6.84719792e-03,   6.44199511e-03,
                         5.63718526e-03,   4.53705235e-03,   2.44425592e-04,
                         1.58969584e-04,   5.85390586e-03,   7.15167925e-03,
                         8.09808225e-03,   8.58987393e-03,   8.60040722e-03,
                         8.08353544e-03,   7.11357773e-03,   5.74363061e-03,
                         9.60984079e-05,   9.76459465e-04,   6.28409752e-03,
                         7.69302638e-03,   9.77162122e-03,   1.03665461e-02,
                         1.03596559e-02,   9.77581391e-03,   8.63184402e-03,
                         7.06221620e-03,   1.18727719e-04,   3.17983179e-04,
                         7.42141185e-03,   9.16089943e-03,   1.04492602e-02,
                         1.11235269e-02,   1.21428645e-02,   1.14619409e-02,
                         1.01991149e-02,   8.52209581e-03,   9.29296198e-04,
                         3.18568952e-04,   8.66507665e-03,   1.06513243e-02,
                         1.20945739e-02,   1.28805314e-02,   1.28817803e-02,
                         1.21355585e-02,   1.16763419e-02,   9.65364442e-03,
                         4.69547619e-06,   6.77816537e-04,   9.99969455e-03,
                         1.21210512e-02,   1.37222525e-02,   1.45639747e-02,
                         1.45899214e-02,   1.37503063e-02,   1.21879324e-02,
                         1.00970967e-02,   9.52749012e-04,   4.47125379e-04,
                         1.11861039e-02,   1.35273547e-02,   1.52388381e-02,
                         1.61710069e-02,   1.61700373e-02,   1.52797248e-02,
                         1.35608698e-02,   1.12630871e-02,   6.92531590e-04,
                         7.25254280e-04,   1.14112447e-02,   1.38209264e-02,
                         1.66345746e-02,   1.75854796e-02,   1.76037603e-02,
                         1.66317633e-02,   1.48117588e-02,   1.22941311e-02,
                         2.90077607e-04,   6.18015429e-04,   1.24651035e-02,
                         1.49479969e-02,   1.67762718e-02,   1.77682020e-02,
                         1.87567995e-02,   1.77826641e-02,   1.59106401e-02,
                         1.33841504e-02,   4.31418435e-04,   8.96546596e-04,
                         1.34298871e-02,   1.58121125e-02,   1.76176213e-02,
                         1.85627061e-02,   1.85694232e-02,   1.75911811e-02,
                         1.67878955e-02,   1.43993331e-02,   9.98847007e-04,
                         1.49448305e-04,   1.40269701e-02,   1.63483655e-02,
                         1.80226762e-02,   1.89156586e-02,   1.88916976e-02,
                         1.79880403e-02,   1.62672916e-02,   1.39254090e-02,
                         6.91669955e-05,   6.97428773e-04,   1.46967049e-02,
                         1.65718319e-02,   1.79957330e-02,   1.87279193e-02,
                         1.87059832e-02,   1.79052307e-02,   1.64399258e-02,
                         1.44435378e-02,   1.71629677e-04,   5.21036606e-04,
                         1.40296771e-02,   1.54293506e-02,   1.75066749e-02,
                         1.80476077e-02,   1.79866098e-02,   1.73732550e-02,
                         1.62714602e-02,   1.47877073e-02,   3.18389295e-05,
                         1.64694156e-04,   1.41367998e-02,   1.49517470e-02,
                         1.57129817e-02,   1.59700260e-02,   1.68585204e-02,
                         1.64421520e-02,   1.58441873e-02,   1.50473253e-02,
                         3.11944995e-04,   3.98221062e-04,   2.09843749e-04,
                         1.86193006e-04,   9.44372390e-04,   7.39550795e-04,
                         4.90458809e-04,   2.27414628e-04,   2.54356482e-04,
                         5.80291603e-05,   4.34416626e-04])

    assert_array_almost_equal(mg.at_node['topographic__elevation'], z_target)