📄 tutorial.ctl
字号:
; This file contains the Scheme commands from the user tutorial section; of the manual. It is meant to be run interactively by the user.; *** Our First Band Structure ***(print "********** Square lattice of rods in air **********\n")(set! num-bands 8)(set! k-points (list (vector3 0 0 0) ; Gamma (vector3 0.5 0 0) ; X (vector3 0.5 0.5 0) ; M (vector3 0 0 0))) ; Gamma(set! k-points (interpolate 4 k-points))(set! geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon 12))))))(set! geometry-lattice (make lattice (size 1 1 no-size)))(set! resolution 32)(print "********** Square lattice of rods: TE bands**********\n")(run-te)(print "********** Square lattice of rods: TM bands **********\n")(run-tm)(print "********** Square lattice of rods: TM, w/efield **********\n")(run-tm output-efield-z)(print "********** Square lattice of rods: TE, w/hfield & dpwr **********\n")(run-te (output-at-kpoint (vector3 0.5 0 0) output-hfield-z output-dpwr)); *** Bands of a Triangular Lattice ***(print "********** Triangular lattice of rods in air **********\n")(set! geometry-lattice (make lattice (size 1 1 no-size) (basis1 (/ (sqrt 3) 2) 0.5) (basis2 (/ (sqrt 3) 2) -0.5)))(set! k-points (list (vector3 0 0 0) ; Gamma (vector3 0 0.5 0) ; M (vector3 (/ -3) (/ 3) 0) ; K (vector3 0 0 0))) ; Gamma(set! k-points (interpolate 4 k-points))(run-tm); *** Maximizing the First TM Gap ***(print "********** Maximizing the first TM gap **********\n")(define (first-tm-gap r) (set! geometry (list (make cylinder (center 0 0 0) (radius r) (height infinity) (material (make dielectric (epsilon 12)))))) (run-tm) (retrieve-gap 1)) ; return the gap from TM band 1 to TM band 2(set! num-bands 2)(set! mesh-size 7) ; increase from default value of 3(define result (maximize first-tm-gap 0.1 0.1 0.5))(print "radius at maximum: " (max-arg result) "\n")(print "gap size at maximum: " (max-val result) "\n")(set! mesh-size 3) ; reset to default value of 3; *** A Complete 2D Gap with an Anisotropic Dielectric ***(print "********** Anisotropic complete 2d gap **********\n")(set! geometry (list (make cylinder (center 0 0 0) (radius 0.3) (height infinity) (material (make dielectric-anisotropic (epsilon-diag 1 1 12))))))(set! default-material (make dielectric-anisotropic (epsilon-diag 12 12 1)))(set! num-bands 8)(run) ; just use run, instead of run-te or run-tm, to find the complete gap; *** Finding a Point-defect State ***(print "********** 5x5 point defect **********\n")(set! geometry-lattice (make lattice (size 5 5 no-size)))(set! geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon 12))))))(set! geometry (geometric-objects-lattice-duplicates geometry))(set! geometry (append geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material air)))))(set! resolution 16)(set! k-points (list (vector3 0.5 0.5 0)))(set! num-bands 50)(run-tm)(output-efield-z 25)(get-dfield 25) ; compute the D field for band 25(compute-field-energy) ; compute the energy density from D(print "energy in cylinder: " (compute-energy-in-objects (make cylinder (center 0 0 0) (radius 1.0) (height infinity) (material air))) "\n")(print "********** 5x5 point defect, targeted solver **********\n")(set! num-bands 1) ; only need to compute a single band, now!(set! target-freq (/ (+ 0.2812 0.4174) 2))(set! tolerance 1e-8)(run-tm); *** Tuning the Point-defect Mode ***(print "********** Tuning the 5x5 point defect **********\n")(define old-geometry geometry) ; save the 5x5 grid with a missing rod(define (rootfun eps) ; add the cylinder of epsilon = eps to the old geometry: (set! geometry (append old-geometry (list (make cylinder (center 0 0 0) (radius 0.2) (height infinity) (material (make dielectric (epsilon eps))))))) (run-tm) ; solve for the mode (using the targeted solver) (print "epsilon = " eps " gives freq. = " (list-ref freqs 0) "\n") (- (list-ref freqs 0) 0.314159)) ; return 1st band freq. - 0.314159(define rooteps (find-root rootfun 0.01 1 12))(print "root (value of epsilon) is at: " rooteps "\n")(define rootval (rootfun rooteps))(print "root function at " rooteps " = " rootval "\n")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -