|
12 | 12 | f is speed n moves along x, and |
13 | 13 | g lumps sources and sinks |
14 | 14 |
|
15 | | - functionally, n(x; t), f(x), and g(x; t; n) |
| 15 | + functionally, n(x; t), f(x), and g(n; x) |
16 | 16 |
|
17 | 17 | note, fn is the flux across x. |
18 | 18 |
|
19 | 19 | Usage: |
20 | | - >>> from hypersolver import select_solver |
21 | | - >>> solver = select_solver(method) |
| 20 | + >>> from hypersolver import solver |
22 | 21 | >>> solver(n0, x, t, f, g, **kwargs) |
| 22 | + >>> # kwargs include "method", "backend", etc. |
23 | 23 |
|
24 | | - available methods: |
| 24 | + available `method`s: |
| 25 | + pde: |
25 | 26 | - "lax_friedrichs" (default) |
26 | | - - "lax_wendroff" (still unstable, wip) |
27 | | - - "method_of_characteristics" (experimental) |
| 27 | + - "lax_wendroff" |
| 28 | + - "method_of_characteristics" (broken, experimental) |
| 29 | + ode: |
| 30 | + - "rk2" |
28 | 31 |
|
| 32 | + available `backend`s: |
| 33 | + - "numpy" (default) |
| 34 | + - "jax" (experimental) |
| 35 | +
|
| 36 | + available `solver_type`s: |
| 37 | + - "unsplit" (default) |
| 38 | + - "split" |
29 | 39 | """ |
30 | 40 |
|
| 41 | +import os |
| 42 | + |
| 43 | +from hypersolver.pde_solver_unsplit import solver_ as solver_upde |
| 44 | +# from hypersolver.pde_solver_split import solver_ as solver_spde |
| 45 | +from hypersolver.ode_solver import solver_ as solver_ode |
31 | 46 |
|
32 | | -__version__ = "0.0.4" |
33 | 47 |
|
34 | | -__hyper_solvers__ = [ |
| 48 | +__version__ = "0.0.5" |
| 49 | + |
| 50 | +__hyper_methods__ = [ |
35 | 51 | "lax_friedrichs", |
36 | 52 | "lax_wendroff", |
37 | 53 | "method_of_characteristics", |
| 54 | + "rk2", |
38 | 55 | ] |
39 | 56 |
|
40 | | -from hypersolver.step_solver import solver_ |
| 57 | +__hyper_solver_types__ = [ |
| 58 | + "unsplit", |
| 59 | + "split", |
| 60 | +] |
41 | 61 |
|
42 | 62 |
|
43 | | -def solver(*args, method="lax_friedrichs", **kwargs): |
| 63 | +def solver( |
| 64 | + *args, |
| 65 | + method="lax_friedrichs", |
| 66 | + backend=os.environ.get("HS_BACKEND", "numpy"), |
| 67 | + verbosity=os.environ.get("HS_VERBOSITY", "0"), |
| 68 | + solver_type="unsplit", |
| 69 | + **kwargs |
| 70 | +): |
44 | 71 | """ wrapper function to select solvers """ |
45 | | - if method not in __hyper_solvers__: |
| 72 | + |
| 73 | + os.environ["HS_BACKEND"] = str(backend) |
| 74 | + os.environ["HS_VERBOSITY"] = str(verbosity) |
| 75 | + |
| 76 | + if method not in __hyper_methods__ or \ |
| 77 | + solver_type not in __hyper_solver_types__: |
46 | 78 | raise ValueError("method not supported") |
47 | | - return solver_(*args, method=method, **kwargs) |
| 79 | + |
| 80 | + if method.startswith("rk"): |
| 81 | + return solver_ode(*args, method=method, **kwargs) |
| 82 | + # if method.endswith("_split"): |
| 83 | + # return solver_spde(*args, method=method, **kwargs) |
| 84 | + return solver_upde( |
| 85 | + *args, |
| 86 | + method=method, |
| 87 | + **kwargs |
| 88 | + ) |
0 commit comments