witwin-maxwell 0.3.0__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. witwin/maxwell/__init__.py +164 -0
  2. witwin/maxwell/adapters/__init__.py +1 -0
  3. witwin/maxwell/adapters/gds.py +203 -0
  4. witwin/maxwell/adapters/tidy3d.py +1669 -0
  5. witwin/maxwell/adjoint_inputs.py +70 -0
  6. witwin/maxwell/compiler/__init__.py +11 -0
  7. witwin/maxwell/compiler/materials.py +1355 -0
  8. witwin/maxwell/compiler/monitors.py +164 -0
  9. witwin/maxwell/compiler/sources.py +222 -0
  10. witwin/maxwell/fdfd/__init__.py +3 -0
  11. witwin/maxwell/fdfd/adjoint/__init__.py +3 -0
  12. witwin/maxwell/fdfd/adjoint/bridge.py +180 -0
  13. witwin/maxwell/fdfd/ams.py +300 -0
  14. witwin/maxwell/fdfd/krylov.py +280 -0
  15. witwin/maxwell/fdfd/plotting.py +110 -0
  16. witwin/maxwell/fdfd/postprocess.py +33 -0
  17. witwin/maxwell/fdfd/solver.py +1057 -0
  18. witwin/maxwell/fdtd/__init__.py +4 -0
  19. witwin/maxwell/fdtd/adjoint/__init__.py +21 -0
  20. witwin/maxwell/fdtd/adjoint/bridge.py +746 -0
  21. witwin/maxwell/fdtd/adjoint/capabilities.py +29 -0
  22. witwin/maxwell/fdtd/adjoint/core.py +3614 -0
  23. witwin/maxwell/fdtd/adjoint/dispatch.py +684 -0
  24. witwin/maxwell/fdtd/adjoint/native.py +2561 -0
  25. witwin/maxwell/fdtd/adjoint/profiler.py +195 -0
  26. witwin/maxwell/fdtd/adjoint/reverse_common.py +207 -0
  27. witwin/maxwell/fdtd/adjoint/seeds.py +524 -0
  28. witwin/maxwell/fdtd/boundary/__init__.py +37 -0
  29. witwin/maxwell/fdtd/boundary/bloch.py +90 -0
  30. witwin/maxwell/fdtd/boundary/common.py +41 -0
  31. witwin/maxwell/fdtd/boundary/cpml.py +527 -0
  32. witwin/maxwell/fdtd/boundary/runtime.py +209 -0
  33. witwin/maxwell/fdtd/checkpoint.py +227 -0
  34. witwin/maxwell/fdtd/coords.py +32 -0
  35. witwin/maxwell/fdtd/cuda/__init__.py +11 -0
  36. witwin/maxwell/fdtd/cuda/backend.py +3532 -0
  37. witwin/maxwell/fdtd/cuda/build.py +292 -0
  38. witwin/maxwell/fdtd/cuda/extension.cpp +2053 -0
  39. witwin/maxwell/fdtd/cuda/kernels/adjoint.cu +5290 -0
  40. witwin/maxwell/fdtd/cuda/kernels/aniso.cu +1704 -0
  41. witwin/maxwell/fdtd/cuda/kernels/boundary.cu +424 -0
  42. witwin/maxwell/fdtd/cuda/kernels/common.cu +74 -0
  43. witwin/maxwell/fdtd/cuda/kernels/common.cuh +82 -0
  44. witwin/maxwell/fdtd/cuda/kernels/dispersive.cu +782 -0
  45. witwin/maxwell/fdtd/cuda/kernels/electric.cu +3613 -0
  46. witwin/maxwell/fdtd/cuda/kernels/magnetic.cu +781 -0
  47. witwin/maxwell/fdtd/cuda/kernels/observers.cu +347 -0
  48. witwin/maxwell/fdtd/cuda/kernels/projection.cu +211 -0
  49. witwin/maxwell/fdtd/cuda/kernels/sources.cu +1482 -0
  50. witwin/maxwell/fdtd/cuda/kernels/spectral.cu +297 -0
  51. witwin/maxwell/fdtd/cuda/launch.h +23 -0
  52. witwin/maxwell/fdtd/cuda/prebuilt/witwin_maxwell_fdtd_cuda.pyd +0 -0
  53. witwin/maxwell/fdtd/cuda/runtime/__init__.py +6 -0
  54. witwin/maxwell/fdtd/cuda/runtime/dispatcher.py +6 -0
  55. witwin/maxwell/fdtd/cuda/runtime/graph.py +33 -0
  56. witwin/maxwell/fdtd/cuda/tensors.h +35 -0
  57. witwin/maxwell/fdtd/dispersion.py +48 -0
  58. witwin/maxwell/fdtd/evaluation.py +290 -0
  59. witwin/maxwell/fdtd/excitation/__init__.py +27 -0
  60. witwin/maxwell/fdtd/excitation/injection.py +1102 -0
  61. witwin/maxwell/fdtd/excitation/modes.py +1675 -0
  62. witwin/maxwell/fdtd/excitation/spatial.py +469 -0
  63. witwin/maxwell/fdtd/excitation/temporal.py +510 -0
  64. witwin/maxwell/fdtd/excitation/tfsf_apply.py +264 -0
  65. witwin/maxwell/fdtd/excitation/tfsf_common.py +421 -0
  66. witwin/maxwell/fdtd/excitation/tfsf_specs.py +490 -0
  67. witwin/maxwell/fdtd/excitation/tfsf_state.py +778 -0
  68. witwin/maxwell/fdtd/io.py +31 -0
  69. witwin/maxwell/fdtd/material_pullback.py +371 -0
  70. witwin/maxwell/fdtd/meshing/__init__.py +3 -0
  71. witwin/maxwell/fdtd/meshing/autogrid.py +335 -0
  72. witwin/maxwell/fdtd/observers.py +1453 -0
  73. witwin/maxwell/fdtd/plotting.py +121 -0
  74. witwin/maxwell/fdtd/postprocess.py +205 -0
  75. witwin/maxwell/fdtd/runtime/__init__.py +119 -0
  76. witwin/maxwell/fdtd/runtime/initialization.py +236 -0
  77. witwin/maxwell/fdtd/runtime/materials.py +1563 -0
  78. witwin/maxwell/fdtd/runtime/module_cache.py +31 -0
  79. witwin/maxwell/fdtd/runtime/spectral.py +581 -0
  80. witwin/maxwell/fdtd/runtime/stepping.py +1987 -0
  81. witwin/maxwell/fdtd/solver.py +502 -0
  82. witwin/maxwell/geometry/__init__.py +5 -0
  83. witwin/maxwell/geometry/polyslab.py +299 -0
  84. witwin/maxwell/materials.py +3 -0
  85. witwin/maxwell/media.py +1467 -0
  86. witwin/maxwell/monitors.py +743 -0
  87. witwin/maxwell/ports.py +113 -0
  88. witwin/maxwell/postprocess/RCS.py +139 -0
  89. witwin/maxwell/postprocess/__init__.py +42 -0
  90. witwin/maxwell/postprocess/diffraction.py +219 -0
  91. witwin/maxwell/postprocess/directivity.py +152 -0
  92. witwin/maxwell/postprocess/emission.py +67 -0
  93. witwin/maxwell/postprocess/modal.py +324 -0
  94. witwin/maxwell/postprocess/nfft.py +266 -0
  95. witwin/maxwell/postprocess/scattering_parameters.py +358 -0
  96. witwin/maxwell/postprocess/stratton_chu.py +1193 -0
  97. witwin/maxwell/result.py +967 -0
  98. witwin/maxwell/scene.py +1338 -0
  99. witwin/maxwell/simulation.py +659 -0
  100. witwin/maxwell/sources.py +917 -0
  101. witwin/maxwell/visualization/__init__.py +28 -0
  102. witwin/maxwell/visualization/interactive.py +484 -0
  103. witwin/maxwell/visualization/plots.py +568 -0
  104. witwin_maxwell-0.3.0.dist-info/METADATA +184 -0
  105. witwin_maxwell-0.3.0.dist-info/RECORD +107 -0
  106. witwin_maxwell-0.3.0.dist-info/WHEEL +4 -0
  107. witwin_maxwell-0.3.0.dist-info/licenses/LICENSE +13 -0
