File: group-velocity.ctl

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 (39 lines) | stat: -rw-r--r-- 1,466 bytes parent folder | download | duplicates (8)
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
;; compute group velocity of a waveguide mode using two different methods
;; (1) ratio of Poynting flux to energy density
;; (2) via MPB from get-eigenmode-coefficients

(set-param! resolution 20)

(set! geometry-lattice (make lattice (size 10 5 no-size)))

(set! geometry (list (make block
                       (center 0 0 0)
                       (size infinity 1 infinity)
                       (material (make medium (epsilon 12))))))

(set! pml-layers (list (make pml (thickness 1))))

(define-param fsrc 0.15)

(set! sources (list (make eigenmode-source
                      (src (make gaussian-src (frequency fsrc) (fwidth (* 0.2 fsrc))))
                      (center -3 0 0)
                      (size 0 5 0)
                      (eig-band 1)
                      (eig-parity (+ ODD-Z EVEN-Y))
                      (eig-match-freq? true))))

(set! symmetries (list (make mirror-sym (direction Y))))

(define flux (add-flux fsrc 0 1 (make flux-region (center 3 0 0) (size 0 5 0))))
(define energy (add-energy fsrc 0 1 (make energy-region (center 3 0 0) (size 0 5 0))))
(run-sources+ 100)

(define res (get-eigenmode-coefficients flux (list 1) #:eig-parity (+ ODD-Z EVEN-Y)))
(define mode-vg (array-ref (list-ref res 1) 0 0))

(define poynting-flux (list-ref (get-fluxes flux) 0))
(define e-energy (list-ref (get-electric-energy energy) 0))
(define ratio-vg (/ (* 0.5 poynting-flux) e-energy))

(print "group-velocity:, " ratio-vg ", " mode-vg "\n")