|
22 | 22 | ; this case, we assume that the procedure returns 1 argument, |
23 | 23 | ; as this is the most useful default for our purposes. Sigh. |
24 | 24 |
|
25 | | -(define (procedure-num-args p) |
| 25 | +(define (procedure-num-args p) |
26 | 26 | (let ((arity (procedure-property p 'arity))) |
27 | 27 | (if arity (car arity) 1))) |
28 | 28 |
|
|
76 | 76 | (lambda (object) |
77 | 77 | (let ((sz (object-property-value object 'size)) |
78 | 78 | (i (object-property-value object 'matgrid-init))) |
79 | | - (let ((g (apply make-uniform-array |
| 79 | + (let ((g (apply make-uniform-array |
80 | 80 | (cons 0.333 (map inexact->exact (vector->list sz)))))) |
81 | | - (array-index-map! g (lambda (x y z) |
| 81 | + (array-index-map! g (lambda (x y z) |
82 | 82 | (i (- (/ x (vector3-x sz)) 0.5) |
83 | 83 | (- (/ y (vector3-y sz)) 0.5) |
84 | 84 | (- (/ z (vector3-z sz)) 0.5)))) |
|
165 | 165 | (define TE EVEN-Z) |
166 | 166 | (define TM ODD-Z) |
167 | 167 | (define PREV-PARITY -1) |
168 | | -(define-external-function set-parity false false |
| 168 | +(define-external-function set-parity false false |
169 | 169 | no-return-value 'integer) |
170 | 170 | (define set-polarization set-parity) ; backwards compatibility |
171 | 171 |
|
|
186 | 186 | (define-external-function get-epsilon false false no-return-value) |
187 | 187 | (define-external-function get-mu false false no-return-value) |
188 | 188 | (define-external-function fix-field-phase false false no-return-value) |
189 | | -(define-external-function compute-field-energy false false |
| 189 | +(define-external-function compute-field-energy false false |
190 | 190 | (make-list-type 'number)) |
191 | 191 | (define-external-function compute-field-divergence false false no-return-value) |
192 | 192 |
|
193 | 193 | (define-external-function get-epsilon-point false false 'number 'vector3) |
194 | | -(define-external-function get-epsilon-inverse-tensor-point false false |
| 194 | +(define-external-function get-epsilon-inverse-tensor-point false false |
195 | 195 | 'cmatrix3x3 'vector3) |
196 | 196 | (define-external-function get-energy-point false false 'number 'vector3) |
197 | 197 | (define get-scalar-field-point get-energy-point) |
|
210 | 210 | 'number (make-list-type 'geometric-object)) |
211 | 211 |
|
212 | 212 | (define-external-function output-field-to-file false false |
213 | | - no-return-value 'integer 'string) |
| 213 | + no-return-value 'integer 'string) |
214 | 214 |
|
215 | 215 | (define-external-function mpi-is-master? false false 'boolean) |
216 | 216 | (define-external-function using-mpi? false false 'boolean) |
|
226 | 226 | no-return-value 'integer) |
227 | 227 |
|
228 | 228 | (define-external-function sqmatrix-size false false 'integer 'SCM) |
229 | | -(define-external-function sqmatrix-ref false false 'cnumber |
| 229 | +(define-external-function sqmatrix-ref false false 'cnumber |
230 | 230 | 'SCM 'integer 'integer) |
231 | 231 | (define-external-function sqmatrix-mult false false 'SCM |
232 | 232 | 'SCM 'SCM) |
|
249 | 249 | 'string) |
250 | 250 | (define-external-function load-eigenvectors false false no-return-value |
251 | 251 | 'string) |
| 252 | +(define-external-function bott-indices false false (make-list-type 'number) |
| 253 | + 'integer 'integer) |
252 | 254 |
|
253 | 255 | (define cur-field 'cur-field) |
254 | 256 | (define-external-function cur-field? false false 'boolean 'SCM) |
|
261 | 263 | (define-external-function field-set! false false no-return-value 'SCM 'SCM) |
262 | 264 | (define (field-copy f) (let ((f' (field-make f))) (field-set! f' f) f')) |
263 | 265 | (define-external-function field-load false false no-return-value 'SCM) |
264 | | -(define-external-function field-mapL! false false no-return-value 'SCM |
| 266 | +(define-external-function field-mapL! false false no-return-value 'SCM |
265 | 267 | 'function (make-list-type 'SCM)) |
266 | 268 | (define (field-map! dest f . src) (apply field-mapL! (list dest f src))) |
267 | 269 | (define-external-function integrate-fieldL false false 'cnumber |
268 | 270 | 'function (make-list-type 'SCM)) |
269 | 271 | (define (integrate-fields f . src) (apply integrate-fieldL (list f src))) |
270 | | -(define-external-function rscalar-field-get-point false false 'number |
| 272 | +(define-external-function rscalar-field-get-point false false 'number |
271 | 273 | 'SCM 'vector3) |
272 | | -(define-external-function cscalar-field-get-point false false 'cnumber |
| 274 | +(define-external-function cscalar-field-get-point false false 'cnumber |
273 | 275 | 'SCM 'vector3) |
274 | | -(define-external-function cvector-field-get-point false false 'cvector3 |
| 276 | +(define-external-function cvector-field-get-point false false 'cvector3 |
275 | 277 | 'SCM 'vector3) |
276 | | -(define-external-function cvector-field-get-point-bloch false false 'cvector3 |
| 278 | +(define-external-function cvector-field-get-point-bloch false false 'cvector3 |
277 | 279 | 'SCM 'vector3) |
278 | 280 |
|
279 | 281 | (define-external-function randomize-material-grid! false false |
|
398 | 400 | (define (try+ k v) |
399 | 401 | (if (< (n (vector3+ k v)) (n k)) (try+ (vector3+ k v) v) k)) |
400 | 402 | (define (try k v) (try+ (try+ k v) (vector3- (vector3 0) v))) |
401 | | - (define trylist (list |
| 403 | + (define trylist (list |
402 | 404 | #(1 0 0) #(0 1 0) #(0 0 1) |
403 | 405 | #(0 1 1) #(1 0 1) #(1 1 0) |
404 | 406 | #(0 1 -1) #(1 0 -1) #(1 -1 0) |
|
483 | 485 | (cons (car freqs) k-point) (car br))) |
484 | 486 | (newmax (if (> (car freqs) (cadr br)) |
485 | 487 | (cons (car freqs) k-point) (cdr br)))) |
486 | | - (ubrd br-rest (cdr freqs) |
| 488 | + (ubrd br-rest (cdr freqs) |
487 | 489 | (cons (cons newmin newmax) br-start)))))) |
488 | 490 | (ubrd band-range-data freqs '())) |
489 | 491 |
|
|
552 | 554 | (let ((median-iters (* 0.5 (+ (list-ref sorted-iters |
553 | 555 | (quotient num-runs 2)) |
554 | 556 | (list-ref sorted-iters |
555 | | - (- (quotient |
| 557 | + (- (quotient |
556 | 558 | (+ num-runs 1) 2) |
557 | 559 | 1)))))) |
558 | 560 | (print ", median = " median-iters)))) |
|
611 | 613 | (let ((k-split (list-split k-points k-split-num k-split-index))) |
612 | 614 | (set-kpoint-index (car k-split)) |
613 | 615 | (if (zero? (car k-split)) |
614 | | - (begin |
| 616 | + (begin |
615 | 617 | (output-epsilon) ; output epsilon immediately for 1st k block |
616 | 618 | (if (using-mu?) (output-mu)))) ; and mu too, if we have it |
617 | 619 | (if (> num-bands 0) |
|
620 | 622 | (set! current-k k) |
621 | 623 | (begin-time "elapsed time for k point: " (solve-kpoint k)) |
622 | 624 | (set! all-freqs (cons freqs all-freqs)) |
623 | | - (set! band-range-data |
| 625 | + (set! band-range-data |
624 | 626 | (update-band-range-data band-range-data freqs k)) |
625 | 627 | (set! eigensolver-iters |
626 | 628 | (append eigensolver-iters |
|
841 | 843 | (define korig (if (pair? korig-and-kdir) (car korig-and-kdir) (vector3 0))) |
842 | 844 | (define kdir (if (pair? korig-and-kdir) (cdr korig-and-kdir) korig-and-kdir)) |
843 | 845 | (let ((num-bands-save num-bands) (k-points-save k-points) |
844 | | - (nb (- band-max band-min -1)) |
| 846 | + (nb (- band-max band-min -1)) |
845 | 847 | (kdir1 (cartesian->reciprocal (unit-vector3 (reciprocal->cartesian kdir)))) |
846 | 848 | ; k0s is an array caching the best k value found for each band: |
847 | 849 | (k0s (if (list? kmag-guess) (list->vector kmag-guess) |
|
850 | 852 | (bktab '())) |
851 | 853 | (define (rootfun b) (lambda (k) |
852 | 854 | (let ((tab-val (assoc (cons b k) bktab))) ; first, look in cached table |
853 | | - (if tab-val |
| 855 | + (if tab-val |
854 | 856 | (begin ; use cached result if available |
855 | 857 | (print "find-k " b " at " k ": " (cadr tab-val) " (cached)\n") |
856 | 858 | (cdr tab-val)) |
|
861 | 863 | (let ((v (compute-group-velocity-component kdir1))) |
862 | 864 | ; cache computed values: |
863 | 865 | (map (lambda (b f v) |
864 | | - (let ((tabval (assoc |
| 866 | + (let ((tabval (assoc |
865 | 867 | (cons b (vector-ref k0s (- b band-min))) |
866 | 868 | bktab))) |
867 | 869 | (if (or (not tabval) |
868 | 870 | (< (abs (- f omega)) (abs (cadr tabval)))) |
869 | 871 | (vector-set! k0s (- b band-min) k))) ; cache k0 |
870 | 872 | (set! bktab (cons (cons (cons b k) (cons (- f omega) v)) |
871 | 873 | bktab))) |
872 | | - (arith-sequence band-min 1 (- b band-min -1)) |
| 874 | + (arith-sequence band-min 1 (- b band-min -1)) |
873 | 875 | (ncdr (- band-min 1) freqs) |
874 | 876 | (ncdr (- band-min 1) v)) |
875 | 877 | ; finally return (frequency - omega . derivative): |
|
889 | 891 | (run-parity p false |
890 | 892 | (lambda (b') |
891 | 893 | (if (= b' b) |
892 | | - (map (lambda (f) |
| 894 | + (map (lambda (f) |
893 | 895 | (apply-band-func-thunk f b true)) |
894 | 896 | band-funcs))))) |
895 | 897 | (arith-sequence band-max -1 nb) (reverse ks))) |
|
898 | 900 | (print parity "kvals:, " omega ", " band-min ", " band-max) |
899 | 901 | (vector-map (lambda (k) (print ", " k)) korig) |
900 | 902 | (vector-map (lambda (k) (print ", " k)) kdir1) |
901 | | - (map (lambda (k) (print ", " k)) ks) |
| 903 | + (map (lambda (k) (print ", " k)) ks) |
902 | 904 | (print "\n") |
903 | 905 | ks))) |
904 | 906 |
|
|
912 | 914 | (let ((dots (dot-eigenvectors old-eigs first-band))) |
913 | 915 | (let ((phases (map (lambda (d) (conj (make-polar 1 (angle d)))) |
914 | 916 | (sqmatrix-diag dots)))) |
915 | | - (map (lambda (i phase) |
| 917 | + (map (lambda (i phase) |
916 | 918 | (scale-eigenvector i phase) |
917 | 919 | (conj phase)) |
918 | 920 | (arith-sequence first-band 1 (length phases)) phases)))) |
|
0 commit comments