state.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import { cloneDeep } from 'lodash';
  2. import Spline from 'cubic-spline-ts';
  3. // All numbers with units (e.g. size, radius, wavelength, e.g.) are given in nanometers.
  4. export interface material {
  5. name: string;
  6. spectrumRangeStart: number | undefined;
  7. spectrumRangeEnd: number | undefined;
  8. nSpline: Spline | undefined;
  9. kSpline: Spline | undefined;
  10. isPlot: boolean | undefined;
  11. }
  12. export interface layer {
  13. layerWidth: number;
  14. material: material;
  15. n: number;
  16. k: number;
  17. }
  18. export enum nearFieldPlane {
  19. Ek = 0,
  20. Hk,
  21. EH = 2,
  22. }
  23. export interface nearFieldSetup {
  24. atWL: number;
  25. relativePlotSize: number;
  26. // X0, Y0, and Z0 refers to simulation
  27. atRelativeX0: number;
  28. atRelativeY0: number;
  29. atRelativeZ0: number;
  30. // X and Y refers to plot
  31. plotXSideResolution: number;
  32. plotYSideResolution: number;
  33. crossSection: nearFieldPlane;
  34. // maxComputeTime: number //in seconds
  35. }
  36. export interface simulationSetup {
  37. hostIndex: number;
  38. fromWL: number;
  39. toWL: number;
  40. pointsWL: number;
  41. layers: layer[];
  42. numberOfModesToPlot: number;
  43. plotLabel: string;
  44. nearFieldSetup: nearFieldSetup;
  45. farFieldWL: number;
  46. }
  47. export interface nmieModule {
  48. //nmie instance
  49. instance: import('src/nmiejs').nmie_class | undefined;
  50. isNmieRunning: boolean;
  51. nmieTotalRunTime: number;
  52. }
  53. export interface simulationSetupStateInterface {
  54. library: Map<string, simulationSetup>;
  55. gui: simulationSetup;
  56. current: simulationSetup;
  57. nmies: { spectrum: nmieModule; nearField: nmieModule; farField: nmieModule };
  58. }
  59. function setupFactory(
  60. hostIndex = 1,
  61. fromWL = 400,
  62. toWL = 1000,
  63. pointsWL = 201,
  64. layers = [
  65. {
  66. layerWidth: 100,
  67. n: 4,
  68. k: 0.01,
  69. material: {
  70. name: 'nk-constant',
  71. spectrumRangeStart: undefined,
  72. spectrumRangeEnd: undefined,
  73. nSpline: undefined,
  74. kSpline: undefined,
  75. isPlot: false,
  76. },
  77. },
  78. ],
  79. numberOfModesToPlot = 3,
  80. plotLabel = '',
  81. nearFieldSetup = {
  82. atWL: 619.3885178,
  83. relativePlotSize: 2,
  84. atRelativeX0: 0,
  85. atRelativeY0: 0,
  86. atRelativeZ0: 0,
  87. plotXSideResolution: 64,
  88. plotYSideResolution: 64,
  89. crossSection: nearFieldPlane.Ek,
  90. // maxComputeTime: 5 //in seconds
  91. },
  92. farFieldWL = 619
  93. ): simulationSetup {
  94. return {
  95. hostIndex: hostIndex,
  96. fromWL: fromWL,
  97. toWL: toWL,
  98. pointsWL: pointsWL,
  99. layers: cloneDeep(layers),
  100. numberOfModesToPlot: numberOfModesToPlot,
  101. plotLabel: plotLabel,
  102. nearFieldSetup: nearFieldSetup,
  103. farFieldWL: farFieldWL,
  104. };
  105. }
  106. function state(): simulationSetupStateInterface {
  107. const gui = setupFactory();
  108. const current = cloneDeep(gui);
  109. const library = new Map<string, simulationSetup>();
  110. library.set('default', cloneDeep(gui));
  111. const nmies = {
  112. spectrum: {
  113. instance: undefined,
  114. isNmieRunning: false,
  115. nmieTotalRunTime: 0,
  116. },
  117. nearField: {
  118. instance: undefined,
  119. isNmieRunning: false,
  120. nmieTotalRunTime: 0,
  121. },
  122. farField: {
  123. instance: undefined,
  124. isNmieRunning: false,
  125. nmieTotalRunTime: 0,
  126. },
  127. };
  128. return {
  129. library,
  130. gui, // simulation setup config as shown in GUI
  131. current, // simulation setup used for the latest simulation
  132. nmies,
  133. };
  134. }
  135. export default state;