@@ -0,0 +1,3532 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Callable
4
+ from typing import Any
5
+
6
+ import torch
7
+
8
+
9
+ _COMPILED_EXTENSION: Any | None = None
10
+
11
+
12
+ def is_available() -> bool:
13
+ return bool(torch.cuda.is_available())
14
+
15
+
16
+ def get_compiled_extension(*, verbose: bool = False) -> Any:
17
+ global _COMPILED_EXTENSION
18
+ if _COMPILED_EXTENSION is None:
19
+ from .build import build_extension
20
+
21
+ _COMPILED_EXTENSION = build_extension(verbose=verbose)
22
+ return _COMPILED_EXTENSION
23
+
24
+
25
+ def build_info() -> dict[str, Any]:
26
+ return {
27
+ "backend": "torch-cuda",
28
+ "compiled_extension_loaded": _COMPILED_EXTENSION is not None,
29
+ "cuda_available": is_available(),
30
+ "torch_version": torch.__version__,
31
+ }
32
+
33
+
34
+ def debug_linear_indices(
35
+ shape: tuple[int, int, int],
36
+ *,
37
+ device: str | torch.device | None = None,
38
+ use_extension: bool = False,
39
+ ):
40
+ device = torch.device("cuda" if device is None else device)
41
+ if device.type != "cuda":
42
+ raise ValueError("debug_linear_indices requires a CUDA device.")
43
+ if use_extension:
44
+ with torch.cuda.device(device):
45
+ return get_compiled_extension().debug_linear_indices([int(value) for value in shape])
46
+ total = int(shape[0]) * int(shape[1]) * int(shape[2])
47
+ linear = torch.arange(total, device=device, dtype=torch.int64).reshape(shape)
48
+ i_index = linear // (int(shape[1]) * int(shape[2]))
49
+ j_index = (linear // int(shape[2])) % int(shape[1])
50
+ k_index = linear % int(shape[2])
51
+ return linear, i_index, j_index, k_index
52
+
53
+
54
+ def _call_with_contiguous(kernel: Callable[..., None], kwargs: dict) -> None:
55
+ # Callers may pass strided tensor views (the adjoint replay passes box
56
+ # slices of adjoint fields and real/imag views), while the compiled kernels
57
+ # require contiguous memory. Materialize contiguous copies and write back
58
+ # afterwards so in-place semantics are preserved.
59
+ write_back = None
60
+ for key, value in kwargs.items():
61
+ if type(value) is torch.Tensor and not value.is_contiguous():
62
+ contiguous = value.contiguous()
63
+ kwargs[key] = contiguous
64
+ if write_back is None:
65
+ write_back = []
66
+ write_back.append((value, contiguous))
67
+ kernel(**kwargs)
68
+ if write_back is not None:
69
+ for original, contiguous in write_back:
70
+ original.copy_(contiguous)
71
+
72
+
73
+ class _Launch:
74
+ __slots__ = ("kernel", "kwargs", "may_receive_strided")
75
+
76
+ def __init__(self, kernel: Callable[..., None], kwargs: dict, *, may_receive_strided: bool):
77
+ self.kernel = kernel
78
+ self.kwargs = kwargs
79
+ self.may_receive_strided = may_receive_strided
80
+
81
+ def launchRaw(self): # noqa: N802 - kernel launch entry point
82
+ if self.may_receive_strided:
83
+ _call_with_contiguous(self.kernel, self.kwargs)
84
+ else:
85
+ self.kernel(**self.kwargs)
86
+ return None
87
+
88
+
89
+ class NativeFDTDModule:
90
+ def __getattr__(self, name: str):
91
+ kernel = _KERNELS.get(name)
92
+ if kernel is None:
93
+ raise AttributeError(f"Native CUDA FDTD backend does not implement kernel {name!r}.")
94
+
95
+ may_receive_strided = name.startswith(
96
+ ("reverse", "seedInject", "accumulate", "applyElectricField")
97
+ )
98
+
99
+ def bind(**kwargs):
100
+ return _Launch(kernel, kwargs, may_receive_strided=may_receive_strided)
101
+
102
+ bind.__name__ = name
103
+ # Cache on the instance so later lookups bypass __getattr__ entirely.
104
+ object.__setattr__(self, name, bind)
105
+ return bind
106
+
107
+
108
+ _NATIVE_MODULE = NativeFDTDModule()
109
+
110
+
111
+ def get_native_fdtd_module() -> NativeFDTDModule:
112
+ if not is_available():
113
+ raise RuntimeError("Native CUDA FDTD backend requires torch.cuda.is_available() to be True.")
114
+ get_compiled_extension()
115
+ return _NATIVE_MODULE
116
+
117
+
118
+ def _magnetic_hx_standard(*, Hx, Ey, Ez, HxDecay, HxCurl, invDy, invDz):
119
+ _COMPILED_EXTENSION.update_magnetic_hx_standard(Hx, Ey, Ez, HxDecay, HxCurl, invDy, invDz)
120
+
121
+
122
+ def _magnetic_hy_standard(*, Hy, Ex, Ez, HyDecay, HyCurl, invDx, invDz):
123
+ _COMPILED_EXTENSION.update_magnetic_hy_standard(Hy, Ex, Ez, HyDecay, HyCurl, invDx, invDz)
124
+
125
+
126
+ def _magnetic_hz_standard(*, Hz, Ex, Ey, HzDecay, HzCurl, invDx, invDy):
127
+ _COMPILED_EXTENSION.update_magnetic_hz_standard(Hz, Ex, Ey, HzDecay, HzCurl, invDx, invDy)
128
+
129
+
130
+ def _magnetic_hx_cpml(
131
+ *,
132
+ Hx,
133
+ Ey,
134
+ Ez,
135
+ HxDecay,
136
+ HxCurl,
137
+ PsiHxY,
138
+ PsiHxZ,
139
+ InvKappaHxY,
140
+ ByHxY,
141
+ CyHxY,
142
+ InvKappaHxZ,
143
+ ByHxZ,
144
+ CyHxZ,
145
+ invDy,
146
+ invDz,
147
+ ):
148
+ _COMPILED_EXTENSION.update_magnetic_hx_cpml(
149
+ Hx,
150
+ Ey,
151
+ Ez,
152
+ HxDecay,
153
+ HxCurl,
154
+ PsiHxY,
155
+ PsiHxZ,
156
+ InvKappaHxY,
157
+ ByHxY,
158
+ CyHxY,
159
+ InvKappaHxZ,
160
+ ByHxZ,
161
+ CyHxZ,
162
+ invDy,
163
+ invDz,
164
+ )
165
+
166
+
167
+ def _magnetic_hy_cpml(
168
+ *,
169
+ Hy,
170
+ Ex,
171
+ Ez,
172
+ HyDecay,
173
+ HyCurl,
174
+ PsiHyX,
175
+ PsiHyZ,
176
+ InvKappaHyX,
177
+ ByHyX,
178
+ CyHyX,
179
+ InvKappaHyZ,
180
+ ByHyZ,
181
+ CyHyZ,
182
+ invDx,
183
+ invDz,
184
+ ):
185
+ _COMPILED_EXTENSION.update_magnetic_hy_cpml(
186
+ Hy,
187
+ Ex,
188
+ Ez,
189
+ HyDecay,
190
+ HyCurl,
191
+ PsiHyX,
192
+ PsiHyZ,
193
+ InvKappaHyX,
194
+ ByHyX,
195
+ CyHyX,
196
+ InvKappaHyZ,
197
+ ByHyZ,
198
+ CyHyZ,
199
+ invDx,
200
+ invDz,
201
+ )
202
+
203
+
204
+ def _magnetic_hz_cpml(
205
+ *,
206
+ Hz,
207
+ Ex,
208
+ Ey,
209
+ HzDecay,
210
+ HzCurl,
211
+ PsiHzX,
212
+ PsiHzY,
213
+ InvKappaHzX,
214
+ ByHzX,
215
+ CyHzX,
216
+ InvKappaHzY,
217
+ ByHzY,
218
+ CyHzY,
219
+ invDx,
220
+ invDy,
221
+ ):
222
+ _COMPILED_EXTENSION.update_magnetic_hz_cpml(
223
+ Hz,
224
+ Ex,
225
+ Ey,
226
+ HzDecay,
227
+ HzCurl,
228
+ PsiHzX,
229
+ PsiHzY,
230
+ InvKappaHzX,
231
+ ByHzX,
232
+ CyHzX,
233
+ InvKappaHzY,
234
+ ByHzY,
235
+ CyHzY,
236
+ invDx,
237
+ invDy,
238
+ )
239
+
240
+
241
+ def _magnetic_hx_cpml_compressed(
242
+ *,
243
+ Hx,
244
+ Ey,
245
+ Ez,
246
+ HxDecay,
247
+ HxCurl,
248
+ PsiHxY,
249
+ PsiHxZ,
250
+ InvKappaHxY,
251
+ ByHxY,
252
+ CyHxY,
253
+ InvKappaHxZ,
254
+ ByHxZ,
255
+ CyHxZ,
256
+ invDy,
257
+ invDz,
258
+ psiHxYLowLength,
259
+ psiHxYHighStart,
260
+ psiHxYHighLength,
261
+ psiHxZLowLength,
262
+ psiHxZHighStart,
263
+ psiHxZHighLength,
264
+ uniformDecay,
265
+ uniformCurl,
266
+ ):
267
+ _COMPILED_EXTENSION.update_magnetic_hx_cpml_compressed(
268
+ Hx,
269
+ Ey,
270
+ Ez,
271
+ HxDecay,
272
+ HxCurl,
273
+ PsiHxY,
274
+ PsiHxZ,
275
+ InvKappaHxY,
276
+ ByHxY,
277
+ CyHxY,
278
+ InvKappaHxZ,
279
+ ByHxZ,
280
+ CyHxZ,
281
+ invDy,
282
+ invDz,
283
+ int(psiHxYLowLength),
284
+ int(psiHxYHighStart),
285
+ int(psiHxYHighLength),
286
+ int(psiHxZLowLength),
287
+ int(psiHxZHighStart),
288
+ int(psiHxZHighLength),
289
+ uniformDecay,
290
+ uniformCurl,
291
+ )
292
+
293
+
294
+ def _magnetic_hy_cpml_compressed(
295
+ *,
296
+ Hy,
297
+ Ex,
298
+ Ez,
299
+ HyDecay,
300
+ HyCurl,
301
+ PsiHyX,
302
+ PsiHyZ,
303
+ InvKappaHyX,
304
+ ByHyX,
305
+ CyHyX,
306
+ InvKappaHyZ,
307
+ ByHyZ,
308
+ CyHyZ,
309
+ invDx,
310
+ invDz,
311
+ psiHyXLowLength,
312
+ psiHyXHighStart,
313
+ psiHyXHighLength,
314
+ psiHyZLowLength,
315
+ psiHyZHighStart,
316
+ psiHyZHighLength,
317
+ uniformDecay,
318
+ uniformCurl,
319
+ ):
320
+ _COMPILED_EXTENSION.update_magnetic_hy_cpml_compressed(
321
+ Hy,
322
+ Ex,
323
+ Ez,
324
+ HyDecay,
325
+ HyCurl,
326
+ PsiHyX,
327
+ PsiHyZ,
328
+ InvKappaHyX,
329
+ ByHyX,
330
+ CyHyX,
331
+ InvKappaHyZ,
332
+ ByHyZ,
333
+ CyHyZ,
334
+ invDx,
335
+ invDz,
336
+ int(psiHyXLowLength),
337
+ int(psiHyXHighStart),
338
+ int(psiHyXHighLength),
339
+ int(psiHyZLowLength),
340
+ int(psiHyZHighStart),
341
+ int(psiHyZHighLength),
342
+ uniformDecay,
343
+ uniformCurl,
344
+ )
345
+
346
+
347
+ def _magnetic_hz_cpml_compressed(
348
+ *,
349
+ Hz,
350
+ Ex,
351
+ Ey,
352
+ HzDecay,
353
+ HzCurl,
354
+ PsiHzX,
355
+ PsiHzY,
356
+ InvKappaHzX,
357
+ ByHzX,
358
+ CyHzX,
359
+ InvKappaHzY,
360
+ ByHzY,
361
+ CyHzY,
362
+ invDx,
363
+ invDy,
364
+ psiHzXLowLength,
365
+ psiHzXHighStart,
366
+ psiHzXHighLength,
367
+ psiHzYLowLength,
368
+ psiHzYHighStart,
369
+ psiHzYHighLength,
370
+ uniformDecay,
371
+ uniformCurl,
372
+ ):
373
+ _COMPILED_EXTENSION.update_magnetic_hz_cpml_compressed(
374
+ Hz,
375
+ Ex,
376
+ Ey,
377
+ HzDecay,
378
+ HzCurl,
379
+ PsiHzX,
380
+ PsiHzY,
381
+ InvKappaHzX,
382
+ ByHzX,
383
+ CyHzX,
384
+ InvKappaHzY,
385
+ ByHzY,
386
+ CyHzY,
387
+ invDx,
388
+ invDy,
389
+ int(psiHzXLowLength),
390
+ int(psiHzXHighStart),
391
+ int(psiHzXHighLength),
392
+ int(psiHzYLowLength),
393
+ int(psiHzYHighStart),
394
+ int(psiHzYHighLength),
395
+ uniformDecay,
396
+ uniformCurl,
397
+ )
398
+
399
+
400
+ def _electric_ex_standard(
401
+ *,
402
+ Ex,
403
+ Hy,
404
+ Hz,
405
+ ExDecay,
406
+ ExCurl,
407
+ invDy,
408
+ invDz,
409
+ yLowBoundaryMode,
410
+ yHighBoundaryMode,
411
+ zLowBoundaryMode,
412
+ zHighBoundaryMode,
413
+ ):
414
+ _COMPILED_EXTENSION.update_electric_ex_standard(
415
+ Ex,
416
+ Hy,
417
+ Hz,
418
+ ExDecay,
419
+ ExCurl,
420
+ invDy,
421
+ invDz,
422
+ int(yLowBoundaryMode),
423
+ int(yHighBoundaryMode),
424
+ int(zLowBoundaryMode),
425
+ int(zHighBoundaryMode),
426
+ )
427
+
428
+
429
+ def _electric_ey_standard(
430
+ *,
431
+ Ey,
432
+ Hx,
433
+ Hz,
434
+ EyDecay,
435
+ EyCurl,
436
+ invDx,
437
+ invDz,
438
+ xLowBoundaryMode,
439
+ xHighBoundaryMode,
440
+ zLowBoundaryMode,
441
+ zHighBoundaryMode,
442
+ ):
443
+ _COMPILED_EXTENSION.update_electric_ey_standard(
444
+ Ey,
445
+ Hx,
446
+ Hz,
447
+ EyDecay,
448
+ EyCurl,
449
+ invDx,
450
+ invDz,
451
+ int(xLowBoundaryMode),
452
+ int(xHighBoundaryMode),
453
+ int(zLowBoundaryMode),
454
+ int(zHighBoundaryMode),
455
+ )
456
+
457
+
458
+ def _electric_ez_standard(
459
+ *,
460
+ Ez,
461
+ Hx,
462
+ Hy,
463
+ EzDecay,
464
+ EzCurl,
465
+ invDx,
466
+ invDy,
467
+ xLowBoundaryMode,
468
+ xHighBoundaryMode,
469
+ yLowBoundaryMode,
470
+ yHighBoundaryMode,
471
+ ):
472
+ _COMPILED_EXTENSION.update_electric_ez_standard(
473
+ Ez,
474
+ Hx,
475
+ Hy,
476
+ EzDecay,
477
+ EzCurl,
478
+ invDx,
479
+ invDy,
480
+ int(xLowBoundaryMode),
481
+ int(xHighBoundaryMode),
482
+ int(yLowBoundaryMode),
483
+ int(yHighBoundaryMode),
484
+ )
485
+
486
+
487
+ def _electric_ex_modulated(
488
+ *,
489
+ Ex,
490
+ Hy,
491
+ Hz,
492
+ ExDecay,
493
+ ExCurl,
494
+ ModCos,
495
+ ModSin,
496
+ ModOmega,
497
+ ModulationTime,
498
+ invDy,
499
+ invDz,
500
+ yLowBoundaryMode,
501
+ yHighBoundaryMode,
502
+ zLowBoundaryMode,
503
+ zHighBoundaryMode,
504
+ ):
505
+ _COMPILED_EXTENSION.update_electric_ex_modulated(
506
+ Ex,
507
+ Hy,
508
+ Hz,
509
+ ExDecay,
510
+ ExCurl,
511
+ ModCos,
512
+ ModSin,
513
+ ModOmega,
514
+ ModulationTime,
515
+ invDy,
516
+ invDz,
517
+ int(yLowBoundaryMode),
518
+ int(yHighBoundaryMode),
519
+ int(zLowBoundaryMode),
520
+ int(zHighBoundaryMode),
521
+ )
522
+
523
+
524
+ def _electric_ey_modulated(
525
+ *,
526
+ Ey,
527
+ Hx,
528
+ Hz,
529
+ EyDecay,
530
+ EyCurl,
531
+ ModCos,
532
+ ModSin,
533
+ ModOmega,
534
+ ModulationTime,
535
+ invDx,
536
+ invDz,
537
+ xLowBoundaryMode,
538
+ xHighBoundaryMode,
539
+ zLowBoundaryMode,
540
+ zHighBoundaryMode,
541
+ ):
542
+ _COMPILED_EXTENSION.update_electric_ey_modulated(
543
+ Ey,
544
+ Hx,
545
+ Hz,
546
+ EyDecay,
547
+ EyCurl,
548
+ ModCos,
549
+ ModSin,
550
+ ModOmega,
551
+ ModulationTime,
552
+ invDx,
553
+ invDz,
554
+ int(xLowBoundaryMode),
555
+ int(xHighBoundaryMode),
556
+ int(zLowBoundaryMode),
557
+ int(zHighBoundaryMode),
558
+ )
559
+
560
+
561
+ def _electric_ez_modulated(
562
+ *,
563
+ Ez,
564
+ Hx,
565
+ Hy,
566
+ EzDecay,
567
+ EzCurl,
568
+ ModCos,
569
+ ModSin,
570
+ ModOmega,
571
+ ModulationTime,
572
+ invDx,
573
+ invDy,
574
+ xLowBoundaryMode,
575
+ xHighBoundaryMode,
576
+ yLowBoundaryMode,
577
+ yHighBoundaryMode,
578
+ ):
579
+ _COMPILED_EXTENSION.update_electric_ez_modulated(
580
+ Ez,
581
+ Hx,
582
+ Hy,
583
+ EzDecay,
584
+ EzCurl,
585
+ ModCos,
586
+ ModSin,
587
+ ModOmega,
588
+ ModulationTime,
589
+ invDx,
590
+ invDy,
591
+ int(xLowBoundaryMode),
592
+ int(xHighBoundaryMode),
593
+ int(yLowBoundaryMode),
594
+ int(yHighBoundaryMode),
595
+ )
596
+
597
+
598
+ def _electric_ex_cpml_modulated(
599
+ *,
600
+ Ex,
601
+ Hy,
602
+ Hz,
603
+ ExDecay,
604
+ ExCurl,
605
+ ModCos,
606
+ ModSin,
607
+ ModOmega,
608
+ ModulationTime,
609
+ PsiExY,
610
+ PsiExZ,
611
+ InvKappaExY,
612
+ BExY,
613
+ CExY,
614
+ InvKappaExZ,
615
+ BExZ,
616
+ CExZ,
617
+ invDy,
618
+ invDz,
619
+ yLowBoundaryMode,
620
+ yHighBoundaryMode,
621
+ zLowBoundaryMode,
622
+ zHighBoundaryMode,
623
+ ):
624
+ _COMPILED_EXTENSION.update_electric_ex_cpml_modulated(
625
+ Ex,
626
+ Hy,
627
+ Hz,
628
+ ExDecay,
629
+ ExCurl,
630
+ ModCos,
631
+ ModSin,
632
+ ModOmega,
633
+ ModulationTime,
634
+ PsiExY,
635
+ PsiExZ,
636
+ InvKappaExY,
637
+ BExY,
638
+ CExY,
639
+ InvKappaExZ,
640
+ BExZ,
641
+ CExZ,
642
+ invDy,
643
+ invDz,
644
+ int(yLowBoundaryMode),
645
+ int(yHighBoundaryMode),
646
+ int(zLowBoundaryMode),
647
+ int(zHighBoundaryMode),
648
+ )
649
+
650
+
651
+ def _electric_ey_cpml_modulated(
652
+ *,
653
+ Ey,
654
+ Hx,
655
+ Hz,
656
+ EyDecay,
657
+ EyCurl,
658
+ ModCos,
659
+ ModSin,
660
+ ModOmega,
661
+ ModulationTime,
662
+ PsiEyX,
663
+ PsiEyZ,
664
+ InvKappaEyX,
665
+ BEyX,
666
+ CEyX,
667
+ InvKappaEyZ,
668
+ BEyZ,
669
+ CEyZ,
670
+ invDx,
671
+ invDz,
672
+ xLowBoundaryMode,
673
+ xHighBoundaryMode,
674
+ zLowBoundaryMode,
675
+ zHighBoundaryMode,
676
+ ):
677
+ _COMPILED_EXTENSION.update_electric_ey_cpml_modulated(
678
+ Ey,
679
+ Hx,
680
+ Hz,
681
+ EyDecay,
682
+ EyCurl,
683
+ ModCos,
684
+ ModSin,
685
+ ModOmega,
686
+ ModulationTime,
687
+ PsiEyX,
688
+ PsiEyZ,
689
+ InvKappaEyX,
690
+ BEyX,
691
+ CEyX,
692
+ InvKappaEyZ,
693
+ BEyZ,
694
+ CEyZ,
695
+ invDx,
696
+ invDz,
697
+ int(xLowBoundaryMode),
698
+ int(xHighBoundaryMode),
699
+ int(zLowBoundaryMode),
700
+ int(zHighBoundaryMode),
701
+ )
702
+
703
+
704
+ def _electric_ez_cpml_modulated(
705
+ *,
706
+ Ez,
707
+ Hx,
708
+ Hy,
709
+ EzDecay,
710
+ EzCurl,
711
+ ModCos,
712
+ ModSin,
713
+ ModOmega,
714
+ ModulationTime,
715
+ PsiEzX,
716
+ PsiEzY,
717
+ InvKappaEzX,
718
+ BEzX,
719
+ CEzX,
720
+ InvKappaEzY,
721
+ BEzY,
722
+ CEzY,
723
+ invDx,
724
+ invDy,
725
+ xLowBoundaryMode,
726
+ xHighBoundaryMode,
727
+ yLowBoundaryMode,
728
+ yHighBoundaryMode,
729
+ ):
730
+ _COMPILED_EXTENSION.update_electric_ez_cpml_modulated(
731
+ Ez,
732
+ Hx,
733
+ Hy,
734
+ EzDecay,
735
+ EzCurl,
736
+ ModCos,
737
+ ModSin,
738
+ ModOmega,
739
+ ModulationTime,
740
+ PsiEzX,
741
+ PsiEzY,
742
+ InvKappaEzX,
743
+ BEzX,
744
+ CEzX,
745
+ InvKappaEzY,
746
+ BEzY,
747
+ CEzY,
748
+ invDx,
749
+ invDy,
750
+ int(xLowBoundaryMode),
751
+ int(xHighBoundaryMode),
752
+ int(yLowBoundaryMode),
753
+ int(yHighBoundaryMode),
754
+ )
755
+
756
+
757
+ def _electric_ex_cpml(
758
+ *,
759
+ Ex,
760
+ Hy,
761
+ Hz,
762
+ ExDecay,
763
+ ExCurl,
764
+ PsiExY,
765
+ PsiExZ,
766
+ InvKappaExY,
767
+ BExY,
768
+ CExY,
769
+ InvKappaExZ,
770
+ BExZ,
771
+ CExZ,
772
+ invDy,
773
+ invDz,
774
+ yLowBoundaryMode,
775
+ yHighBoundaryMode,
776
+ zLowBoundaryMode,
777
+ zHighBoundaryMode,
778
+ ):
779
+ _COMPILED_EXTENSION.update_electric_ex_cpml(
780
+ Ex,
781
+ Hy,
782
+ Hz,
783
+ ExDecay,
784
+ ExCurl,
785
+ PsiExY,
786
+ PsiExZ,
787
+ InvKappaExY,
788
+ BExY,
789
+ CExY,
790
+ InvKappaExZ,
791
+ BExZ,
792
+ CExZ,
793
+ invDy,
794
+ invDz,
795
+ int(yLowBoundaryMode),
796
+ int(yHighBoundaryMode),
797
+ int(zLowBoundaryMode),
798
+ int(zHighBoundaryMode),
799
+ )
800
+
801
+
802
+ def _electric_ey_cpml(
803
+ *,
804
+ Ey,
805
+ Hx,
806
+ Hz,
807
+ EyDecay,
808
+ EyCurl,
809
+ PsiEyX,
810
+ PsiEyZ,
811
+ InvKappaEyX,
812
+ BEyX,
813
+ CEyX,
814
+ InvKappaEyZ,
815
+ BEyZ,
816
+ CEyZ,
817
+ invDx,
818
+ invDz,
819
+ xLowBoundaryMode,
820
+ xHighBoundaryMode,
821
+ zLowBoundaryMode,
822
+ zHighBoundaryMode,
823
+ ):
824
+ _COMPILED_EXTENSION.update_electric_ey_cpml(
825
+ Ey,
826
+ Hx,
827
+ Hz,
828
+ EyDecay,
829
+ EyCurl,
830
+ PsiEyX,
831
+ PsiEyZ,
832
+ InvKappaEyX,
833
+ BEyX,
834
+ CEyX,
835
+ InvKappaEyZ,
836
+ BEyZ,
837
+ CEyZ,
838
+ invDx,
839
+ invDz,
840
+ int(xLowBoundaryMode),
841
+ int(xHighBoundaryMode),
842
+ int(zLowBoundaryMode),
843
+ int(zHighBoundaryMode),
844
+ )
845
+
846
+
847
+ def _electric_ez_cpml(
848
+ *,
849
+ Ez,
850
+ Hx,
851
+ Hy,
852
+ EzDecay,
853
+ EzCurl,
854
+ PsiEzX,
855
+ PsiEzY,
856
+ InvKappaEzX,
857
+ BEzX,
858
+ CEzX,
859
+ InvKappaEzY,
860
+ BEzY,
861
+ CEzY,
862
+ invDx,
863
+ invDy,
864
+ xLowBoundaryMode,
865
+ xHighBoundaryMode,
866
+ yLowBoundaryMode,
867
+ yHighBoundaryMode,
868
+ ):
869
+ _COMPILED_EXTENSION.update_electric_ez_cpml(
870
+ Ez,
871
+ Hx,
872
+ Hy,
873
+ EzDecay,
874
+ EzCurl,
875
+ PsiEzX,
876
+ PsiEzY,
877
+ InvKappaEzX,
878
+ BEzX,
879
+ CEzX,
880
+ InvKappaEzY,
881
+ BEzY,
882
+ CEzY,
883
+ invDx,
884
+ invDy,
885
+ int(xLowBoundaryMode),
886
+ int(xHighBoundaryMode),
887
+ int(yLowBoundaryMode),
888
+ int(yHighBoundaryMode),
889
+ )
890
+
891
+
892
+ def _apply_electric_ex_cpml_z_correction(
893
+ *,
894
+ Ex,
895
+ Hy,
896
+ ExCurl,
897
+ PsiExZ,
898
+ InvKappaExZ,
899
+ BExZ,
900
+ CExZ,
901
+ invDz,
902
+ offsetI,
903
+ offsetJ,
904
+ offsetK,
905
+ yLowBoundaryMode,
906
+ yHighBoundaryMode,
907
+ fullSizeY,
908
+ fullSizeZ,
909
+ ):
910
+ _COMPILED_EXTENSION.apply_electric_ex_cpml_z_correction(
911
+ Ex, Hy, ExCurl, PsiExZ, InvKappaExZ, BExZ, CExZ, invDz,
912
+ int(offsetI), int(offsetJ), int(offsetK),
913
+ int(yLowBoundaryMode), int(yHighBoundaryMode),
914
+ int(fullSizeY), int(fullSizeZ),
915
+ )
916
+
917
+
918
+ def _apply_electric_ey_cpml_z_correction(
919
+ *,
920
+ Ey,
921
+ Hx,
922
+ EyCurl,
923
+ PsiEyZ,
924
+ InvKappaEyZ,
925
+ BEyZ,
926
+ CEyZ,
927
+ invDz,
928
+ offsetI,
929
+ offsetJ,
930
+ offsetK,
931
+ xLowBoundaryMode,
932
+ xHighBoundaryMode,
933
+ fullSizeX,
934
+ fullSizeZ,
935
+ ):
936
+ _COMPILED_EXTENSION.apply_electric_ey_cpml_z_correction(
937
+ Ey, Hx, EyCurl, PsiEyZ, InvKappaEyZ, BEyZ, CEyZ, invDz,
938
+ int(offsetI), int(offsetJ), int(offsetK),
939
+ int(xLowBoundaryMode), int(xHighBoundaryMode),
940
+ int(fullSizeX), int(fullSizeZ),
941
+ )
942
+
943
+
944
+ def _apply_electric_ex_cpml_y_correction(
945
+ *,
946
+ Ex,
947
+ Hz,
948
+ ExCurl,
949
+ PsiExY,
950
+ InvKappaExY,
951
+ BExY,
952
+ CExY,
953
+ invDy,
954
+ offsetI,
955
+ offsetJ,
956
+ offsetK,
957
+ zLowBoundaryMode,
958
+ zHighBoundaryMode,
959
+ fullSizeZ,
960
+ fullSizeY,
961
+ ):
962
+ _COMPILED_EXTENSION.apply_electric_ex_cpml_y_correction(
963
+ Ex, Hz, ExCurl, PsiExY, InvKappaExY, BExY, CExY, invDy,
964
+ int(offsetI), int(offsetJ), int(offsetK),
965
+ int(zLowBoundaryMode), int(zHighBoundaryMode),
966
+ int(fullSizeZ), int(fullSizeY),
967
+ )
968
+
969
+
970
+ def _apply_electric_ez_cpml_y_correction(
971
+ *,
972
+ Ez,
973
+ Hx,
974
+ EzCurl,
975
+ PsiEzY,
976
+ InvKappaEzY,
977
+ BEzY,
978
+ CEzY,
979
+ invDy,
980
+ offsetI,
981
+ offsetJ,
982
+ offsetK,
983
+ xLowBoundaryMode,
984
+ xHighBoundaryMode,
985
+ fullSizeX,
986
+ fullSizeY,
987
+ ):
988
+ _COMPILED_EXTENSION.apply_electric_ez_cpml_y_correction(
989
+ Ez, Hx, EzCurl, PsiEzY, InvKappaEzY, BEzY, CEzY, invDy,
990
+ int(offsetI), int(offsetJ), int(offsetK),
991
+ int(xLowBoundaryMode), int(xHighBoundaryMode),
992
+ int(fullSizeX), int(fullSizeY),
993
+ )
994
+
995
+
996
+ def _apply_electric_ey_cpml_x_correction(
997
+ *,
998
+ Ey,
999
+ Hz,
1000
+ EyCurl,
1001
+ PsiEyX,
1002
+ InvKappaEyX,
1003
+ BEyX,
1004
+ CEyX,
1005
+ invDx,
1006
+ offsetI,
1007
+ offsetJ,
1008
+ offsetK,
1009
+ zLowBoundaryMode,
1010
+ zHighBoundaryMode,
1011
+ fullSizeZ,
1012
+ fullSizeX,
1013
+ ):
1014
+ _COMPILED_EXTENSION.apply_electric_ey_cpml_x_correction(
1015
+ Ey, Hz, EyCurl, PsiEyX, InvKappaEyX, BEyX, CEyX, invDx,
1016
+ int(offsetI), int(offsetJ), int(offsetK),
1017
+ int(zLowBoundaryMode), int(zHighBoundaryMode),
1018
+ int(fullSizeZ), int(fullSizeX),
1019
+ )
1020
+
1021
+
1022
+ def _apply_electric_ez_cpml_x_correction(
1023
+ *,
1024
+ Ez,
1025
+ Hy,
1026
+ EzCurl,
1027
+ PsiEzX,
1028
+ InvKappaEzX,
1029
+ BEzX,
1030
+ CEzX,
1031
+ invDx,
1032
+ offsetI,
1033
+ offsetJ,
1034
+ offsetK,
1035
+ yLowBoundaryMode,
1036
+ yHighBoundaryMode,
1037
+ fullSizeY,
1038
+ fullSizeX,
1039
+ ):
1040
+ _COMPILED_EXTENSION.apply_electric_ez_cpml_x_correction(
1041
+ Ez, Hy, EzCurl, PsiEzX, InvKappaEzX, BEzX, CEzX, invDx,
1042
+ int(offsetI), int(offsetJ), int(offsetK),
1043
+ int(yLowBoundaryMode), int(yHighBoundaryMode),
1044
+ int(fullSizeY), int(fullSizeX),
1045
+ )
1046
+
1047
+
1048
+ def _electric_ex_cpml_compressed(
1049
+ *,
1050
+ Ex,
1051
+ Hy,
1052
+ Hz,
1053
+ ExDecay,
1054
+ ExCurl,
1055
+ PsiExY,
1056
+ PsiExZ,
1057
+ InvKappaExY,
1058
+ BExY,
1059
+ CExY,
1060
+ InvKappaExZ,
1061
+ BExZ,
1062
+ CExZ,
1063
+ invDy,
1064
+ invDz,
1065
+ yLowBoundaryMode,
1066
+ yHighBoundaryMode,
1067
+ zLowBoundaryMode,
1068
+ zHighBoundaryMode,
1069
+ psiExYLowLength,
1070
+ psiExYHighStart,
1071
+ psiExYHighLength,
1072
+ psiExZLowLength,
1073
+ psiExZHighStart,
1074
+ psiExZHighLength,
1075
+ uniformDecay,
1076
+ uniformCurl,
1077
+ ):
1078
+ _COMPILED_EXTENSION.update_electric_ex_cpml_compressed(
1079
+ Ex,
1080
+ Hy,
1081
+ Hz,
1082
+ ExDecay,
1083
+ ExCurl,
1084
+ PsiExY,
1085
+ PsiExZ,
1086
+ InvKappaExY,
1087
+ BExY,
1088
+ CExY,
1089
+ InvKappaExZ,
1090
+ BExZ,
1091
+ CExZ,
1092
+ invDy,
1093
+ invDz,
1094
+ int(yLowBoundaryMode),
1095
+ int(yHighBoundaryMode),
1096
+ int(zLowBoundaryMode),
1097
+ int(zHighBoundaryMode),
1098
+ int(psiExYLowLength),
1099
+ int(psiExYHighStart),
1100
+ int(psiExYHighLength),
1101
+ int(psiExZLowLength),
1102
+ int(psiExZHighStart),
1103
+ int(psiExZHighLength),
1104
+ uniformDecay,
1105
+ uniformCurl,
1106
+ )
1107
+
1108
+
1109
+ def _electric_ey_cpml_compressed(
1110
+ *,
1111
+ Ey,
1112
+ Hx,
1113
+ Hz,
1114
+ EyDecay,
1115
+ EyCurl,
1116
+ PsiEyX,
1117
+ PsiEyZ,
1118
+ InvKappaEyX,
1119
+ BEyX,
1120
+ CEyX,
1121
+ InvKappaEyZ,
1122
+ BEyZ,
1123
+ CEyZ,
1124
+ invDx,
1125
+ invDz,
1126
+ xLowBoundaryMode,
1127
+ xHighBoundaryMode,
1128
+ zLowBoundaryMode,
1129
+ zHighBoundaryMode,
1130
+ psiEyXLowLength,
1131
+ psiEyXHighStart,
1132
+ psiEyXHighLength,
1133
+ psiEyZLowLength,
1134
+ psiEyZHighStart,
1135
+ psiEyZHighLength,
1136
+ uniformDecay,
1137
+ uniformCurl,
1138
+ ):
1139
+ _COMPILED_EXTENSION.update_electric_ey_cpml_compressed(
1140
+ Ey,
1141
+ Hx,
1142
+ Hz,
1143
+ EyDecay,
1144
+ EyCurl,
1145
+ PsiEyX,
1146
+ PsiEyZ,
1147
+ InvKappaEyX,
1148
+ BEyX,
1149
+ CEyX,
1150
+ InvKappaEyZ,
1151
+ BEyZ,
1152
+ CEyZ,
1153
+ invDx,
1154
+ invDz,
1155
+ int(xLowBoundaryMode),
1156
+ int(xHighBoundaryMode),
1157
+ int(zLowBoundaryMode),
1158
+ int(zHighBoundaryMode),
1159
+ int(psiEyXLowLength),
1160
+ int(psiEyXHighStart),
1161
+ int(psiEyXHighLength),
1162
+ int(psiEyZLowLength),
1163
+ int(psiEyZHighStart),
1164
+ int(psiEyZHighLength),
1165
+ uniformDecay,
1166
+ uniformCurl,
1167
+ )
1168
+
1169
+
1170
+ def _electric_ez_cpml_compressed(
1171
+ *,
1172
+ Ez,
1173
+ Hx,
1174
+ Hy,
1175
+ EzDecay,
1176
+ EzCurl,
1177
+ PsiEzX,
1178
+ PsiEzY,
1179
+ InvKappaEzX,
1180
+ BEzX,
1181
+ CEzX,
1182
+ InvKappaEzY,
1183
+ BEzY,
1184
+ CEzY,
1185
+ invDx,
1186
+ invDy,
1187
+ xLowBoundaryMode,
1188
+ xHighBoundaryMode,
1189
+ yLowBoundaryMode,
1190
+ yHighBoundaryMode,
1191
+ psiEzXLowLength,
1192
+ psiEzXHighStart,
1193
+ psiEzXHighLength,
1194
+ psiEzYLowLength,
1195
+ psiEzYHighStart,
1196
+ psiEzYHighLength,
1197
+ uniformDecay,
1198
+ uniformCurl,
1199
+ ):
1200
+ _COMPILED_EXTENSION.update_electric_ez_cpml_compressed(
1201
+ Ez,
1202
+ Hx,
1203
+ Hy,
1204
+ EzDecay,
1205
+ EzCurl,
1206
+ PsiEzX,
1207
+ PsiEzY,
1208
+ InvKappaEzX,
1209
+ BEzX,
1210
+ CEzX,
1211
+ InvKappaEzY,
1212
+ BEzY,
1213
+ CEzY,
1214
+ invDx,
1215
+ invDy,
1216
+ int(xLowBoundaryMode),
1217
+ int(xHighBoundaryMode),
1218
+ int(yLowBoundaryMode),
1219
+ int(yHighBoundaryMode),
1220
+ int(psiEzXLowLength),
1221
+ int(psiEzXHighStart),
1222
+ int(psiEzXHighLength),
1223
+ int(psiEzYLowLength),
1224
+ int(psiEzYHighStart),
1225
+ int(psiEzYHighLength),
1226
+ uniformDecay,
1227
+ uniformCurl,
1228
+ )
1229
+
1230
+
1231
+ def _electric_ex_cpml_modulated_compressed(
1232
+ *,
1233
+ Ex,
1234
+ Hy,
1235
+ Hz,
1236
+ ExDecay,
1237
+ ExCurl,
1238
+ ModCos,
1239
+ ModSin,
1240
+ ModOmega,
1241
+ ModulationTime,
1242
+ PsiExY,
1243
+ PsiExZ,
1244
+ InvKappaExY,
1245
+ BExY,
1246
+ CExY,
1247
+ InvKappaExZ,
1248
+ BExZ,
1249
+ CExZ,
1250
+ invDy,
1251
+ invDz,
1252
+ yLowBoundaryMode,
1253
+ yHighBoundaryMode,
1254
+ zLowBoundaryMode,
1255
+ zHighBoundaryMode,
1256
+ psiExYLowLength,
1257
+ psiExYHighStart,
1258
+ psiExYHighLength,
1259
+ psiExZLowLength,
1260
+ psiExZHighStart,
1261
+ psiExZHighLength,
1262
+ ):
1263
+ _COMPILED_EXTENSION.update_electric_ex_cpml_modulated_compressed(
1264
+ Ex,
1265
+ Hy,
1266
+ Hz,
1267
+ ExDecay,
1268
+ ExCurl,
1269
+ ModCos,
1270
+ ModSin,
1271
+ ModOmega,
1272
+ ModulationTime,
1273
+ PsiExY,
1274
+ PsiExZ,
1275
+ InvKappaExY,
1276
+ BExY,
1277
+ CExY,
1278
+ InvKappaExZ,
1279
+ BExZ,
1280
+ CExZ,
1281
+ invDy,
1282
+ invDz,
1283
+ int(yLowBoundaryMode),
1284
+ int(yHighBoundaryMode),
1285
+ int(zLowBoundaryMode),
1286
+ int(zHighBoundaryMode),
1287
+ int(psiExYLowLength),
1288
+ int(psiExYHighStart),
1289
+ int(psiExYHighLength),
1290
+ int(psiExZLowLength),
1291
+ int(psiExZHighStart),
1292
+ int(psiExZHighLength),
1293
+ )
1294
+
1295
+
1296
+ def _electric_ey_cpml_modulated_compressed(
1297
+ *,
1298
+ Ey,
1299
+ Hx,
1300
+ Hz,
1301
+ EyDecay,
1302
+ EyCurl,
1303
+ ModCos,
1304
+ ModSin,
1305
+ ModOmega,
1306
+ ModulationTime,
1307
+ PsiEyX,
1308
+ PsiEyZ,
1309
+ InvKappaEyX,
1310
+ BEyX,
1311
+ CEyX,
1312
+ InvKappaEyZ,
1313
+ BEyZ,
1314
+ CEyZ,
1315
+ invDx,
1316
+ invDz,
1317
+ xLowBoundaryMode,
1318
+ xHighBoundaryMode,
1319
+ zLowBoundaryMode,
1320
+ zHighBoundaryMode,
1321
+ psiEyXLowLength,
1322
+ psiEyXHighStart,
1323
+ psiEyXHighLength,
1324
+ psiEyZLowLength,
1325
+ psiEyZHighStart,
1326
+ psiEyZHighLength,
1327
+ ):
1328
+ _COMPILED_EXTENSION.update_electric_ey_cpml_modulated_compressed(
1329
+ Ey,
1330
+ Hx,
1331
+ Hz,
1332
+ EyDecay,
1333
+ EyCurl,
1334
+ ModCos,
1335
+ ModSin,
1336
+ ModOmega,
1337
+ ModulationTime,
1338
+ PsiEyX,
1339
+ PsiEyZ,
1340
+ InvKappaEyX,
1341
+ BEyX,
1342
+ CEyX,
1343
+ InvKappaEyZ,
1344
+ BEyZ,
1345
+ CEyZ,
1346
+ invDx,
1347
+ invDz,
1348
+ int(xLowBoundaryMode),
1349
+ int(xHighBoundaryMode),
1350
+ int(zLowBoundaryMode),
1351
+ int(zHighBoundaryMode),
1352
+ int(psiEyXLowLength),
1353
+ int(psiEyXHighStart),
1354
+ int(psiEyXHighLength),
1355
+ int(psiEyZLowLength),
1356
+ int(psiEyZHighStart),
1357
+ int(psiEyZHighLength),
1358
+ )
1359
+
1360
+
1361
+ def _electric_ez_cpml_modulated_compressed(
1362
+ *,
1363
+ Ez,
1364
+ Hx,
1365
+ Hy,
1366
+ EzDecay,
1367
+ EzCurl,
1368
+ ModCos,
1369
+ ModSin,
1370
+ ModOmega,
1371
+ ModulationTime,
1372
+ PsiEzX,
1373
+ PsiEzY,
1374
+ InvKappaEzX,
1375
+ BEzX,
1376
+ CEzX,
1377
+ InvKappaEzY,
1378
+ BEzY,
1379
+ CEzY,
1380
+ invDx,
1381
+ invDy,
1382
+ xLowBoundaryMode,
1383
+ xHighBoundaryMode,
1384
+ yLowBoundaryMode,
1385
+ yHighBoundaryMode,
1386
+ psiEzXLowLength,
1387
+ psiEzXHighStart,
1388
+ psiEzXHighLength,
1389
+ psiEzYLowLength,
1390
+ psiEzYHighStart,
1391
+ psiEzYHighLength,
1392
+ ):
1393
+ _COMPILED_EXTENSION.update_electric_ez_cpml_modulated_compressed(
1394
+ Ez,
1395
+ Hx,
1396
+ Hy,
1397
+ EzDecay,
1398
+ EzCurl,
1399
+ ModCos,
1400
+ ModSin,
1401
+ ModOmega,
1402
+ ModulationTime,
1403
+ PsiEzX,
1404
+ PsiEzY,
1405
+ InvKappaEzX,
1406
+ BEzX,
1407
+ CEzX,
1408
+ InvKappaEzY,
1409
+ BEzY,
1410
+ CEzY,
1411
+ invDx,
1412
+ invDy,
1413
+ int(xLowBoundaryMode),
1414
+ int(xHighBoundaryMode),
1415
+ int(yLowBoundaryMode),
1416
+ int(yHighBoundaryMode),
1417
+ int(psiEzXLowLength),
1418
+ int(psiEzXHighStart),
1419
+ int(psiEzXHighLength),
1420
+ int(psiEzYLowLength),
1421
+ int(psiEzYHighStart),
1422
+ int(psiEzYHighLength),
1423
+ )
1424
+
1425
+
1426
+ def _electric_ex_bloch(
1427
+ *,
1428
+ ExReal,
1429
+ ExImag,
1430
+ HyReal,
1431
+ HyImag,
1432
+ HzReal,
1433
+ HzImag,
1434
+ ExDecay,
1435
+ ExCurl,
1436
+ phaseCosY,
1437
+ phaseSinY,
1438
+ phaseCosZ,
1439
+ phaseSinZ,
1440
+ invDy,
1441
+ invDz,
1442
+ ):
1443
+ _COMPILED_EXTENSION.update_electric_ex_bloch(
1444
+ ExReal,
1445
+ ExImag,
1446
+ HyReal,
1447
+ HyImag,
1448
+ HzReal,
1449
+ HzImag,
1450
+ ExDecay,
1451
+ ExCurl,
1452
+ float(phaseCosY),
1453
+ float(phaseSinY),
1454
+ float(phaseCosZ),
1455
+ float(phaseSinZ),
1456
+ invDy,
1457
+ invDz,
1458
+ )
1459
+
1460
+
1461
+ def _electric_ey_bloch(
1462
+ *,
1463
+ EyReal,
1464
+ EyImag,
1465
+ HxReal,
1466
+ HxImag,
1467
+ HzReal,
1468
+ HzImag,
1469
+ EyDecay,
1470
+ EyCurl,
1471
+ phaseCosX,
1472
+ phaseSinX,
1473
+ phaseCosZ,
1474
+ phaseSinZ,
1475
+ invDx,
1476
+ invDz,
1477
+ ):
1478
+ _COMPILED_EXTENSION.update_electric_ey_bloch(
1479
+ EyReal,
1480
+ EyImag,
1481
+ HxReal,
1482
+ HxImag,
1483
+ HzReal,
1484
+ HzImag,
1485
+ EyDecay,
1486
+ EyCurl,
1487
+ float(phaseCosX),
1488
+ float(phaseSinX),
1489
+ float(phaseCosZ),
1490
+ float(phaseSinZ),
1491
+ invDx,
1492
+ invDz,
1493
+ )
1494
+
1495
+
1496
+ def _electric_ex_bloch_y_standard_z(
1497
+ *,
1498
+ ExReal,
1499
+ ExImag,
1500
+ HyReal,
1501
+ HyImag,
1502
+ HzReal,
1503
+ HzImag,
1504
+ ExDecay,
1505
+ ExCurl,
1506
+ phaseCosY,
1507
+ phaseSinY,
1508
+ invDy,
1509
+ invDz,
1510
+ zLowBoundaryMode,
1511
+ zHighBoundaryMode,
1512
+ ):
1513
+ _COMPILED_EXTENSION.update_electric_ex_bloch_y_standard_z(
1514
+ ExReal, ExImag, HyReal, HyImag, HzReal, HzImag, ExDecay, ExCurl,
1515
+ float(phaseCosY), float(phaseSinY), invDy, invDz,
1516
+ int(zLowBoundaryMode), int(zHighBoundaryMode),
1517
+ )
1518
+
1519
+
1520
+ def _electric_ey_bloch_x_standard_z(
1521
+ *,
1522
+ EyReal,
1523
+ EyImag,
1524
+ HxReal,
1525
+ HxImag,
1526
+ HzReal,
1527
+ HzImag,
1528
+ EyDecay,
1529
+ EyCurl,
1530
+ phaseCosX,
1531
+ phaseSinX,
1532
+ invDx,
1533
+ invDz,
1534
+ zLowBoundaryMode,
1535
+ zHighBoundaryMode,
1536
+ ):
1537
+ _COMPILED_EXTENSION.update_electric_ey_bloch_x_standard_z(
1538
+ EyReal, EyImag, HxReal, HxImag, HzReal, HzImag, EyDecay, EyCurl,
1539
+ float(phaseCosX), float(phaseSinX), invDx, invDz,
1540
+ int(zLowBoundaryMode), int(zHighBoundaryMode),
1541
+ )
1542
+
1543
+
1544
+ def _electric_ez_bloch(
1545
+ *,
1546
+ EzReal,
1547
+ EzImag,
1548
+ HxReal,
1549
+ HxImag,
1550
+ HyReal,
1551
+ HyImag,
1552
+ EzDecay,
1553
+ EzCurl,
1554
+ phaseCosX,
1555
+ phaseSinX,
1556
+ phaseCosY,
1557
+ phaseSinY,
1558
+ invDx,
1559
+ invDy,
1560
+ ):
1561
+ _COMPILED_EXTENSION.update_electric_ez_bloch(
1562
+ EzReal,
1563
+ EzImag,
1564
+ HxReal,
1565
+ HxImag,
1566
+ HyReal,
1567
+ HyImag,
1568
+ EzDecay,
1569
+ EzCurl,
1570
+ float(phaseCosX),
1571
+ float(phaseSinX),
1572
+ float(phaseCosY),
1573
+ float(phaseSinY),
1574
+ invDx,
1575
+ invDy,
1576
+ )
1577
+
1578
+
1579
+ def _add_source_patch(*, field, sourcePatch, offsetI, offsetJ, offsetK, signal):
1580
+ _COMPILED_EXTENSION.add_source_patch(
1581
+ field,
1582
+ sourcePatch,
1583
+ int(offsetI),
1584
+ int(offsetJ),
1585
+ int(offsetK),
1586
+ float(signal),
1587
+ )
1588
+
1589
+
1590
+ def _add_cw_phased_source_patch(
1591
+ *,
1592
+ field,
1593
+ sourcePatchCos,
1594
+ sourcePatchSin,
1595
+ offsetI,
1596
+ offsetJ,
1597
+ offsetK,
1598
+ signalCos,
1599
+ signalSin,
1600
+ ):
1601
+ _COMPILED_EXTENSION.add_cw_phased_source_patch(
1602
+ field,
1603
+ sourcePatchCos,
1604
+ sourcePatchSin,
1605
+ int(offsetI),
1606
+ int(offsetJ),
1607
+ int(offsetK),
1608
+ float(signalCos),
1609
+ float(signalSin),
1610
+ )
1611
+
1612
+
1613
+ def _add_time_shifted_source_patch(
1614
+ *,
1615
+ field,
1616
+ sourcePatch,
1617
+ delayPatch,
1618
+ activationDelayPatch,
1619
+ offsetI,
1620
+ offsetJ,
1621
+ offsetK,
1622
+ timeKind,
1623
+ time,
1624
+ frequency,
1625
+ fwidth,
1626
+ amplitude,
1627
+ phase,
1628
+ delay,
1629
+ causalGate,
1630
+ ):
1631
+ _COMPILED_EXTENSION.add_time_shifted_source_patch(
1632
+ field,
1633
+ sourcePatch,
1634
+ delayPatch,
1635
+ activationDelayPatch,
1636
+ int(offsetI),
1637
+ int(offsetJ),
1638
+ int(offsetK),
1639
+ int(timeKind),
1640
+ float(time),
1641
+ float(frequency),
1642
+ float(fwidth),
1643
+ float(amplitude),
1644
+ float(phase),
1645
+ float(delay),
1646
+ int(causalGate),
1647
+ )
1648
+
1649
+
1650
+ def _add_source_patch_periodic(*, signal, sourcePatch, offsetI, offsetJ, offsetK, wrapAxisA, wrapAxisB, **kwargs):
1651
+ if "Ex" in kwargs:
1652
+ field = kwargs["Ex"]
1653
+ extension_method = "add_source_patch_ex_periodic"
1654
+ elif "Ey" in kwargs:
1655
+ field = kwargs["Ey"]
1656
+ extension_method = "add_source_patch_ey_periodic"
1657
+ else:
1658
+ field = kwargs["Ez"]
1659
+ extension_method = "add_source_patch_ez_periodic"
1660
+ getattr(_COMPILED_EXTENSION, extension_method)(
1661
+ field,
1662
+ sourcePatch,
1663
+ int(offsetI),
1664
+ int(offsetJ),
1665
+ int(offsetK),
1666
+ float(signal),
1667
+ int(wrapAxisA),
1668
+ int(wrapAxisB),
1669
+ )
1670
+
1671
+
1672
+ def _add_source_patch_bloch(
1673
+ *,
1674
+ ExReal,
1675
+ ExImag,
1676
+ EyReal,
1677
+ EyImag,
1678
+ EzReal,
1679
+ EzImag,
1680
+ sourcePatch,
1681
+ offsetI,
1682
+ offsetJ,
1683
+ offsetK,
1684
+ signalReal,
1685
+ signalImag,
1686
+ axisCode,
1687
+ phaseCosA,
1688
+ phaseSinA,
1689
+ phaseCosB,
1690
+ phaseSinB,
1691
+ wrapAxisA=1,
1692
+ wrapAxisB=1,
1693
+ ):
1694
+ _COMPILED_EXTENSION.add_source_patch_bloch(
1695
+ ExReal, ExImag, EyReal, EyImag, EzReal, EzImag, sourcePatch,
1696
+ int(offsetI), int(offsetJ), int(offsetK),
1697
+ float(signalReal), float(signalImag), int(axisCode),
1698
+ float(phaseCosA), float(phaseSinA), float(phaseCosB), float(phaseSinB),
1699
+ int(wrapAxisA), int(wrapAxisB),
1700
+ )
1701
+
1702
+
1703
+ def _add_cw_phased_source_patch_bloch(
1704
+ *,
1705
+ ExReal,
1706
+ ExImag,
1707
+ EyReal,
1708
+ EyImag,
1709
+ EzReal,
1710
+ EzImag,
1711
+ sourcePatchCos,
1712
+ sourcePatchSin,
1713
+ offsetI,
1714
+ offsetJ,
1715
+ offsetK,
1716
+ signalCos,
1717
+ signalSin,
1718
+ axisCode,
1719
+ phaseCosA,
1720
+ phaseSinA,
1721
+ phaseCosB,
1722
+ phaseSinB,
1723
+ wrapAxisA=1,
1724
+ wrapAxisB=1,
1725
+ ):
1726
+ real_values = sourcePatchCos * float(signalCos) + sourcePatchSin * float(signalSin)
1727
+ imag_values = sourcePatchCos * float(signalSin) - sourcePatchSin * float(signalCos)
1728
+ extension = _COMPILED_EXTENSION
1729
+ extension.add_source_patch_bloch(
1730
+ ExReal, ExImag, EyReal, EyImag, EzReal, EzImag, real_values,
1731
+ int(offsetI), int(offsetJ), int(offsetK), 1.0, 0.0, int(axisCode),
1732
+ float(phaseCosA), float(phaseSinA), float(phaseCosB), float(phaseSinB),
1733
+ int(wrapAxisA), int(wrapAxisB),
1734
+ )
1735
+ extension.add_source_patch_bloch(
1736
+ ExReal, ExImag, EyReal, EyImag, EzReal, EzImag, imag_values,
1737
+ int(offsetI), int(offsetJ), int(offsetK), 0.0, 1.0, int(axisCode),
1738
+ float(phaseCosA), float(phaseSinA), float(phaseCosB), float(phaseSinB),
1739
+ int(wrapAxisA), int(wrapAxisB),
1740
+ )
1741
+
1742
+
1743
+ def _add_scaled_slice_source_patch(*, field, sourcePatch, incidentField, sampleIndex, offsetI, offsetJ, offsetK, scale):
1744
+ _COMPILED_EXTENSION.add_scaled_slice_source_patch(
1745
+ field,
1746
+ sourcePatch,
1747
+ incidentField,
1748
+ int(sampleIndex),
1749
+ int(offsetI),
1750
+ int(offsetJ),
1751
+ int(offsetK),
1752
+ float(scale),
1753
+ )
1754
+
1755
+
1756
+ def _add_scaled_line_source_patch(
1757
+ *,
1758
+ field,
1759
+ coeffPatch,
1760
+ incidentField,
1761
+ sampleIndices,
1762
+ sampleAxisCode,
1763
+ offsetI,
1764
+ offsetJ,
1765
+ offsetK,
1766
+ scale,
1767
+ ):
1768
+ _COMPILED_EXTENSION.add_scaled_line_source_patch(
1769
+ field,
1770
+ coeffPatch,
1771
+ incidentField,
1772
+ sampleIndices.to(dtype=torch.int32).contiguous(),
1773
+ int(sampleAxisCode),
1774
+ int(offsetI),
1775
+ int(offsetJ),
1776
+ int(offsetK),
1777
+ float(scale),
1778
+ )
1779
+
1780
+
1781
+ def _add_interpolated_source_patch(
1782
+ *,
1783
+ field,
1784
+ coeffPatch,
1785
+ incidentField,
1786
+ samplePositions,
1787
+ origin,
1788
+ ds,
1789
+ offsetI,
1790
+ offsetJ,
1791
+ offsetK,
1792
+ scale,
1793
+ ):
1794
+ _COMPILED_EXTENSION.add_interpolated_source_patch(
1795
+ field,
1796
+ coeffPatch,
1797
+ incidentField,
1798
+ samplePositions,
1799
+ float(origin),
1800
+ float(ds),
1801
+ int(offsetI),
1802
+ int(offsetJ),
1803
+ int(offsetK),
1804
+ float(scale),
1805
+ )
1806
+
1807
+
1808
+ def _legacy_batched_flat_metadata(
1809
+ *,
1810
+ coeff_count: int,
1811
+ termStarts,
1812
+ termShapes,
1813
+ termOffsets,
1814
+ fieldCodes,
1815
+ fieldShapes,
1816
+ sampleAxisCodes=None,
1817
+ sampleIndexStarts=None,
1818
+ sampleIndices=None,
1819
+ ):
1820
+ device = termStarts.device
1821
+ term_starts_cpu = termStarts.detach().to(device="cpu", dtype=torch.long)
1822
+ term_shapes_cpu = termShapes.detach().to(device="cpu", dtype=torch.long)
1823
+ term_offsets_cpu = termOffsets.detach().to(device="cpu", dtype=torch.long)
1824
+ field_codes_cpu = fieldCodes.detach().to(device="cpu", dtype=torch.long)
1825
+ sample_axis_cpu = (
1826
+ sampleAxisCodes.detach().to(device="cpu", dtype=torch.long)
1827
+ if sampleAxisCodes is not None
1828
+ else None
1829
+ )
1830
+ sample_starts_cpu = (
1831
+ sampleIndexStarts.detach().to(device="cpu", dtype=torch.long)
1832
+ if sampleIndexStarts is not None
1833
+ else None
1834
+ )
1835
+ field_offset_dtype = (
1836
+ torch.int32
1837
+ if all(int(shape[0]) * int(shape[1]) * int(shape[2]) <= torch.iinfo(torch.int32).max for shape in fieldShapes)
1838
+ else torch.long
1839
+ )
1840
+ field_codes_flat = torch.empty(coeff_count, device=device, dtype=torch.int32)
1841
+ field_offsets = torch.empty(coeff_count, device=device, dtype=field_offset_dtype)
1842
+ sample_indices_flat = (
1843
+ torch.empty(coeff_count, device=device, dtype=torch.int32)
1844
+ if sampleIndices is not None
1845
+ else None
1846
+ )
1847
+ term_count = int(term_starts_cpu.numel())
1848
+ for term_index in range(term_count):
1849
+ start = int(term_starts_cpu[term_index].item())
1850
+ end = int(term_starts_cpu[term_index + 1].item()) if term_index + 1 < term_count else coeff_count
1851
+ sy = int(term_shapes_cpu[term_index, 1].item())
1852
+ sz = int(term_shapes_cpu[term_index, 2].item())
1853
+ count = end - start
1854
+ local_linear = torch.arange(count, device=device, dtype=torch.int32)
1855
+ stride_i = sy * sz
1856
+ local_i = local_linear // stride_i
1857
+ remainder = local_linear - local_i * stride_i
1858
+ local_j = remainder // sz
1859
+ local_k = remainder - local_j * sz
1860
+ field_codes_flat[start:end] = int(field_codes_cpu[term_index].item())
1861
+ field_i = local_i + int(term_offsets_cpu[term_index, 0].item())
1862
+ field_j = local_j + int(term_offsets_cpu[term_index, 1].item())
1863
+ field_k = local_k + int(term_offsets_cpu[term_index, 2].item())
1864
+ field_code = int(field_codes_cpu[term_index].item())
1865
+ field_shape = fieldShapes[field_code]
1866
+ field_offsets[start:end] = (
1867
+ field_i.to(dtype=torch.long) * (int(field_shape[1]) * int(field_shape[2]))
1868
+ + field_j.to(dtype=torch.long) * int(field_shape[2])
1869
+ + field_k.to(dtype=torch.long)
1870
+ ).to(dtype=field_offset_dtype)
1871
+ if sample_indices_flat is not None:
1872
+ axis = int(sample_axis_cpu[term_index].item())
1873
+ sample_linear = local_i if axis == 0 else (local_j if axis == 1 else local_k)
1874
+ sample_start = int(sample_starts_cpu[term_index].item())
1875
+ sample_indices_flat[start:end] = sampleIndices[sample_start + sample_linear.to(dtype=torch.long)]
1876
+ return field_codes_flat, field_offsets, sample_indices_flat
1877
+
1878
+
1879
+ def _add_batched_reference_source_patches(
1880
+ *,
1881
+ fieldX,
1882
+ fieldY,
1883
+ fieldZ,
1884
+ coeffData,
1885
+ incidentField,
1886
+ termStarts,
1887
+ termShapes,
1888
+ termOffsets,
1889
+ fieldCodes,
1890
+ sampleAxisCodes,
1891
+ sampleIndexStarts,
1892
+ sampleIndices,
1893
+ fieldCodesPerCoeff=None,
1894
+ fieldOffsets=None,
1895
+ sampleIndicesPerCoeff=None,
1896
+ ):
1897
+ if fieldCodesPerCoeff is None or fieldOffsets is None or sampleIndicesPerCoeff is None:
1898
+ fieldCodesPerCoeff, fieldOffsets, sampleIndicesPerCoeff = _legacy_batched_flat_metadata(
1899
+ coeff_count=int(coeffData.numel()),
1900
+ termStarts=termStarts,
1901
+ termShapes=termShapes,
1902
+ termOffsets=termOffsets,
1903
+ fieldCodes=fieldCodes,
1904
+ fieldShapes=(fieldX.shape, fieldY.shape, fieldZ.shape),
1905
+ sampleAxisCodes=sampleAxisCodes,
1906
+ sampleIndexStarts=sampleIndexStarts,
1907
+ sampleIndices=sampleIndices,
1908
+ )
1909
+ _COMPILED_EXTENSION.add_batched_reference_source_patches(
1910
+ fieldX,
1911
+ fieldY,
1912
+ fieldZ,
1913
+ coeffData,
1914
+ incidentField,
1915
+ fieldCodesPerCoeff.to(dtype=torch.int32).contiguous(),
1916
+ fieldOffsets.contiguous(),
1917
+ sampleIndicesPerCoeff.to(dtype=torch.int32).contiguous(),
1918
+ )
1919
+
1920
+
1921
+ def _add_batched_interpolated_source_patches(
1922
+ *,
1923
+ fieldX,
1924
+ fieldY,
1925
+ fieldZ,
1926
+ coeffData,
1927
+ incidentField,
1928
+ samplePositions,
1929
+ termStarts,
1930
+ termShapes,
1931
+ termOffsets,
1932
+ fieldCodes,
1933
+ fieldCodesPerCoeff=None,
1934
+ fieldOffsets=None,
1935
+ origin,
1936
+ ds,
1937
+ ):
1938
+ if fieldCodesPerCoeff is None or fieldOffsets is None:
1939
+ fieldCodesPerCoeff, fieldOffsets, _ = _legacy_batched_flat_metadata(
1940
+ coeff_count=int(coeffData.numel()),
1941
+ termStarts=termStarts,
1942
+ termShapes=termShapes,
1943
+ termOffsets=termOffsets,
1944
+ fieldCodes=fieldCodes,
1945
+ fieldShapes=(fieldX.shape, fieldY.shape, fieldZ.shape),
1946
+ )
1947
+ _COMPILED_EXTENSION.add_batched_interpolated_source_patches(
1948
+ fieldX,
1949
+ fieldY,
1950
+ fieldZ,
1951
+ coeffData,
1952
+ incidentField,
1953
+ samplePositions,
1954
+ fieldCodesPerCoeff.to(dtype=torch.int32).contiguous(),
1955
+ fieldOffsets.contiguous(),
1956
+ float(origin),
1957
+ float(ds),
1958
+ )
1959
+
1960
+
1961
+ def _update_auxiliary_magnetic(*, Magnetic, Electric, MagneticDecay, MagneticCurl):
1962
+ _COMPILED_EXTENSION.update_auxiliary_magnetic(
1963
+ Magnetic,
1964
+ Electric,
1965
+ MagneticDecay,
1966
+ MagneticCurl,
1967
+ )
1968
+
1969
+
1970
+ def _update_auxiliary_electric(*, Electric, Magnetic, ElectricDecay, ElectricCurl, sourceIndex, sourceValue):
1971
+ _COMPILED_EXTENSION.update_auxiliary_electric(
1972
+ Electric,
1973
+ Magnetic,
1974
+ ElectricDecay,
1975
+ ElectricCurl,
1976
+ int(sourceIndex),
1977
+ float(sourceValue),
1978
+ )
1979
+
1980
+
1981
+ def _accumulate_dft_batched(
1982
+ *,
1983
+ Ex,
1984
+ Ey,
1985
+ Ez,
1986
+ ExRealAccum,
1987
+ ExImagAccum,
1988
+ EyRealAccum,
1989
+ EyImagAccum,
1990
+ EzRealAccum,
1991
+ EzImagAccum,
1992
+ weightedCos,
1993
+ weightedSin,
1994
+ ):
1995
+ _COMPILED_EXTENSION.accumulate_dft_batched(
1996
+ Ex,
1997
+ Ey,
1998
+ Ez,
1999
+ ExRealAccum,
2000
+ ExImagAccum,
2001
+ EyRealAccum,
2002
+ EyImagAccum,
2003
+ EzRealAccum,
2004
+ EzImagAccum,
2005
+ weightedCos,
2006
+ weightedSin,
2007
+ )
2008
+
2009
+
2010
+ def _accumulate_point_observers(
2011
+ *,
2012
+ field,
2013
+ pointI,
2014
+ pointJ,
2015
+ pointK,
2016
+ realAccum,
2017
+ imagAccum,
2018
+ weightedCos,
2019
+ weightedSin,
2020
+ ):
2021
+ _COMPILED_EXTENSION.accumulate_point_observers(
2022
+ field,
2023
+ pointI.contiguous(),
2024
+ pointJ.contiguous(),
2025
+ pointK.contiguous(),
2026
+ realAccum,
2027
+ imagAccum,
2028
+ float(weightedCos),
2029
+ float(weightedSin),
2030
+ )
2031
+
2032
+
2033
+ def _accumulate_plane_observer(*, field, planeRealAccum, planeImagAccum, axisCode, planeIndex, weightedCos, weightedSin):
2034
+ _COMPILED_EXTENSION.accumulate_plane_observer(
2035
+ field,
2036
+ planeRealAccum,
2037
+ planeImagAccum,
2038
+ int(axisCode),
2039
+ int(planeIndex),
2040
+ float(weightedCos),
2041
+ float(weightedSin),
2042
+ )
2043
+
2044
+
2045
+ def _plane_flux_reduce(*, ea, eb, ha, hb, weights, out, outIndex, scale):
2046
+ _COMPILED_EXTENSION.plane_flux_reduce(
2047
+ ea,
2048
+ eb,
2049
+ ha,
2050
+ hb,
2051
+ weights,
2052
+ out,
2053
+ int(outIndex),
2054
+ float(scale),
2055
+ )
2056
+
2057
+
2058
+ def _update_debye_current(*, ElectricField, Polarization, PolarizationCurrent, DebyeDrive, decay, dt):
2059
+ _COMPILED_EXTENSION.update_debye_current(
2060
+ ElectricField,
2061
+ Polarization,
2062
+ PolarizationCurrent,
2063
+ DebyeDrive,
2064
+ float(decay),
2065
+ float(dt),
2066
+ )
2067
+
2068
+
2069
+ def _update_drude_current(*, ElectricField, PolarizationCurrent, DrudeDrive, decay):
2070
+ _COMPILED_EXTENSION.update_drude_current(
2071
+ ElectricField,
2072
+ PolarizationCurrent,
2073
+ DrudeDrive,
2074
+ float(decay),
2075
+ )
2076
+
2077
+
2078
+ def _update_lorentz_current(*, ElectricField, Polarization, PolarizationCurrent, LorentzDrive, decay, restoring, dt):
2079
+ _COMPILED_EXTENSION.update_lorentz_current(
2080
+ ElectricField,
2081
+ Polarization,
2082
+ PolarizationCurrent,
2083
+ LorentzDrive,
2084
+ float(decay),
2085
+ float(restoring),
2086
+ float(dt),
2087
+ )
2088
+
2089
+
2090
+ def _apply_polarization_current(*, ElectricField, PolarizationCurrent, InvPermittivity, dt):
2091
+ _COMPILED_EXTENSION.apply_polarization_current(
2092
+ ElectricField,
2093
+ PolarizationCurrent,
2094
+ InvPermittivity,
2095
+ float(dt),
2096
+ )
2097
+
2098
+
2099
+ def _apply_polarization_current_modulated(
2100
+ *, ElectricField, PolarizationCurrent, InvPermittivity, ModCos, ModSin, ModOmega, ModulationTime, dt
2101
+ ):
2102
+ _COMPILED_EXTENSION.apply_polarization_current_modulated(
2103
+ ElectricField,
2104
+ PolarizationCurrent,
2105
+ InvPermittivity,
2106
+ ModCos,
2107
+ ModSin,
2108
+ ModOmega,
2109
+ ModulationTime,
2110
+ float(dt),
2111
+ )
2112
+
2113
+
2114
+ def _advance_modulation_time(*, ModulationTime, dt):
2115
+ _COMPILED_EXTENSION.advance_modulation_time(ModulationTime, float(dt))
2116
+
2117
+
2118
+ def _update_kerr_ex(*, DynamicCurl, Ex, Ey, Ez, LinearPermittivity, ExDecay, KerrChi3, dt, eps0):
2119
+ _COMPILED_EXTENSION.update_kerr_ex_curl(
2120
+ DynamicCurl,
2121
+ Ex,
2122
+ Ey,
2123
+ Ez,
2124
+ LinearPermittivity,
2125
+ ExDecay,
2126
+ KerrChi3,
2127
+ float(dt),
2128
+ float(eps0),
2129
+ )
2130
+
2131
+
2132
+ def _update_kerr_ey(*, DynamicCurl, Ex, Ey, Ez, LinearPermittivity, EyDecay, KerrChi3, dt, eps0):
2133
+ _COMPILED_EXTENSION.update_kerr_ey_curl(
2134
+ DynamicCurl,
2135
+ Ex,
2136
+ Ey,
2137
+ Ez,
2138
+ LinearPermittivity,
2139
+ EyDecay,
2140
+ KerrChi3,
2141
+ float(dt),
2142
+ float(eps0),
2143
+ )
2144
+
2145
+
2146
+ def _update_kerr_ez(*, DynamicCurl, Ex, Ey, Ez, LinearPermittivity, EzDecay, KerrChi3, dt, eps0):
2147
+ _COMPILED_EXTENSION.update_kerr_ez_curl(
2148
+ DynamicCurl,
2149
+ Ex,
2150
+ Ey,
2151
+ Ez,
2152
+ LinearPermittivity,
2153
+ EzDecay,
2154
+ KerrChi3,
2155
+ float(dt),
2156
+ float(eps0),
2157
+ )
2158
+
2159
+
2160
+ _NONLINEAR_COMPONENT_CODES = {"Ex": 0, "Ey": 1, "Ez": 2}
2161
+
2162
+
2163
+ def _update_nonlinear_coefficients(
2164
+ *,
2165
+ DynamicDecay,
2166
+ DynamicCurl,
2167
+ Ex,
2168
+ Ey,
2169
+ Ez,
2170
+ LinearPermittivity,
2171
+ ExternalDecay,
2172
+ SigmaStatic,
2173
+ Chi2,
2174
+ Chi3,
2175
+ TpaSigma,
2176
+ component,
2177
+ dt,
2178
+ eps0,
2179
+ ):
2180
+ _COMPILED_EXTENSION.update_nonlinear_coefficients(
2181
+ DynamicDecay,
2182
+ DynamicCurl,
2183
+ Ex,
2184
+ Ey,
2185
+ Ez,
2186
+ LinearPermittivity,
2187
+ ExternalDecay,
2188
+ SigmaStatic,
2189
+ Chi2,
2190
+ Chi3,
2191
+ TpaSigma,
2192
+ _NONLINEAR_COMPONENT_CODES[component],
2193
+ float(dt),
2194
+ float(eps0),
2195
+ )
2196
+
2197
+
2198
+ def _electric_ex_full_aniso(*, Ex, Hx, Hy, Hz, CoeffY, CoeffZ, invDx, invDy, invDz, periodicX, periodicY, periodicZ):
2199
+ _COMPILED_EXTENSION.update_electric_ex_full_aniso(
2200
+ Ex, Hx, Hy, Hz, CoeffY, CoeffZ, invDx, invDy, invDz,
2201
+ int(periodicX), int(periodicY), int(periodicZ),
2202
+ )
2203
+
2204
+
2205
+ def _electric_ey_full_aniso(*, Ey, Hx, Hy, Hz, CoeffX, CoeffZ, invDx, invDy, invDz, periodicX, periodicY, periodicZ):
2206
+ _COMPILED_EXTENSION.update_electric_ey_full_aniso(
2207
+ Ey, Hx, Hy, Hz, CoeffX, CoeffZ, invDx, invDy, invDz,
2208
+ int(periodicX), int(periodicY), int(periodicZ),
2209
+ )
2210
+
2211
+
2212
+ def _electric_ez_full_aniso(*, Ez, Hx, Hy, Hz, CoeffX, CoeffY, invDx, invDy, invDz, periodicX, periodicY, periodicZ):
2213
+ _COMPILED_EXTENSION.update_electric_ez_full_aniso(
2214
+ Ez, Hx, Hy, Hz, CoeffX, CoeffY, invDx, invDy, invDz,
2215
+ int(periodicX), int(periodicY), int(periodicZ),
2216
+ )
2217
+
2218
+
2219
+ def _electric_ex_full_aniso_cpml(
2220
+ *,
2221
+ Ex, Hx, Hy, Hz, CoeffY, CoeffZ, invDx, invDy, invDz,
2222
+ InvKappaX, BX, CX, InvKappaY, BY, CY, InvKappaZ, BZ, CZ,
2223
+ periodicX, periodicY, periodicZ, PsiX, PsiY, PsiZ,
2224
+ ):
2225
+ _COMPILED_EXTENSION.update_electric_ex_full_aniso_cpml(
2226
+ Ex, Hx, Hy, Hz, CoeffY, CoeffZ, invDx, invDy, invDz,
2227
+ InvKappaX, BX, CX, InvKappaY, BY, CY, InvKappaZ, BZ, CZ,
2228
+ int(periodicX), int(periodicY), int(periodicZ), PsiX, PsiY, PsiZ,
2229
+ )
2230
+
2231
+
2232
+ def _electric_ey_full_aniso_cpml(
2233
+ *,
2234
+ Ey, Hx, Hy, Hz, CoeffX, CoeffZ, invDx, invDy, invDz,
2235
+ InvKappaX, BX, CX, InvKappaY, BY, CY, InvKappaZ, BZ, CZ,
2236
+ periodicX, periodicY, periodicZ, PsiX, PsiY, PsiZ,
2237
+ ):
2238
+ _COMPILED_EXTENSION.update_electric_ey_full_aniso_cpml(
2239
+ Ey, Hx, Hy, Hz, CoeffX, CoeffZ, invDx, invDy, invDz,
2240
+ InvKappaX, BX, CX, InvKappaY, BY, CY, InvKappaZ, BZ, CZ,
2241
+ int(periodicX), int(periodicY), int(periodicZ), PsiX, PsiY, PsiZ,
2242
+ )
2243
+
2244
+
2245
+ def _electric_ez_full_aniso_cpml(
2246
+ *,
2247
+ Ez, Hx, Hy, Hz, CoeffX, CoeffY, invDx, invDy, invDz,
2248
+ InvKappaX, BX, CX, InvKappaY, BY, CY, InvKappaZ, BZ, CZ,
2249
+ periodicX, periodicY, periodicZ, PsiX, PsiY, PsiZ,
2250
+ ):
2251
+ _COMPILED_EXTENSION.update_electric_ez_full_aniso_cpml(
2252
+ Ez, Hx, Hy, Hz, CoeffX, CoeffY, invDx, invDy, invDz,
2253
+ InvKappaX, BX, CX, InvKappaY, BY, CY, InvKappaZ, BZ, CZ,
2254
+ int(periodicX), int(periodicY), int(periodicZ), PsiX, PsiY, PsiZ,
2255
+ )
2256
+
2257
+
2258
+ def _aniso_offdiag_current_ex(*, Ex, Jy, Jz, CoeffY, CoeffZ, periodicX, periodicY, periodicZ):
2259
+ _COMPILED_EXTENSION.apply_aniso_offdiag_current_ex(
2260
+ Ex, Jy, Jz, CoeffY, CoeffZ,
2261
+ int(periodicX), int(periodicY), int(periodicZ),
2262
+ )
2263
+
2264
+
2265
+ def _capture_aniso_conduction_current(*, SigmaX, SigmaY, SigmaZ, Ex, Ey, Ez, Jx, Jy, Jz):
2266
+ _COMPILED_EXTENSION.capture_aniso_conduction_current(
2267
+ SigmaX, SigmaY, SigmaZ, Ex, Ey, Ez, Jx, Jy, Jz
2268
+ )
2269
+
2270
+
2271
+ def _aniso_offdiag_current_ey(*, Ey, Jx, Jz, CoeffX, CoeffZ, periodicX, periodicY, periodicZ):
2272
+ _COMPILED_EXTENSION.apply_aniso_offdiag_current_ey(
2273
+ Ey, Jx, Jz, CoeffX, CoeffZ,
2274
+ int(periodicX), int(periodicY), int(periodicZ),
2275
+ )
2276
+
2277
+
2278
+ def _aniso_offdiag_current_ez(*, Ez, Jx, Jy, CoeffX, CoeffY, periodicX, periodicY, periodicZ):
2279
+ _COMPILED_EXTENSION.apply_aniso_offdiag_current_ez(
2280
+ Ez, Jx, Jy, CoeffX, CoeffY,
2281
+ int(periodicX), int(periodicY), int(periodicZ),
2282
+ )
2283
+
2284
+
2285
+ def _reverse_electric_hx_standard(*, AdjHxMid, AdjHxPost, AdjEyPost, AdjEzPost, EyCurl, EzCurl, invDy, invDz):
2286
+ _COMPILED_EXTENSION.reverse_electric_adjoint_to_hx_standard(
2287
+ AdjHxMid, AdjHxPost, AdjEyPost, AdjEzPost, EyCurl, EzCurl, invDy, invDz
2288
+ )
2289
+
2290
+
2291
+ def _reverse_electric_hy_standard(*, AdjHyMid, AdjHyPost, AdjExPost, AdjEzPost, ExCurl, EzCurl, invDx, invDz):
2292
+ _COMPILED_EXTENSION.reverse_electric_adjoint_to_hy_standard(
2293
+ AdjHyMid, AdjHyPost, AdjExPost, AdjEzPost, ExCurl, EzCurl, invDx, invDz
2294
+ )
2295
+
2296
+
2297
+ def _reverse_electric_hz_standard(*, AdjHzMid, AdjHzPost, AdjExPost, AdjEyPost, ExCurl, EyCurl, invDx, invDy):
2298
+ _COMPILED_EXTENSION.reverse_electric_adjoint_to_hz_standard(
2299
+ AdjHzMid, AdjHzPost, AdjExPost, AdjEyPost, ExCurl, EyCurl, invDx, invDy
2300
+ )
2301
+
2302
+
2303
+ def _reverse_electric_hx_bloch(
2304
+ *,
2305
+ AdjHxMidReal,
2306
+ AdjHxMidImag,
2307
+ AdjHxPostReal,
2308
+ AdjHxPostImag,
2309
+ AdjEyPostReal,
2310
+ AdjEyPostImag,
2311
+ AdjEzPostReal,
2312
+ AdjEzPostImag,
2313
+ EyCurl,
2314
+ EzCurl,
2315
+ phaseCosY,
2316
+ phaseSinY,
2317
+ phaseCosZ,
2318
+ phaseSinZ,
2319
+ invDy,
2320
+ invDz,
2321
+ ):
2322
+ _COMPILED_EXTENSION.reverse_electric_adjoint_to_hx_bloch(
2323
+ AdjHxMidReal, AdjHxMidImag, AdjHxPostReal, AdjHxPostImag,
2324
+ AdjEyPostReal, AdjEyPostImag, AdjEzPostReal, AdjEzPostImag,
2325
+ EyCurl, EzCurl, float(phaseCosY), float(phaseSinY), float(phaseCosZ), float(phaseSinZ),
2326
+ invDy, invDz,
2327
+ )
2328
+
2329
+
2330
+ def _reverse_electric_hy_bloch(
2331
+ *,
2332
+ AdjHyMidReal,
2333
+ AdjHyMidImag,
2334
+ AdjHyPostReal,
2335
+ AdjHyPostImag,
2336
+ AdjExPostReal,
2337
+ AdjExPostImag,
2338
+ AdjEzPostReal,
2339
+ AdjEzPostImag,
2340
+ ExCurl,
2341
+ EzCurl,
2342
+ phaseCosX,
2343
+ phaseSinX,
2344
+ phaseCosZ,
2345
+ phaseSinZ,
2346
+ invDx,
2347
+ invDz,
2348
+ ):
2349
+ _COMPILED_EXTENSION.reverse_electric_adjoint_to_hy_bloch(
2350
+ AdjHyMidReal, AdjHyMidImag, AdjHyPostReal, AdjHyPostImag,
2351
+ AdjExPostReal, AdjExPostImag, AdjEzPostReal, AdjEzPostImag,
2352
+ ExCurl, EzCurl, float(phaseCosX), float(phaseSinX), float(phaseCosZ), float(phaseSinZ),
2353
+ invDx, invDz,
2354
+ )
2355
+
2356
+
2357
+ def _reverse_electric_hz_bloch(
2358
+ *,
2359
+ AdjHzMidReal,
2360
+ AdjHzMidImag,
2361
+ AdjHzPostReal,
2362
+ AdjHzPostImag,
2363
+ AdjExPostReal,
2364
+ AdjExPostImag,
2365
+ AdjEyPostReal,
2366
+ AdjEyPostImag,
2367
+ ExCurl,
2368
+ EyCurl,
2369
+ phaseCosX,
2370
+ phaseSinX,
2371
+ phaseCosY,
2372
+ phaseSinY,
2373
+ invDx,
2374
+ invDy,
2375
+ ):
2376
+ _COMPILED_EXTENSION.reverse_electric_adjoint_to_hz_bloch(
2377
+ AdjHzMidReal, AdjHzMidImag, AdjHzPostReal, AdjHzPostImag,
2378
+ AdjExPostReal, AdjExPostImag, AdjEyPostReal, AdjEyPostImag,
2379
+ ExCurl, EyCurl, float(phaseCosX), float(phaseSinX), float(phaseCosY), float(phaseSinY),
2380
+ invDx, invDy,
2381
+ )
2382
+
2383
+
2384
+ def _reverse_magnetic_ex_standard(
2385
+ *,
2386
+ AdjExPrev,
2387
+ GradEpsEx,
2388
+ AdjExPost,
2389
+ AdjHyMid,
2390
+ AdjHzMid,
2391
+ ExDecay,
2392
+ ExCurl,
2393
+ EpsEx,
2394
+ HyMid,
2395
+ HzMid,
2396
+ HyCurl,
2397
+ HzCurl,
2398
+ invDyE,
2399
+ invDzE,
2400
+ invDyH,
2401
+ invDzH,
2402
+ yLowBoundaryMode,
2403
+ yHighBoundaryMode,
2404
+ zLowBoundaryMode,
2405
+ zHighBoundaryMode,
2406
+ ):
2407
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_to_ex_standard(
2408
+ AdjExPrev,
2409
+ GradEpsEx,
2410
+ AdjExPost,
2411
+ AdjHyMid,
2412
+ AdjHzMid,
2413
+ ExDecay,
2414
+ ExCurl,
2415
+ EpsEx,
2416
+ HyMid,
2417
+ HzMid,
2418
+ HyCurl,
2419
+ HzCurl,
2420
+ invDyE,
2421
+ invDzE,
2422
+ invDyH,
2423
+ invDzH,
2424
+ int(yLowBoundaryMode),
2425
+ int(yHighBoundaryMode),
2426
+ int(zLowBoundaryMode),
2427
+ int(zHighBoundaryMode),
2428
+ )
2429
+
2430
+
2431
+ def _reverse_magnetic_ey_standard(
2432
+ *,
2433
+ AdjEyPrev,
2434
+ GradEpsEy,
2435
+ AdjEyPost,
2436
+ AdjHxMid,
2437
+ AdjHzMid,
2438
+ EyDecay,
2439
+ EyCurl,
2440
+ EpsEy,
2441
+ HxMid,
2442
+ HzMid,
2443
+ HxCurl,
2444
+ HzCurl,
2445
+ invDxE,
2446
+ invDzE,
2447
+ invDxH,
2448
+ invDzH,
2449
+ xLowBoundaryMode,
2450
+ xHighBoundaryMode,
2451
+ zLowBoundaryMode,
2452
+ zHighBoundaryMode,
2453
+ ):
2454
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_to_ey_standard(
2455
+ AdjEyPrev,
2456
+ GradEpsEy,
2457
+ AdjEyPost,
2458
+ AdjHxMid,
2459
+ AdjHzMid,
2460
+ EyDecay,
2461
+ EyCurl,
2462
+ EpsEy,
2463
+ HxMid,
2464
+ HzMid,
2465
+ HxCurl,
2466
+ HzCurl,
2467
+ invDxE,
2468
+ invDzE,
2469
+ invDxH,
2470
+ invDzH,
2471
+ int(xLowBoundaryMode),
2472
+ int(xHighBoundaryMode),
2473
+ int(zLowBoundaryMode),
2474
+ int(zHighBoundaryMode),
2475
+ )
2476
+
2477
+
2478
+ def _reverse_magnetic_ez_standard(
2479
+ *,
2480
+ AdjEzPrev,
2481
+ GradEpsEz,
2482
+ AdjEzPost,
2483
+ AdjHxMid,
2484
+ AdjHyMid,
2485
+ EzDecay,
2486
+ EzCurl,
2487
+ EpsEz,
2488
+ HxMid,
2489
+ HyMid,
2490
+ HxCurl,
2491
+ HyCurl,
2492
+ invDxE,
2493
+ invDyE,
2494
+ invDxH,
2495
+ invDyH,
2496
+ xLowBoundaryMode,
2497
+ xHighBoundaryMode,
2498
+ yLowBoundaryMode,
2499
+ yHighBoundaryMode,
2500
+ ):
2501
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_to_ez_standard(
2502
+ AdjEzPrev,
2503
+ GradEpsEz,
2504
+ AdjEzPost,
2505
+ AdjHxMid,
2506
+ AdjHyMid,
2507
+ EzDecay,
2508
+ EzCurl,
2509
+ EpsEz,
2510
+ HxMid,
2511
+ HyMid,
2512
+ HxCurl,
2513
+ HyCurl,
2514
+ invDxE,
2515
+ invDyE,
2516
+ invDxH,
2517
+ invDyH,
2518
+ int(xLowBoundaryMode),
2519
+ int(xHighBoundaryMode),
2520
+ int(yLowBoundaryMode),
2521
+ int(yHighBoundaryMode),
2522
+ )
2523
+
2524
+
2525
+ def _reverse_magnetic_ex_bloch(
2526
+ *,
2527
+ AdjExPrevReal,
2528
+ AdjExPrevImag,
2529
+ GradEpsEx,
2530
+ AdjExPostReal,
2531
+ AdjExPostImag,
2532
+ AdjHyMidReal,
2533
+ AdjHyMidImag,
2534
+ AdjHzMidReal,
2535
+ AdjHzMidImag,
2536
+ ExDecay,
2537
+ ExCurl,
2538
+ EpsEx,
2539
+ HyMidReal,
2540
+ HyMidImag,
2541
+ HzMidReal,
2542
+ HzMidImag,
2543
+ HyCurl,
2544
+ HzCurl,
2545
+ phaseCosY,
2546
+ phaseSinY,
2547
+ phaseCosZ,
2548
+ phaseSinZ,
2549
+ invDyE,
2550
+ invDzE,
2551
+ invDyH,
2552
+ invDzH,
2553
+ ):
2554
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_to_ex_bloch(
2555
+ AdjExPrevReal, AdjExPrevImag, GradEpsEx, AdjExPostReal, AdjExPostImag,
2556
+ AdjHyMidReal, AdjHyMidImag, AdjHzMidReal, AdjHzMidImag,
2557
+ ExDecay, ExCurl, EpsEx, HyMidReal, HyMidImag, HzMidReal, HzMidImag,
2558
+ HyCurl, HzCurl, float(phaseCosY), float(phaseSinY), float(phaseCosZ), float(phaseSinZ),
2559
+ invDyE, invDzE, invDyH, invDzH,
2560
+ )
2561
+
2562
+
2563
+ def _reverse_magnetic_ey_bloch(
2564
+ *,
2565
+ AdjEyPrevReal,
2566
+ AdjEyPrevImag,
2567
+ GradEpsEy,
2568
+ AdjEyPostReal,
2569
+ AdjEyPostImag,
2570
+ AdjHxMidReal,
2571
+ AdjHxMidImag,
2572
+ AdjHzMidReal,
2573
+ AdjHzMidImag,
2574
+ EyDecay,
2575
+ EyCurl,
2576
+ EpsEy,
2577
+ HxMidReal,
2578
+ HxMidImag,
2579
+ HzMidReal,
2580
+ HzMidImag,
2581
+ HxCurl,
2582
+ HzCurl,
2583
+ phaseCosX,
2584
+ phaseSinX,
2585
+ phaseCosZ,
2586
+ phaseSinZ,
2587
+ invDxE,
2588
+ invDzE,
2589
+ invDxH,
2590
+ invDzH,
2591
+ ):
2592
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_to_ey_bloch(
2593
+ AdjEyPrevReal, AdjEyPrevImag, GradEpsEy, AdjEyPostReal, AdjEyPostImag,
2594
+ AdjHxMidReal, AdjHxMidImag, AdjHzMidReal, AdjHzMidImag,
2595
+ EyDecay, EyCurl, EpsEy, HxMidReal, HxMidImag, HzMidReal, HzMidImag,
2596
+ HxCurl, HzCurl, float(phaseCosX), float(phaseSinX), float(phaseCosZ), float(phaseSinZ),
2597
+ invDxE, invDzE, invDxH, invDzH,
2598
+ )
2599
+
2600
+
2601
+ def _reverse_magnetic_ez_bloch(
2602
+ *,
2603
+ AdjEzPrevReal,
2604
+ AdjEzPrevImag,
2605
+ GradEpsEz,
2606
+ AdjEzPostReal,
2607
+ AdjEzPostImag,
2608
+ AdjHxMidReal,
2609
+ AdjHxMidImag,
2610
+ AdjHyMidReal,
2611
+ AdjHyMidImag,
2612
+ EzDecay,
2613
+ EzCurl,
2614
+ EpsEz,
2615
+ HxMidReal,
2616
+ HxMidImag,
2617
+ HyMidReal,
2618
+ HyMidImag,
2619
+ HxCurl,
2620
+ HyCurl,
2621
+ phaseCosX,
2622
+ phaseSinX,
2623
+ phaseCosY,
2624
+ phaseSinY,
2625
+ invDxE,
2626
+ invDyE,
2627
+ invDxH,
2628
+ invDyH,
2629
+ ):
2630
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_to_ez_bloch(
2631
+ AdjEzPrevReal, AdjEzPrevImag, GradEpsEz, AdjEzPostReal, AdjEzPostImag,
2632
+ AdjHxMidReal, AdjHxMidImag, AdjHyMidReal, AdjHyMidImag,
2633
+ EzDecay, EzCurl, EpsEz, HxMidReal, HxMidImag, HyMidReal, HyMidImag,
2634
+ HxCurl, HyCurl, float(phaseCosX), float(phaseSinX), float(phaseCosY), float(phaseSinY),
2635
+ invDxE, invDyE, invDxH, invDyH,
2636
+ )
2637
+
2638
+
2639
+ def _accumulate_diff_adjoint(field_grad, diff_grad, axis, inv_delta, *, forward):
2640
+ method = (
2641
+ _COMPILED_EXTENSION.accumulate_forward_diff_adjoint
2642
+ if forward
2643
+ else _COMPILED_EXTENSION.accumulate_backward_diff_adjoint
2644
+ )
2645
+ method(field_grad, diff_grad, int(axis), inv_delta)
2646
+
2647
+
2648
+ def _accumulate_forward_diff_x(*, FieldGrad, DiffGrad, invDx):
2649
+ _accumulate_diff_adjoint(FieldGrad, DiffGrad, 0, invDx, forward=True)
2650
+
2651
+
2652
+ def _accumulate_forward_diff_y(*, FieldGrad, DiffGrad, invDy):
2653
+ _accumulate_diff_adjoint(FieldGrad, DiffGrad, 1, invDy, forward=True)
2654
+
2655
+
2656
+ def _accumulate_forward_diff_z(*, FieldGrad, DiffGrad, invDz):
2657
+ _accumulate_diff_adjoint(FieldGrad, DiffGrad, 2, invDz, forward=True)
2658
+
2659
+
2660
+ def _accumulate_backward_diff_x(*, FieldGrad, DiffGrad, invDx):
2661
+ _accumulate_diff_adjoint(FieldGrad, DiffGrad, 0, invDx, forward=False)
2662
+
2663
+
2664
+ def _accumulate_backward_diff_y(*, FieldGrad, DiffGrad, invDy):
2665
+ _accumulate_diff_adjoint(FieldGrad, DiffGrad, 1, invDy, forward=False)
2666
+
2667
+
2668
+ def _accumulate_backward_diff_z(*, FieldGrad, DiffGrad, invDz):
2669
+ _accumulate_diff_adjoint(FieldGrad, DiffGrad, 2, invDz, forward=False)
2670
+
2671
+
2672
+ def _seed_inject_dense(*, AdjField, GradReal, GradImag, CosPack, SinPack, step):
2673
+ _COMPILED_EXTENSION.seed_inject_dense(AdjField, GradReal, GradImag, CosPack, SinPack, int(step))
2674
+
2675
+
2676
+ def _seed_inject_point(*, AdjField, GradReal, GradImag, PointI, PointJ, PointK, CosPack, SinPack, step):
2677
+ _COMPILED_EXTENSION.seed_inject_point(
2678
+ AdjField, GradReal, GradImag, PointI, PointJ, PointK, CosPack, SinPack, int(step)
2679
+ )
2680
+
2681
+
2682
+ def _seed_inject_plane(*, AdjField, GradReal, GradImag, CosPack, SinPack, axis, planeIndex, step):
2683
+ _COMPILED_EXTENSION.seed_inject_plane(
2684
+ AdjField, GradReal, GradImag, CosPack, SinPack, int(axis), int(planeIndex), int(step)
2685
+ )
2686
+
2687
+
2688
+ def _accumulate_in_place(*, dst, src):
2689
+ _COMPILED_EXTENSION.accumulate_in_place(dst, src)
2690
+
2691
+
2692
+ def _reverse_electric_cpml_ex(
2693
+ *,
2694
+ AdjExPrev,
2695
+ GradEpsEx,
2696
+ AdjPsiPosPrev,
2697
+ AdjPsiNegPrev,
2698
+ AdjDPos,
2699
+ AdjDNeg,
2700
+ AdjExPost,
2701
+ AdjPsiPosPost,
2702
+ AdjPsiNegPost,
2703
+ ExDecay,
2704
+ ExCurl,
2705
+ EpsEx,
2706
+ PsiPos,
2707
+ PsiNeg,
2708
+ BPos,
2709
+ CPos,
2710
+ InvKappaPos,
2711
+ BNeg,
2712
+ CNeg,
2713
+ InvKappaNeg,
2714
+ HyMid,
2715
+ HzMid,
2716
+ invDy,
2717
+ invDz,
2718
+ yLowBoundaryMode,
2719
+ yHighBoundaryMode,
2720
+ zLowBoundaryMode,
2721
+ zHighBoundaryMode,
2722
+ ):
2723
+ _COMPILED_EXTENSION.reverse_electric_component_ex_cpml(
2724
+ AdjExPrev, GradEpsEx, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
2725
+ AdjExPost, AdjPsiPosPost, AdjPsiNegPost, ExDecay, ExCurl, EpsEx,
2726
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
2727
+ HyMid, HzMid, invDy, invDz, int(yLowBoundaryMode), int(yHighBoundaryMode), int(zLowBoundaryMode), int(zHighBoundaryMode),
2728
+ )
2729
+
2730
+
2731
+ def _reverse_electric_cpml_ey(
2732
+ *,
2733
+ AdjEyPrev,
2734
+ GradEpsEy,
2735
+ AdjPsiPosPrev,
2736
+ AdjPsiNegPrev,
2737
+ AdjDPos,
2738
+ AdjDNeg,
2739
+ AdjEyPost,
2740
+ AdjPsiPosPost,
2741
+ AdjPsiNegPost,
2742
+ EyDecay,
2743
+ EyCurl,
2744
+ EpsEy,
2745
+ PsiPos,
2746
+ PsiNeg,
2747
+ BPos,
2748
+ CPos,
2749
+ InvKappaPos,
2750
+ BNeg,
2751
+ CNeg,
2752
+ InvKappaNeg,
2753
+ HxMid,
2754
+ HzMid,
2755
+ invDx,
2756
+ invDz,
2757
+ xLowBoundaryMode,
2758
+ xHighBoundaryMode,
2759
+ zLowBoundaryMode,
2760
+ zHighBoundaryMode,
2761
+ ):
2762
+ _COMPILED_EXTENSION.reverse_electric_component_ey_cpml(
2763
+ AdjEyPrev, GradEpsEy, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
2764
+ AdjEyPost, AdjPsiPosPost, AdjPsiNegPost, EyDecay, EyCurl, EpsEy,
2765
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
2766
+ HxMid, HzMid, invDx, invDz, int(xLowBoundaryMode), int(xHighBoundaryMode), int(zLowBoundaryMode), int(zHighBoundaryMode),
2767
+ )
2768
+
2769
+
2770
+ def _reverse_electric_cpml_ez(
2771
+ *,
2772
+ AdjEzPrev,
2773
+ GradEpsEz,
2774
+ AdjPsiPosPrev,
2775
+ AdjPsiNegPrev,
2776
+ AdjDPos,
2777
+ AdjDNeg,
2778
+ AdjEzPost,
2779
+ AdjPsiPosPost,
2780
+ AdjPsiNegPost,
2781
+ EzDecay,
2782
+ EzCurl,
2783
+ EpsEz,
2784
+ PsiPos,
2785
+ PsiNeg,
2786
+ BPos,
2787
+ CPos,
2788
+ InvKappaPos,
2789
+ BNeg,
2790
+ CNeg,
2791
+ InvKappaNeg,
2792
+ HxMid,
2793
+ HyMid,
2794
+ invDx,
2795
+ invDy,
2796
+ xLowBoundaryMode,
2797
+ xHighBoundaryMode,
2798
+ yLowBoundaryMode,
2799
+ yHighBoundaryMode,
2800
+ ):
2801
+ _COMPILED_EXTENSION.reverse_electric_component_ez_cpml(
2802
+ AdjEzPrev, GradEpsEz, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
2803
+ AdjEzPost, AdjPsiPosPost, AdjPsiNegPost, EzDecay, EzCurl, EpsEz,
2804
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
2805
+ HxMid, HyMid, invDx, invDy, int(xLowBoundaryMode), int(xHighBoundaryMode), int(yLowBoundaryMode), int(yHighBoundaryMode),
2806
+ )
2807
+
2808
+
2809
+ def _reverse_electric_cpml_conductive_ex(
2810
+ *,
2811
+ AdjExPrev,
2812
+ GradEpsEx,
2813
+ AdjPsiPosPrev,
2814
+ AdjPsiNegPrev,
2815
+ AdjDPos,
2816
+ AdjDNeg,
2817
+ AdjExPost,
2818
+ AdjPsiPosPost,
2819
+ AdjPsiNegPost,
2820
+ ExDecay,
2821
+ ExCurl,
2822
+ ExHalf,
2823
+ ExPrev,
2824
+ EpsEx,
2825
+ Dt,
2826
+ PsiPos,
2827
+ PsiNeg,
2828
+ BPos,
2829
+ CPos,
2830
+ InvKappaPos,
2831
+ BNeg,
2832
+ CNeg,
2833
+ InvKappaNeg,
2834
+ HyMid,
2835
+ HzMid,
2836
+ invDy,
2837
+ invDz,
2838
+ yLowBoundaryMode,
2839
+ yHighBoundaryMode,
2840
+ zLowBoundaryMode,
2841
+ zHighBoundaryMode,
2842
+ ):
2843
+ _COMPILED_EXTENSION.reverse_electric_component_ex_cpml_conductive(
2844
+ AdjExPrev, GradEpsEx, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
2845
+ AdjExPost, AdjPsiPosPost, AdjPsiNegPost, ExDecay, ExCurl, ExHalf, ExPrev, EpsEx, float(Dt),
2846
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
2847
+ HyMid, HzMid, invDy, invDz, int(yLowBoundaryMode), int(yHighBoundaryMode), int(zLowBoundaryMode), int(zHighBoundaryMode),
2848
+ )
2849
+
2850
+
2851
+ def _reverse_electric_cpml_conductive_ey(
2852
+ *,
2853
+ AdjEyPrev,
2854
+ GradEpsEy,
2855
+ AdjPsiPosPrev,
2856
+ AdjPsiNegPrev,
2857
+ AdjDPos,
2858
+ AdjDNeg,
2859
+ AdjEyPost,
2860
+ AdjPsiPosPost,
2861
+ AdjPsiNegPost,
2862
+ EyDecay,
2863
+ EyCurl,
2864
+ EyHalf,
2865
+ EyPrev,
2866
+ EpsEy,
2867
+ Dt,
2868
+ PsiPos,
2869
+ PsiNeg,
2870
+ BPos,
2871
+ CPos,
2872
+ InvKappaPos,
2873
+ BNeg,
2874
+ CNeg,
2875
+ InvKappaNeg,
2876
+ HxMid,
2877
+ HzMid,
2878
+ invDx,
2879
+ invDz,
2880
+ xLowBoundaryMode,
2881
+ xHighBoundaryMode,
2882
+ zLowBoundaryMode,
2883
+ zHighBoundaryMode,
2884
+ ):
2885
+ _COMPILED_EXTENSION.reverse_electric_component_ey_cpml_conductive(
2886
+ AdjEyPrev, GradEpsEy, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
2887
+ AdjEyPost, AdjPsiPosPost, AdjPsiNegPost, EyDecay, EyCurl, EyHalf, EyPrev, EpsEy, float(Dt),
2888
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
2889
+ HxMid, HzMid, invDx, invDz, int(xLowBoundaryMode), int(xHighBoundaryMode), int(zLowBoundaryMode), int(zHighBoundaryMode),
2890
+ )
2891
+
2892
+
2893
+ def _reverse_electric_cpml_conductive_ez(
2894
+ *,
2895
+ AdjEzPrev,
2896
+ GradEpsEz,
2897
+ AdjPsiPosPrev,
2898
+ AdjPsiNegPrev,
2899
+ AdjDPos,
2900
+ AdjDNeg,
2901
+ AdjEzPost,
2902
+ AdjPsiPosPost,
2903
+ AdjPsiNegPost,
2904
+ EzDecay,
2905
+ EzCurl,
2906
+ EzHalf,
2907
+ EzPrev,
2908
+ EpsEz,
2909
+ Dt,
2910
+ PsiPos,
2911
+ PsiNeg,
2912
+ BPos,
2913
+ CPos,
2914
+ InvKappaPos,
2915
+ BNeg,
2916
+ CNeg,
2917
+ InvKappaNeg,
2918
+ HxMid,
2919
+ HyMid,
2920
+ invDx,
2921
+ invDy,
2922
+ xLowBoundaryMode,
2923
+ xHighBoundaryMode,
2924
+ yLowBoundaryMode,
2925
+ yHighBoundaryMode,
2926
+ ):
2927
+ _COMPILED_EXTENSION.reverse_electric_component_ez_cpml_conductive(
2928
+ AdjEzPrev, GradEpsEz, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
2929
+ AdjEzPost, AdjPsiPosPost, AdjPsiNegPost, EzDecay, EzCurl, EzHalf, EzPrev, EpsEz, float(Dt),
2930
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
2931
+ HxMid, HyMid, invDx, invDy, int(xLowBoundaryMode), int(xHighBoundaryMode), int(yLowBoundaryMode), int(yHighBoundaryMode),
2932
+ )
2933
+
2934
+
2935
+ def _collocation_transpose(
2936
+ *,
2937
+ AdjEx,
2938
+ AdjEy,
2939
+ AdjEz,
2940
+ GEx,
2941
+ GEy,
2942
+ GEz,
2943
+ Ex,
2944
+ Ey,
2945
+ Ez,
2946
+ ):
2947
+ _COMPILED_EXTENSION.collocation_transpose(
2948
+ AdjEx, AdjEy, AdjEz, GEx, GEy, GEz, Ex, Ey, Ez,
2949
+ )
2950
+
2951
+
2952
+ def _collocate_field_square(*, FsqEx, FsqEy, FsqEz, Ex, Ey, Ez):
2953
+ _COMPILED_EXTENSION.collocate_field_square(FsqEx, FsqEy, FsqEz, Ex, Ey, Ez)
2954
+
2955
+
2956
+ def _full_aniso_curl_adjoint(
2957
+ *,
2958
+ AdjCurlX,
2959
+ AdjCurlY,
2960
+ AdjCurlZ,
2961
+ AdjEx,
2962
+ AdjEy,
2963
+ AdjEz,
2964
+ CoeffExY,
2965
+ CoeffExZ,
2966
+ CoeffEyX,
2967
+ CoeffEyZ,
2968
+ CoeffEzX,
2969
+ CoeffEzY,
2970
+ ):
2971
+ _COMPILED_EXTENSION.full_aniso_curl_adjoint(
2972
+ AdjCurlX,
2973
+ AdjCurlY,
2974
+ AdjCurlZ,
2975
+ AdjEx,
2976
+ AdjEy,
2977
+ AdjEz,
2978
+ CoeffExY,
2979
+ CoeffExZ,
2980
+ CoeffEyX,
2981
+ CoeffEyZ,
2982
+ CoeffEzX,
2983
+ CoeffEzY,
2984
+ )
2985
+
2986
+
2987
+ def _reverse_electric_cpml_kerr_ex(
2988
+ *,
2989
+ AdjExPrev,
2990
+ GradEpsEx,
2991
+ GradChi3Ex,
2992
+ GFsqEx,
2993
+ AdjPsiPosPrev,
2994
+ AdjPsiNegPrev,
2995
+ AdjDPos,
2996
+ AdjDNeg,
2997
+ AdjExPost,
2998
+ AdjPsiPosPost,
2999
+ AdjPsiNegPost,
3000
+ ExDecay,
3001
+ EpsEx,
3002
+ Chi3Ex,
3003
+ FsqEx,
3004
+ Dt,
3005
+ Eps0,
3006
+ PsiPos,
3007
+ PsiNeg,
3008
+ BPos,
3009
+ CPos,
3010
+ InvKappaPos,
3011
+ BNeg,
3012
+ CNeg,
3013
+ InvKappaNeg,
3014
+ HyMid,
3015
+ HzMid,
3016
+ invDy,
3017
+ invDz,
3018
+ yLowBoundaryMode,
3019
+ yHighBoundaryMode,
3020
+ zLowBoundaryMode,
3021
+ zHighBoundaryMode,
3022
+ ):
3023
+ _COMPILED_EXTENSION.reverse_electric_component_ex_cpml_kerr(
3024
+ AdjExPrev, GradEpsEx, GradChi3Ex, GFsqEx, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
3025
+ AdjExPost, AdjPsiPosPost, AdjPsiNegPost, ExDecay, EpsEx, Chi3Ex, FsqEx, float(Dt), float(Eps0),
3026
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
3027
+ HyMid, HzMid, invDy, invDz, int(yLowBoundaryMode), int(yHighBoundaryMode), int(zLowBoundaryMode), int(zHighBoundaryMode),
3028
+ )
3029
+
3030
+
3031
+ def _reverse_electric_cpml_kerr_ey(
3032
+ *,
3033
+ AdjEyPrev,
3034
+ GradEpsEy,
3035
+ GradChi3Ey,
3036
+ GFsqEy,
3037
+ AdjPsiPosPrev,
3038
+ AdjPsiNegPrev,
3039
+ AdjDPos,
3040
+ AdjDNeg,
3041
+ AdjEyPost,
3042
+ AdjPsiPosPost,
3043
+ AdjPsiNegPost,
3044
+ EyDecay,
3045
+ EpsEy,
3046
+ Chi3Ey,
3047
+ FsqEy,
3048
+ Dt,
3049
+ Eps0,
3050
+ PsiPos,
3051
+ PsiNeg,
3052
+ BPos,
3053
+ CPos,
3054
+ InvKappaPos,
3055
+ BNeg,
3056
+ CNeg,
3057
+ InvKappaNeg,
3058
+ HxMid,
3059
+ HzMid,
3060
+ invDx,
3061
+ invDz,
3062
+ xLowBoundaryMode,
3063
+ xHighBoundaryMode,
3064
+ zLowBoundaryMode,
3065
+ zHighBoundaryMode,
3066
+ ):
3067
+ _COMPILED_EXTENSION.reverse_electric_component_ey_cpml_kerr(
3068
+ AdjEyPrev, GradEpsEy, GradChi3Ey, GFsqEy, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
3069
+ AdjEyPost, AdjPsiPosPost, AdjPsiNegPost, EyDecay, EpsEy, Chi3Ey, FsqEy, float(Dt), float(Eps0),
3070
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
3071
+ HxMid, HzMid, invDx, invDz, int(xLowBoundaryMode), int(xHighBoundaryMode), int(zLowBoundaryMode), int(zHighBoundaryMode),
3072
+ )
3073
+
3074
+
3075
+ def _reverse_electric_cpml_kerr_ez(
3076
+ *,
3077
+ AdjEzPrev,
3078
+ GradEpsEz,
3079
+ GradChi3Ez,
3080
+ GFsqEz,
3081
+ AdjPsiPosPrev,
3082
+ AdjPsiNegPrev,
3083
+ AdjDPos,
3084
+ AdjDNeg,
3085
+ AdjEzPost,
3086
+ AdjPsiPosPost,
3087
+ AdjPsiNegPost,
3088
+ EzDecay,
3089
+ EpsEz,
3090
+ Chi3Ez,
3091
+ FsqEz,
3092
+ Dt,
3093
+ Eps0,
3094
+ PsiPos,
3095
+ PsiNeg,
3096
+ BPos,
3097
+ CPos,
3098
+ InvKappaPos,
3099
+ BNeg,
3100
+ CNeg,
3101
+ InvKappaNeg,
3102
+ HxMid,
3103
+ HyMid,
3104
+ invDx,
3105
+ invDy,
3106
+ xLowBoundaryMode,
3107
+ xHighBoundaryMode,
3108
+ yLowBoundaryMode,
3109
+ yHighBoundaryMode,
3110
+ ):
3111
+ _COMPILED_EXTENSION.reverse_electric_component_ez_cpml_kerr(
3112
+ AdjEzPrev, GradEpsEz, GradChi3Ez, GFsqEz, AdjPsiPosPrev, AdjPsiNegPrev, AdjDPos, AdjDNeg,
3113
+ AdjEzPost, AdjPsiPosPost, AdjPsiNegPost, EzDecay, EpsEz, Chi3Ez, FsqEz, float(Dt), float(Eps0),
3114
+ PsiPos, PsiNeg, BPos, CPos, InvKappaPos, BNeg, CNeg, InvKappaNeg,
3115
+ HxMid, HyMid, invDx, invDy, int(xLowBoundaryMode), int(xHighBoundaryMode), int(yLowBoundaryMode), int(yHighBoundaryMode),
3116
+ )
3117
+
3118
+
3119
+ def _reverse_electric_cpml_nonlinear(**kwargs):
3120
+ _COMPILED_EXTENSION.reverse_electric_component_cpml_nonlinear(
3121
+ int(kwargs["component"]),
3122
+ kwargs["AdjPrev"], kwargs["GradEps"], kwargs["GradChi2"],
3123
+ kwargs["GradChi3"], kwargs["GradTpa"], kwargs["GFsq"],
3124
+ kwargs["AdjPsiPosPrev"], kwargs["AdjPsiNegPrev"],
3125
+ kwargs["AdjDPos"], kwargs["AdjDNeg"], kwargs["AdjPost"],
3126
+ kwargs["AdjPsiPosPost"], kwargs["AdjPsiNegPost"], kwargs["EPrev"],
3127
+ kwargs["ExternalDecay"], kwargs["Eps"], kwargs["Chi2"],
3128
+ kwargs["Chi3"], kwargs["Tpa"], kwargs["SigmaStatic"], kwargs["Fsq"],
3129
+ float(kwargs["Dt"]), float(kwargs["Eps0"]), kwargs["PsiPos"],
3130
+ kwargs["PsiNeg"], kwargs["BPos"], kwargs["CPos"],
3131
+ kwargs["InvKappaPos"], kwargs["BNeg"], kwargs["CNeg"],
3132
+ kwargs["InvKappaNeg"], kwargs["HPosMid"], kwargs["HNegMid"],
3133
+ kwargs["InvPos"], kwargs["InvNeg"], int(kwargs["LowModeA"]),
3134
+ int(kwargs["HighModeA"]), int(kwargs["LowModeB"]), int(kwargs["HighModeB"]),
3135
+ )
3136
+
3137
+
3138
+ def _reverse_cpml_correction(**kwargs):
3139
+ _COMPILED_EXTENSION.reverse_cpml_correction(
3140
+ kwargs["AdjPsiPrev"], kwargs["AdjDerivative"], kwargs["AdjField"],
3141
+ kwargs["AdjPsiPost"], kwargs["Curl"], kwargs["B"], kwargs["C"],
3142
+ kwargs["InvKappa"], int(kwargs["NormalAxis"]), int(kwargs["TangentAxis"]),
3143
+ int(kwargs["TangentLowMode"]), int(kwargs["TangentHighMode"]), float(kwargs["Sign"]),
3144
+ )
3145
+
3146
+
3147
+ def _reverse_magnetic_cpml_hx(**kwargs):
3148
+ _COMPILED_EXTENSION.reverse_magnetic_component_hx_cpml(
3149
+ kwargs["AdjHxPrev"], kwargs["AdjPsiPosPrev"], kwargs["AdjPsiNegPrev"], kwargs["AdjDPos"], kwargs["AdjDNeg"],
3150
+ kwargs["AdjHxPost"], kwargs["AdjPsiPosPost"], kwargs["AdjPsiNegPost"], kwargs["HxDecay"], kwargs["HxCurl"],
3151
+ kwargs["BPos"], kwargs["CPos"], kwargs["InvKappaPos"], kwargs["BNeg"], kwargs["CNeg"], kwargs["InvKappaNeg"],
3152
+ )
3153
+
3154
+
3155
+ def _reverse_magnetic_cpml_hy(**kwargs):
3156
+ _COMPILED_EXTENSION.reverse_magnetic_component_hy_cpml(
3157
+ kwargs["AdjHyPrev"], kwargs["AdjPsiPosPrev"], kwargs["AdjPsiNegPrev"], kwargs["AdjDPos"], kwargs["AdjDNeg"],
3158
+ kwargs["AdjHyPost"], kwargs["AdjPsiPosPost"], kwargs["AdjPsiNegPost"], kwargs["HyDecay"], kwargs["HyCurl"],
3159
+ kwargs["BPos"], kwargs["CPos"], kwargs["InvKappaPos"], kwargs["BNeg"], kwargs["CNeg"], kwargs["InvKappaNeg"],
3160
+ )
3161
+
3162
+
3163
+ def _reverse_magnetic_cpml_hz(**kwargs):
3164
+ _COMPILED_EXTENSION.reverse_magnetic_component_hz_cpml(
3165
+ kwargs["AdjHzPrev"], kwargs["AdjPsiPosPrev"], kwargs["AdjPsiNegPrev"], kwargs["AdjDPos"], kwargs["AdjDNeg"],
3166
+ kwargs["AdjHzPost"], kwargs["AdjPsiPosPost"], kwargs["AdjPsiNegPost"], kwargs["HzDecay"], kwargs["HzCurl"],
3167
+ kwargs["BPos"], kwargs["CPos"], kwargs["InvKappaPos"], kwargs["BNeg"], kwargs["CNeg"], kwargs["InvKappaNeg"],
3168
+ )
3169
+
3170
+
3171
+ def _reverse_magnetic_hx_decay(*, AdjHxPrev, AdjHxMid, HxDecay):
3172
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_decay(AdjHxPrev, AdjHxMid, HxDecay)
3173
+
3174
+
3175
+ def _reverse_magnetic_hy_decay(*, AdjHyPrev, AdjHyMid, HyDecay):
3176
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_decay(AdjHyPrev, AdjHyMid, HyDecay)
3177
+
3178
+
3179
+ def _reverse_magnetic_hz_decay(*, AdjHzPrev, AdjHzMid, HzDecay):
3180
+ _COMPILED_EXTENSION.reverse_magnetic_adjoint_decay(AdjHzPrev, AdjHzMid, HzDecay)
3181
+
3182
+
3183
+ def _reverse_debye_current(
3184
+ *,
3185
+ AdjElectricPrev,
3186
+ AdjPolarizationPrev,
3187
+ AdjPolarizationPost,
3188
+ AdjCurrentPost,
3189
+ DebyeDrive,
3190
+ decay,
3191
+ dt,
3192
+ ):
3193
+ _COMPILED_EXTENSION.reverse_debye_current(
3194
+ AdjElectricPrev,
3195
+ AdjPolarizationPrev,
3196
+ AdjPolarizationPost,
3197
+ AdjCurrentPost,
3198
+ DebyeDrive,
3199
+ float(decay),
3200
+ float(dt),
3201
+ )
3202
+
3203
+
3204
+ def _reverse_drude_current(*, AdjElectricPrev, AdjCurrentPrev, AdjCurrentPost, DrudeDrive, decay):
3205
+ _COMPILED_EXTENSION.reverse_drude_current(
3206
+ AdjElectricPrev,
3207
+ AdjCurrentPrev,
3208
+ AdjCurrentPost,
3209
+ DrudeDrive,
3210
+ float(decay),
3211
+ )
3212
+
3213
+
3214
+ def _reverse_lorentz_current(
3215
+ *,
3216
+ AdjElectricPrev,
3217
+ AdjPolarizationPrev,
3218
+ AdjCurrentPrev,
3219
+ AdjPolarizationPost,
3220
+ AdjCurrentPost,
3221
+ LorentzDrive,
3222
+ decay,
3223
+ restoring,
3224
+ dt,
3225
+ ):
3226
+ _COMPILED_EXTENSION.reverse_lorentz_current(
3227
+ AdjElectricPrev,
3228
+ AdjPolarizationPrev,
3229
+ AdjCurrentPrev,
3230
+ AdjPolarizationPost,
3231
+ AdjCurrentPost,
3232
+ LorentzDrive,
3233
+ float(decay),
3234
+ float(restoring),
3235
+ float(dt),
3236
+ )
3237
+
3238
+
3239
+ def _reverse_dispersive_correction(
3240
+ *,
3241
+ AdjCurrentCorrected,
3242
+ GradEps,
3243
+ AdjCurrentPost,
3244
+ AdjElectricPost,
3245
+ Current,
3246
+ Eps,
3247
+ dt,
3248
+ ):
3249
+ _COMPILED_EXTENSION.reverse_dispersive_correction(
3250
+ AdjCurrentCorrected,
3251
+ GradEps,
3252
+ AdjCurrentPost,
3253
+ AdjElectricPost,
3254
+ Current,
3255
+ Eps,
3256
+ float(dt),
3257
+ )
3258
+
3259
+
3260
+ def _accumulate_tfsf_scalar_sample_adjoint(*, AdjAuxField, AdjFieldPatch, CoeffPatch, sampleIndex, componentScale):
3261
+ _COMPILED_EXTENSION.accumulate_tfsf_scalar_sample_adjoint(
3262
+ AdjAuxField,
3263
+ AdjFieldPatch,
3264
+ CoeffPatch,
3265
+ int(sampleIndex),
3266
+ float(componentScale),
3267
+ )
3268
+
3269
+
3270
+ def _accumulate_tfsf_line_sample_adjoint(
3271
+ *,
3272
+ AdjAuxField,
3273
+ AdjFieldPatch,
3274
+ CoeffPatch,
3275
+ SampleIndices,
3276
+ sampleAxisCode,
3277
+ componentScale,
3278
+ ):
3279
+ sample_indices = SampleIndices.to(device=AdjAuxField.device, dtype=torch.int32).contiguous()
3280
+ _COMPILED_EXTENSION.accumulate_tfsf_line_sample_adjoint(
3281
+ AdjAuxField,
3282
+ AdjFieldPatch,
3283
+ CoeffPatch,
3284
+ sample_indices,
3285
+ int(sampleAxisCode),
3286
+ float(componentScale),
3287
+ )
3288
+
3289
+
3290
+ def _accumulate_tfsf_interpolated_sample_adjoint(
3291
+ *,
3292
+ AdjAuxField,
3293
+ AdjFieldPatch,
3294
+ CoeffPatch,
3295
+ SamplePositions,
3296
+ origin,
3297
+ ds,
3298
+ componentScale,
3299
+ ):
3300
+ _COMPILED_EXTENSION.accumulate_tfsf_interpolated_sample_adjoint(
3301
+ AdjAuxField,
3302
+ AdjFieldPatch,
3303
+ CoeffPatch,
3304
+ SamplePositions,
3305
+ float(origin),
3306
+ float(ds),
3307
+ float(componentScale),
3308
+ )
3309
+
3310
+
3311
+ def _reverse_tfsf_auxiliary_electric(
3312
+ *,
3313
+ AdjElectricPrev,
3314
+ AdjMagneticAfter,
3315
+ AdjElectricPost,
3316
+ ElectricDecay,
3317
+ ElectricCurl,
3318
+ sourceIndex,
3319
+ ):
3320
+ _COMPILED_EXTENSION.reverse_tfsf_auxiliary_electric(
3321
+ AdjElectricPrev,
3322
+ AdjMagneticAfter,
3323
+ AdjElectricPost,
3324
+ ElectricDecay,
3325
+ ElectricCurl,
3326
+ int(sourceIndex),
3327
+ )
3328
+
3329
+
3330
+ def _reverse_tfsf_auxiliary_magnetic(
3331
+ *,
3332
+ AdjElectricPrev,
3333
+ AdjMagneticPrev,
3334
+ AdjMagneticAfter,
3335
+ MagneticDecay,
3336
+ MagneticCurl,
3337
+ ):
3338
+ _COMPILED_EXTENSION.reverse_tfsf_auxiliary_magnetic(
3339
+ AdjElectricPrev,
3340
+ AdjMagneticPrev,
3341
+ AdjMagneticAfter,
3342
+ MagneticDecay,
3343
+ MagneticCurl,
3344
+ )
3345
+
3346
+
3347
+ def _clamp_field_face(*, field, axis, side):
3348
+ _COMPILED_EXTENSION.clamp_field_face(field, int(axis), int(side))
3349
+
3350
+
3351
+ def _clamp_pec_boundary(*, field, axisA, axisB):
3352
+ _COMPILED_EXTENSION.clamp_pec_boundary(field, int(axisA), int(axisB))
3353
+
3354
+
3355
+ def _mur_abc_face(*, field, axis, boundaryIndex, adjacentIndex, coef, prevBoundary, prevAdjacent):
3356
+ _COMPILED_EXTENSION.mur_abc_face(
3357
+ field,
3358
+ int(axis),
3359
+ int(boundaryIndex),
3360
+ int(adjacentIndex),
3361
+ float(coef),
3362
+ prevBoundary,
3363
+ prevAdjacent,
3364
+ )
3365
+
3366
+
3367
+ def _apply_sibc_surface(
3368
+ *, electric, magnetic, axis, electricIndex, magneticIndex, sign, surfaceR, surfaceLOverDt, hPrev
3369
+ ):
3370
+ _COMPILED_EXTENSION.apply_sibc_surface(
3371
+ electric,
3372
+ magnetic,
3373
+ int(axis),
3374
+ int(electricIndex),
3375
+ int(magneticIndex),
3376
+ float(sign),
3377
+ float(surfaceR),
3378
+ float(surfaceLOverDt),
3379
+ hPrev,
3380
+ )
3381
+
3382
+
3383
+ def _project_periodic_boundary(*, field, axis):
3384
+ _COMPILED_EXTENSION.project_periodic_boundary(field, int(axis))
3385
+
3386
+
3387
+ def _project_bloch_boundary(*, fieldReal, fieldImag, axis, phaseCos, phaseSin):
3388
+ _COMPILED_EXTENSION.project_bloch_boundary(
3389
+ fieldReal,
3390
+ fieldImag,
3391
+ int(axis),
3392
+ float(phaseCos),
3393
+ float(phaseSin),
3394
+ )
3395
+
3396
+
3397
+ _KERNELS: dict[str, Callable[..., None]] = {
3398
+ "updateMagneticFieldHxStandard3D": _magnetic_hx_standard,
3399
+ "updateMagneticFieldHyStandard3D": _magnetic_hy_standard,
3400
+ "updateMagneticFieldHzStandard3D": _magnetic_hz_standard,
3401
+ "updateMagneticFieldHx3D": _magnetic_hx_cpml,
3402
+ "updateMagneticFieldHy3D": _magnetic_hy_cpml,
3403
+ "updateMagneticFieldHz3D": _magnetic_hz_cpml,
3404
+ "updateMagneticFieldHxCpmlCompressed3D": _magnetic_hx_cpml_compressed,
3405
+ "updateMagneticFieldHyCpmlCompressed3D": _magnetic_hy_cpml_compressed,
3406
+ "updateMagneticFieldHzCpmlCompressed3D": _magnetic_hz_cpml_compressed,
3407
+ "updateElectricFieldExStandard3D": _electric_ex_standard,
3408
+ "advanceModulationTime3D": _advance_modulation_time,
3409
+ "updateElectricFieldExModulated3D": _electric_ex_modulated,
3410
+ "updateElectricFieldEyModulated3D": _electric_ey_modulated,
3411
+ "updateElectricFieldEzModulated3D": _electric_ez_modulated,
3412
+ "updateElectricFieldExCpmlModulated3D": _electric_ex_cpml_modulated,
3413
+ "updateElectricFieldEyCpmlModulated3D": _electric_ey_cpml_modulated,
3414
+ "updateElectricFieldEzCpmlModulated3D": _electric_ez_cpml_modulated,
3415
+ "updateElectricFieldEyStandard3D": _electric_ey_standard,
3416
+ "updateElectricFieldEzStandard3D": _electric_ez_standard,
3417
+ "updateElectricFieldExCpml3D": _electric_ex_cpml,
3418
+ "updateElectricFieldEyCpml3D": _electric_ey_cpml,
3419
+ "updateElectricFieldEzCpml3D": _electric_ez_cpml,
3420
+ "updateElectricFieldExCpmlCompressed3D": _electric_ex_cpml_compressed,
3421
+ "updateElectricFieldEyCpmlCompressed3D": _electric_ey_cpml_compressed,
3422
+ "updateElectricFieldEzCpmlCompressed3D": _electric_ez_cpml_compressed,
3423
+ "updateElectricFieldExCpmlModulatedCompressed3D": _electric_ex_cpml_modulated_compressed,
3424
+ "updateElectricFieldEyCpmlModulatedCompressed3D": _electric_ey_cpml_modulated_compressed,
3425
+ "updateElectricFieldEzCpmlModulatedCompressed3D": _electric_ez_cpml_modulated_compressed,
3426
+ "applyElectricFieldExCpmlZCorrection3D": _apply_electric_ex_cpml_z_correction,
3427
+ "applyElectricFieldEyCpmlZCorrection3D": _apply_electric_ey_cpml_z_correction,
3428
+ "applyElectricFieldExCpmlYCorrection3D": _apply_electric_ex_cpml_y_correction,
3429
+ "applyElectricFieldEzCpmlYCorrection3D": _apply_electric_ez_cpml_y_correction,
3430
+ "applyElectricFieldEyCpmlXCorrection3D": _apply_electric_ey_cpml_x_correction,
3431
+ "applyElectricFieldEzCpmlXCorrection3D": _apply_electric_ez_cpml_x_correction,
3432
+ "updateElectricFieldExBloch3D": _electric_ex_bloch,
3433
+ "updateElectricFieldEyBloch3D": _electric_ey_bloch,
3434
+ "updateElectricFieldExBlochYStandardZ3D": _electric_ex_bloch_y_standard_z,
3435
+ "updateElectricFieldEyBlochXStandardZ3D": _electric_ey_bloch_x_standard_z,
3436
+ "updateElectricFieldEzBloch3D": _electric_ez_bloch,
3437
+ "addSourcePatch3D": _add_source_patch,
3438
+ "addCwPhasedSourcePatch3D": _add_cw_phased_source_patch,
3439
+ "addTimeShiftedSourcePatch3D": _add_time_shifted_source_patch,
3440
+ "addSourcePatchExPeriodic3D": _add_source_patch_periodic,
3441
+ "addSourcePatchEyPeriodic3D": _add_source_patch_periodic,
3442
+ "addSourcePatchEzPeriodic3D": _add_source_patch_periodic,
3443
+ "addSourcePatchBloch3D": _add_source_patch_bloch,
3444
+ "addCwPhasedSourcePatchBloch3D": _add_cw_phased_source_patch_bloch,
3445
+ "addScaledSliceSourcePatch3D": _add_scaled_slice_source_patch,
3446
+ "addScaledLineSourcePatch3D": _add_scaled_line_source_patch,
3447
+ "addInterpolatedSourcePatch3D": _add_interpolated_source_patch,
3448
+ "addBatchedReferenceSourcePatches3D": _add_batched_reference_source_patches,
3449
+ "addBatchedInterpolatedSourcePatches3D": _add_batched_interpolated_source_patches,
3450
+ "updateAuxiliaryMagnetic1D": _update_auxiliary_magnetic,
3451
+ "updateAuxiliaryElectric1D": _update_auxiliary_electric,
3452
+ "accumulateRunningDftYee3DBatched": _accumulate_dft_batched,
3453
+ "accumulatePointObservers3D": _accumulate_point_observers,
3454
+ "accumulatePlaneObserver3D": _accumulate_plane_observer,
3455
+ "planeFluxReduce": _plane_flux_reduce,
3456
+ "updateDebyeCurrent3D": _update_debye_current,
3457
+ "updateDrudeCurrent3D": _update_drude_current,
3458
+ "updateLorentzCurrent3D": _update_lorentz_current,
3459
+ "applyPolarizationCurrent3D": _apply_polarization_current,
3460
+ "applyPolarizationCurrentModulated3D": _apply_polarization_current_modulated,
3461
+ "updateKerrElectricFieldExCurl3D": _update_kerr_ex,
3462
+ "updateKerrElectricFieldEyCurl3D": _update_kerr_ey,
3463
+ "updateKerrElectricFieldEzCurl3D": _update_kerr_ez,
3464
+ "updateNonlinearElectricCoefficients3D": _update_nonlinear_coefficients,
3465
+ "updateElectricFieldExFullAniso3D": _electric_ex_full_aniso,
3466
+ "updateElectricFieldEyFullAniso3D": _electric_ey_full_aniso,
3467
+ "updateElectricFieldEzFullAniso3D": _electric_ez_full_aniso,
3468
+ "updateElectricFieldExFullAnisoCpml3D": _electric_ex_full_aniso_cpml,
3469
+ "updateElectricFieldEyFullAnisoCpml3D": _electric_ey_full_aniso_cpml,
3470
+ "updateElectricFieldEzFullAnisoCpml3D": _electric_ez_full_aniso_cpml,
3471
+ "captureAnisoConductionCurrent3D": _capture_aniso_conduction_current,
3472
+ "applyAnisoOffdiagCurrentEx3D": _aniso_offdiag_current_ex,
3473
+ "applyAnisoOffdiagCurrentEy3D": _aniso_offdiag_current_ey,
3474
+ "applyAnisoOffdiagCurrentEz3D": _aniso_offdiag_current_ez,
3475
+ "reverseElectricAdjointToHxStandard3D": _reverse_electric_hx_standard,
3476
+ "reverseElectricAdjointToHyStandard3D": _reverse_electric_hy_standard,
3477
+ "reverseElectricAdjointToHzStandard3D": _reverse_electric_hz_standard,
3478
+ "reverseMagneticAdjointToExStandard3D": _reverse_magnetic_ex_standard,
3479
+ "reverseMagneticAdjointToEyStandard3D": _reverse_magnetic_ey_standard,
3480
+ "reverseMagneticAdjointToEzStandard3D": _reverse_magnetic_ez_standard,
3481
+ "reverseMagneticAdjointToHxStandard3D": _reverse_magnetic_hx_decay,
3482
+ "reverseMagneticAdjointToHyStandard3D": _reverse_magnetic_hy_decay,
3483
+ "reverseMagneticAdjointToHzStandard3D": _reverse_magnetic_hz_decay,
3484
+ "reverseElectricAdjointToHxBloch3D": _reverse_electric_hx_bloch,
3485
+ "reverseElectricAdjointToHyBloch3D": _reverse_electric_hy_bloch,
3486
+ "reverseElectricAdjointToHzBloch3D": _reverse_electric_hz_bloch,
3487
+ "reverseMagneticAdjointToExBloch3D": _reverse_magnetic_ex_bloch,
3488
+ "reverseMagneticAdjointToEyBloch3D": _reverse_magnetic_ey_bloch,
3489
+ "reverseMagneticAdjointToEzBloch3D": _reverse_magnetic_ez_bloch,
3490
+ "accumulateForwardDiffAdjointX3D": _accumulate_forward_diff_x,
3491
+ "accumulateForwardDiffAdjointY3D": _accumulate_forward_diff_y,
3492
+ "accumulateForwardDiffAdjointZ3D": _accumulate_forward_diff_z,
3493
+ "accumulateBackwardDiffAdjointX3D": _accumulate_backward_diff_x,
3494
+ "accumulateBackwardDiffAdjointY3D": _accumulate_backward_diff_y,
3495
+ "accumulateBackwardDiffAdjointZ3D": _accumulate_backward_diff_z,
3496
+ "seedInjectDense3D": _seed_inject_dense,
3497
+ "seedInjectPoint3D": _seed_inject_point,
3498
+ "seedInjectPlane3D": _seed_inject_plane,
3499
+ "accumulateInPlace3D": _accumulate_in_place,
3500
+ "reverseElectricComponentExCpml3D": _reverse_electric_cpml_ex,
3501
+ "reverseElectricComponentEyCpml3D": _reverse_electric_cpml_ey,
3502
+ "reverseElectricComponentEzCpml3D": _reverse_electric_cpml_ez,
3503
+ "reverseElectricComponentExCpmlConductive3D": _reverse_electric_cpml_conductive_ex,
3504
+ "reverseElectricComponentEyCpmlConductive3D": _reverse_electric_cpml_conductive_ey,
3505
+ "reverseElectricComponentEzCpmlConductive3D": _reverse_electric_cpml_conductive_ez,
3506
+ "collocationTranspose3D": _collocation_transpose,
3507
+ "collocateFieldSquare3D": _collocate_field_square,
3508
+ "fullAnisoCurlAdjoint3D": _full_aniso_curl_adjoint,
3509
+ "reverseElectricComponentExCpmlKerr3D": _reverse_electric_cpml_kerr_ex,
3510
+ "reverseElectricComponentEyCpmlKerr3D": _reverse_electric_cpml_kerr_ey,
3511
+ "reverseElectricComponentEzCpmlKerr3D": _reverse_electric_cpml_kerr_ez,
3512
+ "reverseElectricComponentCpmlNonlinear3D": _reverse_electric_cpml_nonlinear,
3513
+ "reverseCpmlCorrection3D": _reverse_cpml_correction,
3514
+ "reverseMagneticComponentHxCpml3D": _reverse_magnetic_cpml_hx,
3515
+ "reverseMagneticComponentHyCpml3D": _reverse_magnetic_cpml_hy,
3516
+ "reverseMagneticComponentHzCpml3D": _reverse_magnetic_cpml_hz,
3517
+ "reverseDebyeCurrent3D": _reverse_debye_current,
3518
+ "reverseDrudeCurrent3D": _reverse_drude_current,
3519
+ "reverseLorentzCurrent3D": _reverse_lorentz_current,
3520
+ "reverseDispersiveCorrection3D": _reverse_dispersive_correction,
3521
+ "accumulateTfsfScalarSampleAdjoint3D": _accumulate_tfsf_scalar_sample_adjoint,
3522
+ "accumulateTfsfLineSampleAdjoint3D": _accumulate_tfsf_line_sample_adjoint,
3523
+ "accumulateTfsfInterpolatedSampleAdjoint3D": _accumulate_tfsf_interpolated_sample_adjoint,
3524
+ "reverseTfsfAuxiliaryElectric1D": _reverse_tfsf_auxiliary_electric,
3525
+ "reverseTfsfAuxiliaryMagnetic1D": _reverse_tfsf_auxiliary_magnetic,
3526
+ "clampFieldFace3D": _clamp_field_face,
3527
+ "clampPecBoundary3D": _clamp_pec_boundary,
3528
+ "applyMurBoundary3D": _mur_abc_face,
3529
+ "applySibcSurface3D": _apply_sibc_surface,
3530
+ "projectPeriodicBoundary3D": _project_periodic_boundary,
3531
+ "projectBlochBoundary3D": _project_bloch_boundary,
3532
+ }