File: test_physical.py

package info (click to toggle)
meep-openmpi 1.25.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 64,556 kB
  • sloc: cpp: 32,214; python: 27,958; lisp: 1,225; makefile: 505; sh: 249; ansic: 131; javascript: 5
file content (53 lines) | stat: -rw-r--r-- 1,367 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import unittest

import meep as mp


class TestPhysical(unittest.TestCase):
    def test_physical(self):

        a = 10.0
        ymax = 3.0
        xmax = 8.0
        dx = 2.0
        w = 0.30

        cell_size = mp.Vector3(xmax, ymax)
        pml_layers = [mp.PML(ymax / 3.0)]

        sources = [
            mp.Source(
                src=mp.ContinuousSource(w),
                component=mp.Ez,
                center=mp.Vector3(-dx),
                size=mp.Vector3(),
            )
        ]

        sim = mp.Simulation(
            cell_size=cell_size,
            resolution=a,
            boundary_layers=pml_layers,
            sources=sources,
            force_complex_fields=True,
        )
        sim.init_sim()
        sim.solve_cw(tol=1e-5 if mp.is_single_precision() else 1e-6)

        p1 = mp.Vector3()
        p2 = mp.Vector3(dx)

        amp1 = sim.get_field_point(mp.Ez, p1)
        amp2 = sim.get_field_point(mp.Ez, p2)

        ratio = abs(amp1) / abs(amp2)
        ratio = ratio**2  # in 2d, decay is ~1/sqrt(r), so square to get 1/r

        fail_fmt = "Failed: amp1 = ({}, {}), amp2 = ({}, {})\nabs(amp1/amp2){} = {}, too far from 2.0"
        fail_msg = fail_fmt.format(amp1.real, amp1, amp2.real, amp2, "^2", ratio)

        self.assertTrue(ratio <= 2.12 and ratio >= 1.88, fail_msg)


if __name__ == "__main__":
    unittest.main()