In [ ]:
import numpy as np
import matplotlib.pyplot as plt
from finitediff.grid import adapted_grid, plot_convergence
from finitediff.grid.tests._common import g, g2
%matplotlib inline

In [ ]:
plot_convergence('grid_additions', [(32,), (32, 0, 0, 0), (32, 0, 0, 0, 0, 0, 0)], g,
                 extremum_refinement='max')

In [ ]:
plot_convergence('grid_additions', [(32,), (16, 16), (8, 8, 8, 8)], g,
                 extremum_refinement=(np.argmax, 2, lambda y, i: True))

In [ ]:
plot_convergence('grid_additions', [(32,), (32, 0), (32, 0, 0)], g,
                 extremum_refinement=(np.argmax, 4, lambda y, i: True))

In [ ]:
plot_convergence('extremum_refinement', [(np.argmax, n, lambda y, i: True) for n in (0, 1, 2, 4, 8)], g,
                 grid_additions=(8, 8, 8, 8))

In [ ]:
def predicate(y, i):
    pred = np.all([v*1.2 < y[i] for j, v in enumerate(y) if j != i])
    print(pred)
    return pred
extremum_refiners = [(np.argmax, n, predicate) for n in (0, 1, 2, 4, 8)]
plot_convergence('extremum_refinement', extremum_refiners, g, grid_additions=(8, 0, 0, 0))

In [ ]:
plot_convergence('extremum_refinement', extremum_refiners, g, grid_additions=(16, 0, 0, 0))

In [ ]:
plot_convergence('extremum_refinement', extremum_refiners, g, grid_additions=(32, 0, 0, 0))

In [ ]:
def predicate2(y, i):
    ok = True
    if i > 0:
        ok = ok and y[i - 1] < y[i]*0.7
    if i < y.size - 1:
        ok = ok and y[i + 1] < y[i]*0.7
    print(ok)
    return ok

extremum_refiners2 = [(np.argmax, n, predicate2) for n in (0, 1, 2, 4, 8)]
plot_convergence('extremum_refinement', extremum_refiners2, g, grid_additions=(16, 0, 0, 0))