| |
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 ) |