def test_natural_boundary_conditions(cond, is_value): """test special automatic boundary conditions""" g = UnitGrid([2, 2], periodic=[True, False]) for bc in [ Boundaries.from_data(g, cond), Boundaries.from_data(g, ["periodic", cond]), ]: assert isinstance(bc[0], BoundaryPeriodic) if is_value: assert bc[1] == BoundaryPair.from_data(g, 1, "value") else: assert bc[1] == BoundaryPair.from_data(g, 1, "derivative")
def test_boundary_pair(): """test setting boundary conditions for whole axis""" g = UnitGrid([2, 3]) b = ["value", {"type": "derivative", "value": 1}] for bl, bh in itertools.product(b, b): bc = BoundaryPair.from_data(g, 0, [bl, bh]) blo = BCBase.from_data(g, 0, upper=False, data=bl) bho = BCBase.from_data(g, 0, upper=True, data=bh) assert bc.low == blo assert bc.high == bho assert bc == BoundaryPair(blo, bho) if bl == bh: assert bc == BoundaryPair.from_data(g, 0, bl) assert list(bc) == [blo, bho] bc.check_value_rank(0) with pytest.raises(RuntimeError): bc.check_value_rank(1) data = {"low": {"value": 1}, "high": {"derivative": 2}} bc1 = BoundaryPair.from_data(g, 0, data) bc2 = BoundaryPair.from_data(g, 0, data) assert bc1 == bc2 and bc1 is not bc2 bc2 = BoundaryPair.from_data(g, 1, data) assert bc1 != bc2 and bc1 is not bc2 # miscellaneous methods data = {"low": {"value": 0}, "high": {"derivative": 0}} bc1 = BoundaryPair.from_data(g, 0, data) b_lo, b_hi = bc1 assert b_lo == BCBase.from_data(g, 0, False, {"value": 0}) assert b_hi == BCBase.from_data(g, 0, True, {"derivative": 0}) assert b_lo is bc1[0] assert b_lo is bc1[False] assert b_hi is bc1[1] assert b_hi is bc1[True]