index.html 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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="1000">
  13. step <input type="number" id="stepWL" step="any" value="5"><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.01"><br>
  17. <button id="Evaluate" autofocus>Run Mie!</button> <span id="time"></span>
  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. if (!Array.prototype.last){
  24. Array.prototype.last = function(){
  25. return this[this.length - 1];
  26. };
  27. };
  28. Module.addOnPostRun(() => {
  29. Evaluate.onclick = () => {
  30. const nmie = new Module.nmie()
  31. var t0 = performance.now();
  32. var fromWL = parseFloat(document.getElementById("fromWL").value);
  33. var toWL = parseFloat(document.getElementById("toWL").value);
  34. var stepWL = parseFloat(document.getElementById("stepWL").value);
  35. var R = parseFloat(document.getElementById("R").value);
  36. var reN = parseFloat(document.getElementById("reN").value);
  37. var imN = parseFloat(document.getElementById("imN").value);
  38. nmie.ClearTarget();
  39. nmie.AddTargetLayerReIm(R, reN, imN)
  40. var WLs = range(fromWL,toWL,stepWL)
  41. var Qsca = [], Qabs = [];
  42. var Qsca_n = [[],[]], Qabs_n = [[],[]];
  43. var mode_n = range(1,4)
  44. var mode_n1 = range(1,5)
  45. var mode_types = range(0,2)
  46. mode_types.forEach(function(mode_type) {
  47. mode_n1.forEach(function (n) {
  48. Qsca_n[mode_type].push([]);
  49. Qabs_n[mode_type].push([]);
  50. });
  51. });
  52. WLs.forEach(function(WL) {
  53. console.log(WL)
  54. nmie.SetModeNmaxAndType(-1, -1);
  55. nmie.SetWavelength(WL);
  56. nmie.RunMieCalculation();
  57. Qsca.push(nmie.GetQsca());
  58. Qabs.push(nmie.GetQabs());
  59. mode_n.forEach(function (n) {
  60. mode_types.forEach(function(mode_type) {
  61. console.log(mode_type,n-1,Qsca_n[mode_type,0,n-1])
  62. nmie.SetModeNmaxAndType(n,mode_type);
  63. nmie.RunMieCalculation();
  64. // Qsca_n[mode_type,n-1].push(nmie.GetQsca());
  65. // Qabs_n[mode_type,n-1].push(nmie.GetQabs());
  66. });
  67. });
  68. });
  69. console.log('Qsca_n = ', Qsca_n);
  70. var trace1 = {
  71. x: WLs,
  72. y: Qsca,
  73. type: 'scatter',
  74. name: 'Qsca'
  75. };
  76. var trace2 = {
  77. x: WLs,
  78. y: Qabs,
  79. type: 'scatter',
  80. name: 'Qabs'
  81. };
  82. var data = [trace1, trace2];
  83. var layout = {
  84. title: {
  85. text:'Mie calculation',
  86. // font: {
  87. // family: 'Courier New, monospace',
  88. // size: 24
  89. // },
  90. xref: 'paper',
  91. x: 0.05,
  92. },
  93. xaxis: {
  94. title: {
  95. text: 'Wavelength',
  96. // font: {
  97. // family: 'Courier New, monospace',
  98. // size: 18,
  99. // color: '#7f7f7f'
  100. // }
  101. },
  102. },
  103. yaxis: {
  104. title: {
  105. text: 'Q',
  106. // font: {
  107. // family: 'Courier New, monospace',
  108. // size: 18,
  109. // color: '#7f7f7f'
  110. // }
  111. }
  112. }
  113. };
  114. Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
  115. var t1 = performance.now();
  116. document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " s.";
  117. };
  118. })
  119. </script>
  120. </body>
  121. </html>