|
@@ -1,5 +1,5 @@
|
|
|
<!DOCTYPE html>
|
|
|
-<html lang="en">
|
|
|
+<html lang="en" xmlns="http://www.w3.org/1999/html">
|
|
|
<head>
|
|
|
<meta charset="UTF-8">
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -8,10 +8,20 @@
|
|
|
<link rel="stylesheet" type="text/css" href="nmie.css">
|
|
|
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
|
|
|
</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">
|
|
|
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">
|
|
|
Re(n): <input type="number" id="reN" step="any" value="4">
|
|
|
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>
|
|
|
<script src="nmie.js"></script>
|
|
|
<script>
|
|
|
+ 'use strict';
|
|
|
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) =>
|
|
|
Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step);
|
|
|
if (!Array.prototype.last){
|
|
@@ -36,14 +48,15 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
|
|
|
// Module.addOnPostRun(() => {
|
|
|
// test.onclick =runMie()});
|
|
|
function runMie() {
|
|
|
+ document.getElementById("Usage").style.display = 'none';
|
|
|
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_n = [[],[]], Qabs_n = [[],[]];
|
|
|
nmie.ClearTarget();
|
|
@@ -88,7 +101,7 @@ Im(n): <input type="number" id="imN" step="any" value="0.01"><br>
|
|
|
name: 'Qabs'
|
|
|
};
|
|
|
|
|
|
- var data = [trace1, trace2];
|
|
|
+ let data = [trace1, trace2];
|
|
|
layout = {
|
|
|
title: {
|
|
|
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});
|
|
|
- var t1 = performance.now();
|
|
|
+ let t1 = performance.now();
|
|
|
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) {
|
|
|
tmp1 += mode_names[mode_type]+" -> ";
|
|
|
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 +="Qabs <input type=\"checkbox\" id=\"Qabs\" checked onclick=\"replot();\"> ";
|
|
|
+ tmp1 +="Qsca <input type=\"checkbox\" id=\"Qsca\" checked onclick=\"replot();\"> ";
|
|
|
document.getElementById("Selector").innerHTML = tmp1;
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
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 (checkBoxQsca.checked == true) data.push(trace1);
|
|
|
mode_types.forEach(function(mode_type) {
|
|
|
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;
|
|
|
- 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});
|