123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <!DOCTYPE html>
- <html lang="en">
- <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>
- <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
- </head>
- <body>
- WL from <input type="number" id="fromWL" step="any" value="400.0">
- to <input type="number" id="toWL" step="any" value="1000">
- step <input type="number" id="stepWL" step="any" value="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" autofocus>Run Mie!</button> <span id="time"></span>
- <div id="PlotQsca" style="width:640px;height:580px;" ></div>
- <script src="/nmie.js"></script>
- <script>
- 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(() => {
- Evaluate.onclick = () => {
- 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);
- nmie.ClearTarget();
- nmie.AddTargetLayerReIm(R, reN, imN)
- var WLs = range(fromWL,toWL,stepWL)
- var Qsca = [], Qabs = [];
- var Qsca_n = [[],[]], Qabs_n = [[],[]];
- var mode_n = range(1,4)
- var mode_n1 = range(1,5)
- var mode_types = range(0,2)
- mode_types.forEach(function(mode_type) {
- mode_n1.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_n.forEach(function (n) {
- mode_types.forEach(function(mode_type) {
- console.log(mode_type,n-1,Qsca_n[mode_type,0,n-1])
- 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);
- var trace1 = {
- x: WLs,
- y: Qsca,
- type: 'scatter',
- name: 'Qsca'
- };
- var trace2 = {
- x: WLs,
- y: Qabs,
- type: 'scatter',
- name: 'Qabs'
- };
- var data = [trace1, trace2];
- var 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'
- // }
- }
- }
- };
- Plotly.newPlot('PlotQsca', data, layout, {showSendToCloud: true, displaylogo: false});
- var t1 = performance.now();
- document.getElementById("time").innerHTML = "It took " + ((t1 - t0)/1000).toFixed(2) + " s.";
- };
- })
- </script>
- </body>
- </html>
|