index.html 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Scattnlay web</title>
  8. <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  9. </head>
  10. <body>
  11. WL from <input type="number" id="fromWL" step="any" value="400.0">
  12. to <input type="number" id="toWL" step="any" value="800">
  13. step <input type="number" id="stepWL" step="any" value="0.1"><br>
  14. R: <input type="number" id="R" step="any" value="100">
  15. Re(n): <input type="number" id="reN" step="any" value="4">
  16. Im(n): <input type="number" id="imN" step="any" value="0"><br>
  17. <button id="Evaluate">Run Mie!</button> <div id="time"></div>
  18. <div id="PlotQsca" style="width:640px;height:580px;" ></div>
  19. <script src="/nmie.js"></script>
  20. <script>
  21. const range = (start, stop, step = 1) =>
  22. Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step)
  23. Module.addOnPostRun(() => {
  24. const nmie = new Module.nmie()
  25. Evaluate.onclick = () => {
  26. var t0 = performance.now();
  27. var fromWL = parseFloat(document.getElementById("fromWL").value);
  28. var toWL = parseFloat(document.getElementById("toWL").value);
  29. var stepWL = parseFloat(document.getElementById("stepWL").value);
  30. var R = parseFloat(document.getElementById("R").value);
  31. var reN = parseFloat(document.getElementById("reN").value);
  32. var imN = parseFloat(document.getElementById("imN").value);
  33. nmie.ClearTarget();
  34. nmie.AddTargetLayerReIm(R, reN, imN)
  35. var WLs = range(fromWL,toWL,stepWL)
  36. var Qsca = [], Qabs = [];
  37. WLs.forEach(function(WL) {
  38. nmie.SetWavelength(WL);
  39. nmie.RunMieCalculation();
  40. Qsca.push(nmie.GetQsca());
  41. Qabs.push(nmie.GetQabs());
  42. });
  43. console.log('Qsca = ', Qsca);
  44. var trace1 = {
  45. x: WLs,
  46. y: Qsca,
  47. type: 'scatter',
  48. name: 'Qsca'
  49. };
  50. var trace2 = {
  51. x: WLs,
  52. y: Qabs,
  53. type: 'scatter',
  54. name: 'Qabs'
  55. };
  56. var data = [trace1, trace2];
  57. var layout = {
  58. title: {
  59. text:'Mie calculation',
  60. // font: {
  61. // family: 'Courier New, monospace',
  62. // size: 24
  63. // },
  64. xref: 'paper',
  65. x: 0.05,
  66. },
  67. xaxis: {
  68. title: {
  69. text: 'Wavelength',
  70. // font: {
  71. // family: 'Courier New, monospace',
  72. // size: 18,
  73. // color: '#7f7f7f'
  74. // }
  75. },
  76. },
  77. yaxis: {
  78. title: {
  79. text: 'Q',
  80. // font: {
  81. // family: 'Courier New, monospace',
  82. // size: 18,
  83. // color: '#7f7f7f'
  84. // }
  85. }
  86. }
  87. };
  88. Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true});
  89. var t1 = performance.now();
  90. document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " seconds.";
  91. };
  92. })
  93. </script>
  94. </body>
  95. </html>