|  | @@ -1,5 +1,5 @@
 | 
											
												
													
														|  |  <!DOCTYPE html>
 |  |  <!DOCTYPE html>
 | 
											
												
													
														|  | -<html lang="en">
 |  | 
 | 
											
												
													
														|  | 
 |  | +<html lang="en" xmlns="http://www.w3.org/1999/html">
 | 
											
												
													
														|  |  <head>
 |  |  <head>
 | 
											
												
													
														|  |    <meta charset="UTF-8">
 |  |    <meta charset="UTF-8">
 | 
											
												
													
														|  |    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 |  |    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
											
										
											
												
													
														|  | @@ -8,10 +8,20 @@
 | 
											
												
													
														|  |    <link rel="stylesheet" type="text/css" href="nmie.css">
 |  |    <link rel="stylesheet" type="text/css" href="nmie.css">
 | 
											
												
													
														|  |    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
 |  |    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
 | 
											
												
													
														|  |  </head>
 |  |  </head>
 | 
											
												
													
														|  | -<body onload=runMie()>
 |  | 
 | 
											
												
													
														|  | 
 |  | +<body>
 | 
											
												
													
														|  | 
 |  | +<div id="Usage" style="font-size: small;">
 | 
											
												
													
														|  | 
 |  | +<span style="text-decoration: underline;text-emphasis: before;">Usage:</span>
 | 
											
												
													
														|  | 
 |  | +Feel free to use provided software, however, use it at your own risk. We make our best effort to verify
 | 
											
												
													
														|  | 
 |  | +it is correct, however, we do not provide any warranty.
 | 
											
												
													
														|  | 
 |  | +  <p>
 | 
											
												
													
														|  | 
 |  | +If it was usefull for your project, please, cite in your related paper the following reference:
 | 
											
												
													
														|  | 
 |  | +<div style="font-style: italic">Mie calculation of electromagnetic near-field for a multilayered sphere</div>
 | 
											
												
													
														|  | 
 |  | +Konstantin Ladutenko, Umapada Pal, Antonio Rivera, Ovidio Peña-Rodríguez<br>
 | 
											
												
													
														|  | 
 |  | +  <span style="font-weight: bold">Comp. Phys. Comm., vol. 214, pp. 225–230, 2017</span></p>
 | 
											
												
													
														|  | 
 |  | +</div>
 | 
											
												
													
														|  |  WL from <input type="number" id="fromWL" step="any" value="300.0">
 |  |  WL from <input type="number" id="fromWL" step="any" value="300.0">
 | 
											
												
													
														|  |  to <input type="number" id="toWL" step="any" value="1000">
 |  |  to <input type="number" id="toWL" step="any" value="1000">
 | 
											
												
													
														|  | -step <input type="number" id="stepWL" step="any" value="0.1"><br>
 |  | 
 | 
											
												
													
														|  | 
 |  | +step <input type="number" id="stepWL" step="any" value="0.5"><br>
 | 
											
												
													
														|  |  R: <input type="number" id="R" step="any" value="100">
 |  |  R: <input type="number" id="R" step="any" value="100">
 | 
											
												
													
														|  |  Re(n): <input type="number" id="reN" step="any" value="4">
 |  |  Re(n): <input type="number" id="reN" step="any" value="4">
 | 
											
												
													
														|  |  Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 |  |  Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
											
										
											
												
													
														|  | @@ -22,10 +32,12 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
											
												
													
														|  |  </div>
 |  |  </div>
 | 
											
												
													
														|  |    <script src="nmie.js"></script>
 |  |    <script src="nmie.js"></script>
 | 
											
												
													
														|  |    <script>
 |  |    <script>
 | 
											
												
													
														|  | 
 |  | +    'use strict';
 | 
											
												
													
														|  |      const total_mode_n = 4;
 |  |      const total_mode_n = 4;
 | 
											
												
													
														|  | -    var mode_n, mode_types;
 |  | 
 | 
											
												
													
														|  | -    var WLs, layout, trace1, trace2;
 |  | 
 | 
											
												
													
														|  | -    var Qsca, Qabs, Qsca_n, Qabs_n;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let mode_n, mode_types;
 | 
											
												
													
														|  | 
 |  | +    let mode_names = ['E','H'];
 | 
											
												
													
														|  | 
 |  | +    let WLs, layout, trace1, trace2;
 | 
											
												
													
														|  | 
 |  | +    let Qsca, Qabs, Qsca_n, Qabs_n;
 | 
											
												
													
														|  |      const range = (start, stop, step = 1) =>
 |  |      const range = (start, stop, step = 1) =>
 | 
											
												
													
														|  |              Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step);
 |  |              Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step);
 | 
											
												
													
														|  |      if (!Array.prototype.last){
 |  |      if (!Array.prototype.last){
 | 
											
										
											
												
													
														|  | @@ -36,14 +48,15 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
											
												
													
														|  |      // Module.addOnPostRun(() => {
 |  |      // Module.addOnPostRun(() => {
 | 
											
												
													
														|  |      //   test.onclick =runMie()});
 |  |      //   test.onclick =runMie()});
 | 
											
												
													
														|  |      function runMie() {
 |  |      function runMie() {
 | 
											
												
													
														|  | 
 |  | +        document.getElementById("Usage").style.display = 'none';
 | 
											
												
													
														|  |          const nmie = new Module.nmie()
 |  |          const nmie = new Module.nmie()
 | 
											
												
													
														|  | -        var t0 = performance.now();
 |  | 
 | 
											
												
													
														|  | -        var fromWL = parseFloat(document.getElementById("fromWL").value);
 |  | 
 | 
											
												
													
														|  | -        var toWL = parseFloat(document.getElementById("toWL").value);
 |  | 
 | 
											
												
													
														|  | -        var stepWL = parseFloat(document.getElementById("stepWL").value);
 |  | 
 | 
											
												
													
														|  | -        var R = parseFloat(document.getElementById("R").value);
 |  | 
 | 
											
												
													
														|  | -        var reN = parseFloat(document.getElementById("reN").value);
 |  | 
 | 
											
												
													
														|  | -        var imN = parseFloat(document.getElementById("imN").value);
 |  | 
 | 
											
												
													
														|  | 
 |  | +        let t0 = performance.now();
 | 
											
												
													
														|  | 
 |  | +        let fromWL = parseFloat(document.getElementById("fromWL").value);
 | 
											
												
													
														|  | 
 |  | +        let toWL = parseFloat(document.getElementById("toWL").value);
 | 
											
												
													
														|  | 
 |  | +        let stepWL = parseFloat(document.getElementById("stepWL").value);
 | 
											
												
													
														|  | 
 |  | +        let R = parseFloat(document.getElementById("R").value);
 | 
											
												
													
														|  | 
 |  | +        let reN = parseFloat(document.getElementById("reN").value);
 | 
											
												
													
														|  | 
 |  | +        let imN = parseFloat(document.getElementById("imN").value);
 | 
											
												
													
														|  |          Qsca = [], Qabs = [];
 |  |          Qsca = [], Qabs = [];
 | 
											
												
													
														|  |          Qsca_n = [[],[]], Qabs_n = [[],[]];
 |  |          Qsca_n = [[],[]], Qabs_n = [[],[]];
 | 
											
												
													
														|  |          nmie.ClearTarget();
 |  |          nmie.ClearTarget();
 | 
											
										
											
												
													
														|  | @@ -88,7 +101,7 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
											
												
													
														|  |            name: 'Qabs'
 |  |            name: 'Qabs'
 | 
											
												
													
														|  |          };
 |  |          };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        var data = [trace1, trace2];
 |  | 
 | 
											
												
													
														|  | 
 |  | +        let data = [trace1, trace2];
 | 
											
												
													
														|  |          layout = {
 |  |          layout = {
 | 
											
												
													
														|  |            title: {
 |  |            title: {
 | 
											
												
													
														|  |              text:'Mie calculation',
 |  |              text:'Mie calculation',
 | 
											
										
											
												
													
														|  | @@ -128,11 +141,10 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
											
												
													
														|  |            }
 |  |            }
 | 
											
												
													
														|  |          };
 |  |          };
 | 
											
												
													
														|  |          Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 |  |          Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 | 
											
												
													
														|  | -        var t1 = performance.now();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        let t1 = performance.now();
 | 
											
												
													
														|  |          document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " s.";
 |  |          document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " s.";
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        mode_names = ['E','H'];
 |  | 
 | 
											
												
													
														|  | -        var tmp1 = " ";
 |  | 
 | 
											
												
													
														|  | 
 |  | +        let tmp1 = " ";
 | 
											
												
													
														|  |          mode_types.forEach(function(mode_type) {
 |  |          mode_types.forEach(function(mode_type) {
 | 
											
												
													
														|  |            tmp1 += mode_names[mode_type]+" -> ";
 |  |            tmp1 += mode_names[mode_type]+" -> ";
 | 
											
												
													
														|  |            mode_n.forEach(function (n) {
 |  |            mode_n.forEach(function (n) {
 | 
											
										
											
												
													
														|  | @@ -143,34 +155,40 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
 | 
											
												
													
														|  |            tmp1 += "<br>";
 |  |            tmp1 += "<br>";
 | 
											
												
													
														|  |          });
 |  |          });
 | 
											
												
													
														|  |          tmp1 +="Qabs <input type=\"checkbox\" id=\"Qabs\" checked onclick=\"replot();\">  ";
 |  |          tmp1 +="Qabs <input type=\"checkbox\" id=\"Qabs\" checked onclick=\"replot();\">  ";
 | 
											
												
													
														|  | 
 |  | +        tmp1 +="Qsca <input type=\"checkbox\" id=\"Qsca\" checked onclick=\"replot();\">  ";
 | 
											
												
													
														|  |          document.getElementById("Selector").innerHTML = tmp1;
 |  |          document.getElementById("Selector").innerHTML = tmp1;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |        };
 |  |        };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      function replot() {
 |  |      function replot() {
 | 
											
												
													
														|  | -      var checkBoxQabs = document.getElementById("Qabs");
 |  | 
 | 
											
												
													
														|  | -      var data = [trace1];
 |  | 
 | 
											
												
													
														|  | 
 |  | +      let checkBoxQabs = document.getElementById("Qabs");
 | 
											
												
													
														|  | 
 |  | +      let checkBoxQsca = document.getElementById("Qsca");
 | 
											
												
													
														|  | 
 |  | +      let data = [];
 | 
											
												
													
														|  |        if (checkBoxQabs.checked == true) data.push(trace2);
 |  |        if (checkBoxQabs.checked == true) data.push(trace2);
 | 
											
												
													
														|  | 
 |  | +      if (checkBoxQsca.checked == true) data.push(trace1);
 | 
											
												
													
														|  |        mode_types.forEach(function(mode_type) {
 |  |        mode_types.forEach(function(mode_type) {
 | 
											
												
													
														|  |          mode_n.forEach(function (n) {
 |  |          mode_n.forEach(function (n) {
 | 
											
												
													
														|  | -          var checkBox = document.getElementById(mode_names[mode_type]+n.toString());
 |  | 
 | 
											
												
													
														|  | 
 |  | +          let checkBox = document.getElementById(mode_names[mode_type]+n.toString());
 | 
											
												
													
														|  |            if (checkBox.checked == false) return;
 |  |            if (checkBox.checked == false) return;
 | 
											
												
													
														|  | -          var trace_sca = {
 |  | 
 | 
											
												
													
														|  | -            x: WLs,
 |  | 
 | 
											
												
													
														|  | -            y: Qsca_n[mode_type][n-1],
 |  | 
 | 
											
												
													
														|  | -            type: 'scatter',
 |  | 
 | 
											
												
													
														|  | -            name: 'Qsca '+mode_names[mode_type]+n.toString()
 |  | 
 | 
											
												
													
														|  | 
 |  | +          if (checkBoxQsca.checked == true) {
 | 
											
												
													
														|  | 
 |  | +            let trace_sca = {
 | 
											
												
													
														|  | 
 |  | +              x: WLs,
 | 
											
												
													
														|  | 
 |  | +              y: Qsca_n[mode_type][n - 1],
 | 
											
												
													
														|  | 
 |  | +              type: 'scatter',
 | 
											
												
													
														|  | 
 |  | +              name: 'Qsca ' + mode_names[mode_type] + n.toString()
 | 
											
												
													
														|  | 
 |  | +            };
 | 
											
												
													
														|  | 
 |  | +            data.push(trace_sca);
 | 
											
												
													
														|  |            };
 |  |            };
 | 
											
												
													
														|  | -          data.push(trace_sca)
 |  | 
 | 
											
												
													
														|  | -          if (checkBoxQabs.checked == false) return;
 |  | 
 | 
											
												
													
														|  | -          var trace_abs = {
 |  | 
 | 
											
												
													
														|  | -            x: WLs,
 |  | 
 | 
											
												
													
														|  | -            y: Qabs_n[mode_type][n-1],
 |  | 
 | 
											
												
													
														|  | -            type: 'scatter',
 |  | 
 | 
											
												
													
														|  | -            name: 'Qabs '+mode_names[mode_type]+n.toString()
 |  | 
 | 
											
												
													
														|  | 
 |  | +          if (checkBoxQabs.checked == true) {
 | 
											
												
													
														|  | 
 |  | +            let trace_abs = {
 | 
											
												
													
														|  | 
 |  | +              x: WLs,
 | 
											
												
													
														|  | 
 |  | +              y: Qabs_n[mode_type][n - 1],
 | 
											
												
													
														|  | 
 |  | +              type: 'scatter',
 | 
											
												
													
														|  | 
 |  | +              name: 'Qabs ' + mode_names[mode_type] + n.toString()
 | 
											
												
													
														|  | 
 |  | +            };
 | 
											
												
													
														|  | 
 |  | +            data.push(trace_abs);
 | 
											
												
													
														|  |            };
 |  |            };
 | 
											
												
													
														|  | -          data.push(trace_abs)
 |  | 
 | 
											
												
													
														|  |          });
 |  |          });
 | 
											
												
													
														|  |        });
 |  |        });
 | 
											
												
													
														|  |        Plotly.react('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 |  |        Plotly.react('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 |