|
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