Wed, 22 Apr 2026 23:46:40 -0500
Add packaging script, remove alg_tools, measures, and pointsource_pde installation instruction from README.
| 12 | 1 | # |
| 2 | # Laser and mirrors convection-diffusion experiment with known diffusivity and convectivity | |
| 3 | # | |
| 4 | import laser_and_mirrors_aux | |
| 5 | import numpy as np | |
| 6 | from laser_and_mirrors_aux import generic_setup, reg_params | |
| 7 | from measures import DiscreteMeasure_2_f64 | |
| 8 | from pointsource_pde import Problem, RegTerm | |
| 9 | from pointsource_pde.compose import ( | |
| 10 | ComposeFnWithOperator, | |
| 11 | InjectSecond, | |
| 12 | ) | |
| 13 | ||
| 14 | # Give name to the problem | |
| 15 | name = "laser_and_mirrors2" | |
| 16 | ||
| 17 | # Override algorithm settings | |
| 18 | algorithm_overrides = laser_and_mirrors_aux.algorithm_overrides | |
| 19 | ||
| 20 | ||
| 21 | # Setup the problem | |
| 22 | def setup( | |
| 23 | prefix, | |
| 24 | alpha=reg_params["alpha"], | |
| 25 | c_noise=reg_params["c_noise"], | |
| 26 | k_noise=reg_params["k_noise"], | |
| 27 | noise=reg_params["noise"], | |
| 28 | seed=reg_params["seed"], | |
| 29 | sim_oversample=reg_params["sim_oversample"], | |
| 30 | sim_oversample_time=reg_params["sim_oversample_time"], | |
| 31 | ): | |
| 32 | rng = np.random.default_rng(seed=seed) | |
| 33 | ||
| 34 | dat, auxtrue, aux0, _μ_bound, μ_true, plot_factory, pde = generic_setup( | |
| 35 | prefix, | |
| 36 | rng=rng, | |
| 37 | μ_true=DiscreteMeasure_2_f64([([0.2, 0.3], 0.15), ([0.4, 0.1], 0.04)]), | |
| 38 | k=0.02, | |
| 39 | r=0.1, | |
| 40 | θ=120 * np.pi / 180, | |
| 41 | c_noise=c_noise, | |
| 42 | k_noise=k_noise, | |
| 43 | noise=noise, | |
| 44 | sim_oversample=sim_oversample, | |
| 45 | sim_oversample_time=sim_oversample_time, | |
| 46 | ) | |
| 47 | ||
| 48 | reg = RegTerm.NonnegRadon(alpha) | |
| 49 | ||
| 50 | μ0 = DiscreteMeasure_2_f64([]) | |
| 51 | ||
| 52 | dat_simple = ComposeFnWithOperator(dat, InjectSecond(auxtrue)) | |
| 53 | dat_simple.curvature_bound_components = lambda: (None, None, None) | |
| 54 | dat_simple.override_lipschitz = 1.0 | |
| 55 | ||
| 56 | print("Initial data term value:", dat_simple.apply(μ0)) | |
| 57 | print("Data term value at true μ:", dat_simple.apply(μ_true)) | |
| 58 | ||
| 59 | return Problem( | |
| 60 | dat_simple, | |
| 61 | reg, | |
| 62 | None, | |
| 63 | None, | |
| 64 | μ0, | |
| 65 | plot_factory=plot_factory, | |
| 66 | domain=pde.domain_dims, | |
| 67 | ) |