| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 
							- <!DOCTYPE html>
 
- <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">
 
-   <meta http-equiv="X-UA-Compatible" content="ie=edge">
 
-   <title>Scattnlay web</title>
 
-   <link rel="stylesheet" type="text/css" href="nmie.css">
 
- <!--  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>-->
 
-   <script src="plotly-latest.min.js"></script>
 
-   <!-- Yandex.Metrika counter -->
 
-   <script type="text/javascript" >
 
-     (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
 
-       m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
 
-     (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
 
-     ym(54984811, "init", {
 
-       clickmap:true,
 
-       trackLinks:true,
 
-       accurateTrackBounce:true
 
-     });
 
-   </script>
 
-   <noscript><div><img src="https://mc.yandex.ru/watch/54984811" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
 
-   <!-- /Yandex.Metrika counter -->
 
- </head>
 
- <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.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>
 
- <button id="Evaluate" onclick=runMie() autofocus>Run Mie!</button> <span id="time"></span>
 
- <div id="Selector"></div>
 
- <div id="PlotQsca" style="height:70%;">
 
- <!--     style="width:840px;height:580px;"-->
 
- </div>
 
-   <script src="nmie.js"></script>
 
-   <script>
 
-     'use strict';
 
-     // var importObject = {
 
-     //   imports: { nmie: arg => console.log(arg) }
 
-     // };
 
-     //
 
-     // fetch('nmie.wasm').then(response =>
 
-     //         response.arrayBuffer()
 
-     // ).then(bytes =>
 
-     //         WebAssembly.instantiate(bytes, importObject)
 
-     // ).then(results => {
 
-     //   results.instance.exports.nmie();
 
-     // });
 
-     const total_mode_n = 4;
 
-     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){
 
-       Array.prototype.last = function(){
 
-         return this[this.length - 1];
 
-       };
 
-     };
 
-     // Module.addOnPostRun(() => {
 
-     //   test.onclick =runMie()});
 
-     function runMie() {
 
-         document.getElementById("Usage").style.display = 'none';
 
-         const nmie = new Module.nmie()
 
-         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();
 
-         nmie.AddTargetLayerReIm(R, reN, imN)
 
-         WLs = range(fromWL,toWL,stepWL)
 
-         mode_n = range(1,total_mode_n+1)
 
-         mode_types = range(0,2)
 
-         mode_types.forEach(function(mode_type) {
 
-           mode_n.forEach(function (n) {
 
-             Qsca_n[mode_type].push([]);
 
-             Qabs_n[mode_type].push([]);
 
-           });
 
-         });
 
-         WLs.forEach(function(WL) {
 
-           // console.log(WL)
 
-           nmie.SetModeNmaxAndType(-1, -1);
 
-           nmie.SetWavelength(WL);
 
-           nmie.RunMieCalculation();
 
-           Qsca.push(nmie.GetQsca());
 
-           Qabs.push(nmie.GetQabs());
 
-           mode_types.forEach(function(mode_type) {
 
-             mode_n.forEach(function (n) {
 
-               nmie.SetModeNmaxAndType(n,mode_type);
 
-               nmie.RunMieCalculation();
 
-               Qsca_n[mode_type][n-1].push(nmie.GetQsca());
 
-               Qabs_n[mode_type][n-1].push(nmie.GetQabs());
 
-             });
 
-           });
 
-         });
 
-         // console.log('Qsca_n = ', Qsca_n);
 
-         trace1 = {
 
-           x: WLs,
 
-           y: Qsca,
 
-           type: 'scatter',
 
-           name: 'Qsca'
 
-         };
 
-         trace2 = {
 
-           x: WLs,
 
-           y: Qabs,
 
-           type: 'scatter',
 
-           name: 'Qabs'
 
-         };
 
-         let data = [trace1, trace2];
 
-         layout = {
 
-           title: {
 
-             text:'Mie calculation',
 
-             // font: {
 
-             //   family: 'Courier New, monospace',
 
-             //   size: 24
 
-             // },
 
-             xref: 'paper',
 
-             x: 0.05,
 
-           },
 
-           xaxis: {
 
-             title: {
 
-               text: 'Wavelength',
 
-               // font: {
 
-               //   family: 'Courier New, monospace',
 
-               //   size: 18,
 
-               //   color: '#7f7f7f'
 
-               // }
 
-             },
 
-           },
 
-           yaxis: {
 
-             title: {
 
-               text: 'Q',
 
-               // font: {
 
-               //   family: 'Courier New, monospace',
 
-               //   size: 18,
 
-               //   color: '#7f7f7f'
 
-               // }
 
-             }
 
-           },
 
-           margin: {
 
-             l: 35,
 
-             r: 25,
 
-             b: 35,
 
-             t: 25,
 
-             pad: 4
 
-           }
 
-         };
 
-         Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 
-         let t1 = performance.now();
 
-         document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " s.";
 
-         let tmp1 = " ";
 
-         mode_types.forEach(function(mode_type) {
 
-           tmp1 += mode_names[mode_type]+" -> ";
 
-           mode_n.forEach(function (n) {
 
-             tmp1 += n.toString()+
 
-                     "<input type=\"checkbox\" id=\""+mode_names[mode_type]+n.toString()
 
-                     +"\" unchecked onclick=\"replot();\">  ";
 
-           });
 
-           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() {
 
-       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) {
 
-           let checkBox = document.getElementById(mode_names[mode_type]+n.toString());
 
-           if (checkBox.checked == false) return;
 
-           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);
 
-           };
 
-           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);
 
-           };
 
-         });
 
-       });
 
-       Plotly.react('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
 
-     }
 
-   </script>
 
- </body>
 
- </html>
 
 
  |