Difference between revisions of "Statistical Thermodynamics and Transport Phenomena"
Line 6: | Line 6: | ||
[https://mybinder.org/v2/gh/emartineznunez/QF_IV/master?urlpath=lab Jupyter Lab ] | [https://mybinder.org/v2/gh/emartineznunez/QF_IV/master?urlpath=lab Jupyter Lab ] | ||
+ | |||
+ | <div id="glowscript" class="glowscript"> | ||
+ | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||
+ | <link type="text/css" href="https://s3.amazonaws.com/glowscript/css/redmond/2.1/jquery-ui.custom.css" rel="stylesheet" /> | ||
+ | <link type="text/css" href="https://s3.amazonaws.com/glowscript/css/ide.css" rel="stylesheet" /> | ||
+ | <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/lib/jquery/2.1/jquery.min.js"></script> | ||
+ | <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/lib/jquery/2.1/jquery-ui.custom.min.js"></script> | ||
+ | <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/package/glow.3.0.min.js"></script> | ||
+ | <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/package/RSrun.3.0.min.js"></script> | ||
+ | <script type="text/javascript"><!--//--><![CDATA[//><!-- | ||
+ | |||
+ | // START JAVASCRIPT | ||
+ | ;(function() {; | ||
+ | var RS_modules = {}; | ||
+ | RS_modules.pythonize = {}; | ||
+ | |||
+ | (function(){ | ||
+ | function strings() { | ||
+ | var string_funcs, exclude, name; | ||
+ | string_funcs = set("capitalize strip lstrip rstrip islower isupper isspace lower upper swapcase center count endswith startswith find rfind index rindex format join ljust rjust partition rpartition replace split rsplit splitlines zfill".split(" ")); | ||
+ | if (!arguments.length) { | ||
+ | exclude = (function(){ | ||
+ | var s = RS_set(); | ||
+ | s.jsset.add("split"); | ||
+ | s.jsset.add("replace"); | ||
+ | return s; | ||
+ | })(); | ||
+ | } else if (arguments[0]) { | ||
+ | exclude = Array.prototype.slice.call(arguments); | ||
+ | } else { | ||
+ | exclude = null; | ||
+ | } | ||
+ | if (exclude) { | ||
+ | string_funcs = string_funcs.difference(set(exclude)); | ||
+ | } | ||
+ | var RS_Iter0 = string_funcs; | ||
+ | RS_Iter0 = ((typeof RS_Iter0[Symbol.iterator] === "function") ? (RS_Iter0 instanceof Map ? RS_Iter0.keys() : RS_Iter0) : Object.keys(RS_Iter0)); | ||
+ | for (var RS_Index0 of RS_Iter0) { | ||
+ | name = RS_Index0; | ||
+ | (RS_expr_temp = String.prototype)[(typeof name === "number" && name < 0) ? RS_expr_temp.length + name : name] = (RS_expr_temp = RS_str.prototype)[(typeof name === "number" && name < 0) ? RS_expr_temp.length + name : name]; | ||
+ | } | ||
+ | }; | ||
+ | if (!strings.__module__) Object.defineProperties(strings, { | ||
+ | __module__ : {value: "pythonize"} | ||
+ | }); | ||
+ | |||
+ | RS_modules.pythonize.strings = strings; | ||
+ | })(); | ||
+ | async function __main__() { | ||
+ | "use strict"; | ||
+ | |||
+ | var version, display, vector, print, arange, __name__, type, scene, RS_ls, win, Natoms, NA, L, V, gray, mass, Ratom, k, T, dt, animation, s, d, r, boxbottom, boxtop, vert1, vert2, vert3, vert4, Atoms, p, apos, mfp, pavg, x, y, z, theta, phi, px, py, pz, i, deltav, nhisto, histo, xmax, ymax, gg, theory, dv, v, accum, vdist, nc, gmfp, cnts, ti, tiref, gti, t, ncoll, aposold, dist, v_square, vi, P, hitlist, j, ptot, posi, posj, vj, vrel, a, rrel, dx, dy, value, alpha, deltat, mtot, pcmi, pcmj, ij, sigma, gmfp0, MFP, Zco, z0, loc, nsteps; | ||
+ | version = RS_list_decorate([ "3.0", "glowscript" ]); | ||
+ | Array.prototype['+'] = function(r) {return this.concat(r)} | ||
+ | Array.prototype['*'] = function(r) {return __array_times_number(this, r)} | ||
+ | window.__GSlang = "vpython"; | ||
+ | display = canvas; | ||
+ | vector = vec; | ||
+ | print = GSprint; | ||
+ | arange = range; | ||
+ | __name__ = "__main__"; | ||
+ | type = pytype; | ||
+ | scene = canvas(); | ||
+ | var strings = RS_modules.pythonize.strings; | ||
+ | |||
+ | strings(); | ||
+ | "5"; | ||
+ | win = 500; | ||
+ | "7"; | ||
+ | Natoms = 200; | ||
+ | "8"; | ||
+ | NA = 6.022e23; | ||
+ | "10"; | ||
+ | L = 1; | ||
+ | "11"; | ||
+ | V = GS_power(L, 3); | ||
+ | "12"; | ||
+ | gray = (await color.gray(.7)); | ||
+ | "13"; | ||
+ | mass = .004["/"](NA); | ||
+ | "14"; | ||
+ | Ratom = .03; | ||
+ | "15"; | ||
+ | k = 1.38064852e-23; | ||
+ | "16"; | ||
+ | T = 298; | ||
+ | "17"; | ||
+ | dt = 1e-5; | ||
+ | "19"; | ||
+ | animation = RS_interpolate_kwargs.call(this, canvas, [RS_desugar_kwargs({width: win, height: win, align: "left"})]); | ||
+ | "20"; | ||
+ | animation.range = L; | ||
+ | "21"; | ||
+ | animation.title = "Simulation with "["+"](str(Natoms))["+"](" \"hard-sphere\" gas particles at T = ")["+"](str(T))["+"](" K"); | ||
+ | "32"; | ||
+ | s = "<b>Theoretical and simulated speed distributions.<\/b>\n Initially all atoms have the same speed, \n but collisions change the speeds of the \n colliding atoms. \n \n One of the atoms is marked and leaves a \n trail so you can follow its path.\n \n While speeds are realistic, the collision\n frequency and mean free path are not\n"; | ||
+ | "33"; | ||
+ | animation.caption = s; | ||
+ | "35"; | ||
+ | d = L["/"](2)["+"](Ratom); | ||
+ | "36"; | ||
+ | r = .005; | ||
+ | "37"; | ||
+ | boxbottom = RS_interpolate_kwargs.call(this, curve, [RS_desugar_kwargs({color: gray, radius: r})]); | ||
+ | "38"; | ||
+ | boxbottom.append(RS_list_decorate([ vector(d["-u"](), d["-u"](), d["-u"]()), vector(d["-u"](), d["-u"](), d), vector(d, d["-u"](), d), vector(d, d["-u"](), d["-u"]()), vector(d["-u"](), d["-u"](), d["-u"]()) ])); | ||
+ | "39"; | ||
+ | boxtop = RS_interpolate_kwargs.call(this, curve, [RS_desugar_kwargs({color: gray, radius: r})]); | ||
+ | "40"; | ||
+ | boxtop.append(RS_list_decorate([ vector(d["-u"](), d, d["-u"]()), vector(d["-u"](), d, d), vector(d, d, d), vector(d, d, d["-u"]()), vector(d["-u"](), d, d["-u"]()) ])); | ||
+ | "41"; | ||
+ | vert1 = RS_interpolate_kwargs.call(this, curve, [RS_desugar_kwargs({color: gray, radius: r})]); | ||
+ | "42"; | ||
+ | vert2 = RS_interpolate_kwargs.call(this, curve, [RS_desugar_kwargs({color: gray, radius: r})]); | ||
+ | "43"; | ||
+ | vert3 = RS_interpolate_kwargs.call(this, curve, [RS_desugar_kwargs({color: gray, radius: r})]); | ||
+ | "44"; | ||
+ | vert4 = RS_interpolate_kwargs.call(this, curve, [RS_desugar_kwargs({color: gray, radius: r})]); | ||
+ | "45"; | ||
+ | vert1.append(RS_list_decorate([ vector(d["-u"](), d["-u"](), d["-u"]()), vector(d["-u"](), d, d["-u"]()) ])); | ||
+ | "46"; | ||
+ | vert2.append(RS_list_decorate([ vector(d["-u"](), d["-u"](), d), vector(d["-u"](), d, d) ])); | ||
+ | "47"; | ||
+ | vert3.append(RS_list_decorate([ vector(d, d["-u"](), d), vector(d, d, d) ])); | ||
+ | "48"; | ||
+ | vert4.append(RS_list_decorate([ vector(d, d["-u"](), d["-u"]()), vector(d, d, d["-u"]()) ])); | ||
+ | "50"; | ||
+ | Atoms = RS_list_decorate([]); | ||
+ | "51"; | ||
+ | p = RS_list_decorate([]); | ||
+ | "52"; | ||
+ | apos = RS_list_decorate([]); | ||
+ | "53"; | ||
+ | mfp = RS_list_decorate([ 0 ])["*"](Natoms); | ||
+ | "54"; | ||
+ | pavg = sqrt(2["*"](mass)["*"](1.5)["*"](k)["*"](T)); | ||
+ | "56"; | ||
+ | for (var RS_Index1 = 0; RS_Index1["<"](Natoms); RS_Index1++) { | ||
+ | i = RS_Index1; | ||
+ | "57"; | ||
+ | x = L["*"](random())["-"](L["/"](2)); | ||
+ | "58"; | ||
+ | y = L["*"](random())["-"](L["/"](2)); | ||
+ | "59"; | ||
+ | z = L["*"](random())["-"](L["/"](2)); | ||
+ | "60"; | ||
+ | if ((i === 0 || typeof i === "object" && RS_equals(i, 0))) { | ||
+ | "61"; | ||
+ | Atoms.append(RS_interpolate_kwargs.call(this, sphere, [RS_desugar_kwargs({pos: vector(x, y, z), radius: Ratom, color: color.cyan, make_trail: true, retain: 100, trail_radius: .3["*"](Ratom)})])); | ||
+ | "62"; | ||
+ | } else { | ||
+ | Atoms.append(RS_interpolate_kwargs.call(this, sphere, [RS_desugar_kwargs({pos: vector(x, y, z), radius: Ratom, color: gray})])); | ||
+ | } | ||
+ | "63"; | ||
+ | apos.append(vec(x, y, z)); | ||
+ | "64"; | ||
+ | theta = pi["*"](random()); | ||
+ | "65"; | ||
+ | phi = 2["*"](pi)["*"](random()); | ||
+ | "66"; | ||
+ | px = pavg["*"](sin(theta))["*"](cos(phi)); | ||
+ | "67"; | ||
+ | py = pavg["*"](sin(theta))["*"](sin(phi)); | ||
+ | "68"; | ||
+ | pz = pavg["*"](cos(theta)); | ||
+ | "69"; | ||
+ | p.append(vector(px, py, pz)); | ||
+ | } | ||
+ | "71"; | ||
+ | deltav = 100; | ||
+ | "73"; | ||
+ | async function barx(v) { | ||
+ | "74"; | ||
+ | return int(v["/"](deltav)); | ||
+ | }; | ||
+ | if (!barx.__argnames__) Object.defineProperties(barx, { | ||
+ | __argnames__ : {value: ["v"]}, | ||
+ | __module__ : {value: null} | ||
+ | }); | ||
+ | |||
+ | "77"; | ||
+ | nhisto = int(5e3["/"](deltav)); | ||
+ | "79"; | ||
+ | histo = RS_list_decorate([]); | ||
+ | "80"; | ||
+ | for (var RS_Index2 = 0; RS_Index2["<"](nhisto); RS_Index2++) { | ||
+ | i = RS_Index2; | ||
+ | histo.append(0); | ||
+ | } | ||
+ | "81"; | ||
+ | histo[RS_bound_index((await barx(pavg["/"](mass))), histo)] = Natoms; | ||
+ | "83"; | ||
+ | xmax = sqrt(2["*"](k)["*"](T)["/"](mass))["+"](2.5["*"](sqrt(k["*"](T)["/"](mass)))); | ||
+ | "84"; | ||
+ | ymax = Natoms["*"](4)["*"](GS_power((mass["/"](2["*"](pi)["*"](k)["*"](T))), .5))["/"](2.3)["*"](deltav)["*"](1.2); | ||
+ | "85"; | ||
+ | gg = RS_interpolate_kwargs.call(this, graph, [RS_desugar_kwargs({width: win, height: .4["*"](win), xmax: xmax, align: "left", xtitle: "speed, m/s", ytitle: "Number of atoms", ymax: ymax})]); | ||
+ | "88"; | ||
+ | theory = RS_interpolate_kwargs.call(this, gcurve, [RS_desugar_kwargs({color: color.blue})]); | ||
+ | "89"; | ||
+ | dv = 10; | ||
+ | "90"; | ||
+ | var RS_Iter3 = range(0, 5001["+"](dv), dv); | ||
+ | RS_Iter3 = ((typeof RS_Iter3[Symbol.iterator] === "function") ? (RS_Iter3 instanceof Map ? RS_Iter3.keys() : RS_Iter3) : Object.keys(RS_Iter3)); | ||
+ | for (var RS_Index3 of RS_Iter3) { | ||
+ | v = RS_Index3; | ||
+ | "91"; | ||
+ | (await theory.plot(v, deltav["/"](dv)["*"](Natoms)["*"](4)["*"](pi)["*"](GS_power((mass["/"](2["*"](pi)["*"](k)["*"](T))), 1.5))["*"](exp(.5["-u"]()["*"](mass)["*"](GS_power(v, 2))["/"](k["*"](T))))["*"](GS_power(v, 2))["*"](dv))); | ||
+ | } | ||
+ | "93"; | ||
+ | accum = RS_list_decorate([]); | ||
+ | "95"; | ||
+ | var RS_Iter4 = range(int(5e3["/"](deltav))); | ||
+ | RS_Iter4 = ((typeof RS_Iter4[Symbol.iterator] === "function") ? (RS_Iter4 instanceof Map ? RS_Iter4.keys() : RS_Iter4) : Object.keys(RS_Iter4)); | ||
+ | for (var RS_Index4 of RS_Iter4) { | ||
+ | i = RS_Index4; | ||
+ | accum.append(RS_list_decorate([ deltav["*"](i["+"](.5)), 0 ])); | ||
+ | } | ||
+ | "96"; | ||
+ | vdist = RS_interpolate_kwargs.call(this, gvbars, [RS_desugar_kwargs({color: color.red, delta: deltav})]); | ||
+ | "98"; | ||
+ | async function interchange(v1, v2) { | ||
+ | var RS_ls, barx1, barx2; | ||
+ | "99"; | ||
+ | barx1 = (await barx(v1)); | ||
+ | "100"; | ||
+ | barx2 = (await barx(v2)); | ||
+ | "101"; | ||
+ | if ((barx1 === barx2 || typeof barx1 === "object" && RS_equals(barx1, barx2))) { | ||
+ | return; | ||
+ | } | ||
+ | "102"; | ||
+ | if (barx1[">="](len(histo)) || barx2[">="](len(histo))) { | ||
+ | return; | ||
+ | } | ||
+ | "103"; | ||
+ | histo[(typeof barx1 === "number" && barx1["<"](0)) ? histo.length["+"](barx1) : barx1]=histo[(typeof barx1 === "number" && barx1["<"](0)) ? histo.length["+"](barx1) : barx1]["-"](1); | ||
+ | "104"; | ||
+ | histo[(typeof barx2 === "number" && barx2["<"](0)) ? histo.length["+"](barx2) : barx2]=histo[(typeof barx2 === "number" && barx2["<"](0)) ? histo.length["+"](barx2) : barx2]["+"](1); | ||
+ | }; | ||
+ | if (!interchange.__argnames__) Object.defineProperties(interchange, { | ||
+ | __argnames__ : {value: ["v1", "v2"]}, | ||
+ | __module__ : {value: null} | ||
+ | }); | ||
+ | |||
+ | "106"; | ||
+ | async function checkCollisions() { | ||
+ | var RS_ls, hitlist, r2, ai, aj, dr, j, i; | ||
+ | "107"; | ||
+ | hitlist = RS_list_decorate([]); | ||
+ | "108"; | ||
+ | r2 = 2["*"](Ratom); | ||
+ | "109"; | ||
+ | r2=r2["*"](r2); | ||
+ | "111"; | ||
+ | for (var RS_Index5 = 0; RS_Index5["<"](Natoms); RS_Index5++) { | ||
+ | i = RS_Index5; | ||
+ | "112"; | ||
+ | ai = apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i]; | ||
+ | "113"; | ||
+ | for (var RS_Index6 = 0; RS_Index6["<"](i); RS_Index6++) { | ||
+ | j = RS_Index6; | ||
+ | "114"; | ||
+ | aj = apos[(typeof j === "number" && j["<"](0)) ? apos.length["+"](j) : j]; | ||
+ | "115"; | ||
+ | dr = ai["-"](aj); | ||
+ | "117"; | ||
+ | if (mag2(dr)["<"](r2)) { | ||
+ | hitlist.append(RS_list_decorate([ i, j ])); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | "119"; | ||
+ | return hitlist; | ||
+ | }; | ||
+ | if (!checkCollisions.__module__) Object.defineProperties(checkCollisions, { | ||
+ | __module__ : {value: null} | ||
+ | }); | ||
+ | |||
+ | "121"; | ||
+ | nhisto = 0; | ||
+ | "122"; | ||
+ | z = 0; | ||
+ | "123"; | ||
+ | nc = 0; | ||
+ | "124"; | ||
+ | gmfp = RS_list_decorate([ 0 ])["*"](Natoms); | ||
+ | "125"; | ||
+ | cnts = RS_list_decorate([ 0 ])["*"](Natoms); | ||
+ | "126"; | ||
+ | ti = RS_list_decorate([ 0 ])["*"](Natoms); | ||
+ | "127"; | ||
+ | tiref = RS_list_decorate([ 0 ])["*"](Natoms); | ||
+ | "128"; | ||
+ | gti = RS_list_decorate([ 0 ])["*"](Natoms); | ||
+ | "129"; | ||
+ | t = 0; | ||
+ | "130"; | ||
+ | ncoll = 0; | ||
+ | "132"; | ||
+ | for (var RS_Index7 = 0; RS_Index7["<"](5e4); RS_Index7++) { | ||
+ | nsteps = RS_Index7; | ||
+ | "133"; | ||
+ | (await rate(T)); | ||
+ | "135"; | ||
+ | var RS_Iter8 = range(len(accum)); | ||
+ | RS_Iter8 = ((typeof RS_Iter8[Symbol.iterator] === "function") ? (RS_Iter8 instanceof Map ? RS_Iter8.keys() : RS_Iter8) : Object.keys(RS_Iter8)); | ||
+ | for (var RS_Index8 of RS_Iter8) { | ||
+ | i = RS_Index8; | ||
+ | accum[(typeof i === "number" && i["<"](0)) ? accum.length["+"](i) : i][1] = nhisto["*"](accum[(typeof i === "number" && i["<"](0)) ? accum.length["+"](i) : i][1])["+"](histo[(typeof i === "number" && i["<"](0)) ? histo.length["+"](i) : i])["/"](nhisto["+"](1)); | ||
+ | } | ||
+ | "136"; | ||
+ | if (RS_equals(nhisto["%"](10), 0)) { | ||
+ | "137"; | ||
+ | vdist.data = accum; | ||
+ | } | ||
+ | "138"; | ||
+ | nhisto=nhisto["+"](1); | ||
+ | "141"; | ||
+ | t = t["+"](dt); | ||
+ | "142"; | ||
+ | for (var RS_Index9 = 0; RS_Index9["<"](Natoms); RS_Index9++) { | ||
+ | i = RS_Index9; | ||
+ | "143"; | ||
+ | aposold = apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i]; | ||
+ | "144"; | ||
+ | Atoms[(typeof i === "number" && i["<"](0)) ? Atoms.length["+"](i) : i].pos = apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i] = apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i]["+"](p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i]["/"](mass)["*"](dt)); | ||
+ | "145"; | ||
+ | ti[(typeof i === "number" && i["<"](0)) ? ti.length["+"](i) : i] = t["-"](tiref[(typeof i === "number" && i["<"](0)) ? tiref.length["+"](i) : i]); | ||
+ | "147"; | ||
+ | dist = GS_power((GS_power((apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i].x["-"](aposold.x)), 2)["+"](GS_power((apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i].y["-"](aposold.y)), 2))["+"](GS_power((apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i].z["-"](aposold.z)), 2))), .5); | ||
+ | "148"; | ||
+ | mfp[(typeof i === "number" && i["<"](0)) ? mfp.length["+"](i) : i] = mfp[(typeof i === "number" && i["<"](0)) ? mfp.length["+"](i) : i]["+"](dist); | ||
+ | } | ||
+ | "150"; | ||
+ | v_square = 0; | ||
+ | "151"; | ||
+ | for (var RS_Index10 = 0; RS_Index10["<"](Natoms); RS_Index10++) { | ||
+ | i = RS_Index10; | ||
+ | "152"; | ||
+ | vi = p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i]["/"](mass); | ||
+ | "153"; | ||
+ | v_square = v_square["+"](vi.x["*"](vi.x))["+"](vi.y["*"](vi.y))["+"](vi.z["*"](vi.z)); | ||
+ | } | ||
+ | "155"; | ||
+ | P = mass["*"](v_square)["/"](3)["/"](V); | ||
+ | "159"; | ||
+ | hitlist = (await checkCollisions()); | ||
+ | "164"; | ||
+ | var RS_Iter11 = hitlist; | ||
+ | RS_Iter11 = ((typeof RS_Iter11[Symbol.iterator] === "function") ? (RS_Iter11 instanceof Map ? RS_Iter11.keys() : RS_Iter11) : Object.keys(RS_Iter11)); | ||
+ | for (var RS_Index11 of RS_Iter11) { | ||
+ | ij = RS_Index11; | ||
+ | "165"; | ||
+ | i = ij[0]; | ||
+ | "166"; | ||
+ | j = ij[1]; | ||
+ | "167"; | ||
+ | gmfp[(typeof i === "number" && i["<"](0)) ? gmfp.length["+"](i) : i]=gmfp[(typeof i === "number" && i["<"](0)) ? gmfp.length["+"](i) : i]["+"](mfp[(typeof i === "number" && i["<"](0)) ? mfp.length["+"](i) : i]); | ||
+ | "168"; | ||
+ | gmfp[(typeof j === "number" && j["<"](0)) ? gmfp.length["+"](j) : j]=gmfp[(typeof j === "number" && j["<"](0)) ? gmfp.length["+"](j) : j]["+"](mfp[(typeof j === "number" && j["<"](0)) ? mfp.length["+"](j) : j]); | ||
+ | "169"; | ||
+ | gti[(typeof i === "number" && i["<"](0)) ? gti.length["+"](i) : i]=gti[(typeof i === "number" && i["<"](0)) ? gti.length["+"](i) : i]["+"](ti[(typeof i === "number" && i["<"](0)) ? ti.length["+"](i) : i]); | ||
+ | "170"; | ||
+ | gti[(typeof j === "number" && j["<"](0)) ? gti.length["+"](j) : j]=gti[(typeof j === "number" && j["<"](0)) ? gti.length["+"](j) : j]["+"](ti[(typeof j === "number" && j["<"](0)) ? ti.length["+"](j) : j]); | ||
+ | "171"; | ||
+ | cnts[(typeof i === "number" && i["<"](0)) ? cnts.length["+"](i) : i]=cnts[(typeof i === "number" && i["<"](0)) ? cnts.length["+"](i) : i]["+"](1); | ||
+ | "172"; | ||
+ | cnts[(typeof j === "number" && j["<"](0)) ? cnts.length["+"](j) : j]=cnts[(typeof j === "number" && j["<"](0)) ? cnts.length["+"](j) : j]["+"](1); | ||
+ | "173"; | ||
+ | mfp[(typeof i === "number" && i["<"](0)) ? mfp.length["+"](i) : i] = 0; | ||
+ | "174"; | ||
+ | mfp[(typeof j === "number" && j["<"](0)) ? mfp.length["+"](j) : j] = 0; | ||
+ | "175"; | ||
+ | tiref[(typeof i === "number" && i["<"](0)) ? tiref.length["+"](i) : i] = t; | ||
+ | "176"; | ||
+ | tiref[(typeof j === "number" && j["<"](0)) ? tiref.length["+"](j) : j] = t; | ||
+ | "177"; | ||
+ | ptot = p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i]["+"](p[(typeof j === "number" && j["<"](0)) ? p.length["+"](j) : j]); | ||
+ | "178"; | ||
+ | posi = apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i]; | ||
+ | "179"; | ||
+ | posj = apos[(typeof j === "number" && j["<"](0)) ? apos.length["+"](j) : j]; | ||
+ | "180"; | ||
+ | vi = p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i]["/"](mass); | ||
+ | "181"; | ||
+ | vj = p[(typeof j === "number" && j["<"](0)) ? p.length["+"](j) : j]["/"](mass); | ||
+ | "182"; | ||
+ | vrel = vj["-"](vi); | ||
+ | "183"; | ||
+ | a = vrel.mag2; | ||
+ | "184"; | ||
+ | if ((a === 0 || typeof a === "object" && RS_equals(a, 0))) { | ||
+ | continue; | ||
+ | } | ||
+ | "185"; | ||
+ | rrel = posi["-"](posj); | ||
+ | "186"; | ||
+ | if (rrel.mag["<"](Ratom)) { | ||
+ | "188"; | ||
+ | continue; | ||
+ | } | ||
+ | "191"; | ||
+ | dx = dot(rrel, vrel.hat); | ||
+ | "192"; | ||
+ | dy = cross(rrel, vrel.hat).mag; | ||
+ | "195"; | ||
+ | value = dy["/"](2["*"](Ratom)); | ||
+ | "196"; | ||
+ | if (value[">"](1)) { | ||
+ | value = 1; | ||
+ | } | ||
+ | "197"; | ||
+ | if (value["<"](1["-u"]())) { | ||
+ | value = 1["-u"](); | ||
+ | } | ||
+ | "198"; | ||
+ | alpha = asin(value); | ||
+ | "199"; | ||
+ | d = 2["*"](Ratom)["*"](cos(alpha))["-"](dx); | ||
+ | "200"; | ||
+ | deltat = d["/"](vrel.mag); | ||
+ | "204"; | ||
+ | posi = posi["-"](vi["*"](deltat)); | ||
+ | "205"; | ||
+ | posj = posj["-"](vj["*"](deltat)); | ||
+ | "207"; | ||
+ | mtot = 2["*"](mass); | ||
+ | "208"; | ||
+ | pcmi = p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i]["-"](ptot["*"](mass)["/"](mtot)); | ||
+ | "209"; | ||
+ | pcmj = p[(typeof j === "number" && j["<"](0)) ? p.length["+"](j) : j]["-"](ptot["*"](mass)["/"](mtot)); | ||
+ | "210"; | ||
+ | rrel = norm(rrel); | ||
+ | "211"; | ||
+ | pcmi = pcmi["-"](2["*"]((await pcmi.dot(rrel)))["*"](rrel)); | ||
+ | "212"; | ||
+ | pcmj = pcmj["-"](2["*"]((await pcmj.dot(rrel)))["*"](rrel)); | ||
+ | "213"; | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i] = pcmi["+"](ptot["*"](mass)["/"](mtot)); | ||
+ | "214"; | ||
+ | p[(typeof j === "number" && j["<"](0)) ? p.length["+"](j) : j] = pcmj["+"](ptot["*"](mass)["/"](mtot)); | ||
+ | "215"; | ||
+ | apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i] = posi["+"](p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i]["/"](mass)["*"](deltat)); | ||
+ | "216"; | ||
+ | apos[(typeof j === "number" && j["<"](0)) ? apos.length["+"](j) : j] = posj["+"](p[(typeof j === "number" && j["<"](0)) ? p.length["+"](j) : j]["/"](mass)["*"](deltat)); | ||
+ | "217"; | ||
+ | (await interchange(vi.mag, p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].mag["/"](mass))); | ||
+ | "218"; | ||
+ | (await interchange(vj.mag, p[(typeof j === "number" && j["<"](0)) ? p.length["+"](j) : j].mag["/"](mass))); | ||
+ | } | ||
+ | "219"; | ||
+ | ncoll=ncoll["+"](len(hitlist)); | ||
+ | "220"; | ||
+ | sigma = pi["*"](GS_power((2["*"](Ratom)), 2)); | ||
+ | "221"; | ||
+ | gmfp0 = k["*"](T)["/"](P)["/"](sigma["*"](GS_power(2, .5))); | ||
+ | "222"; | ||
+ | MFP = 0; | ||
+ | "223"; | ||
+ | Zco = 0; | ||
+ | "224"; | ||
+ | for (var RS_Index12 = 0; RS_Index12["<"](Natoms); RS_Index12++) { | ||
+ | i = RS_Index12; | ||
+ | "225"; | ||
+ | if (cnts[(typeof i === "number" && i["<"](0)) ? cnts.length["+"](i) : i][">"](0)) { | ||
+ | "226"; | ||
+ | MFP=MFP["+"](gmfp[(typeof i === "number" && i["<"](0)) ? gmfp.length["+"](i) : i]["/"](cnts[(typeof i === "number" && i["<"](0)) ? cnts.length["+"](i) : i])); | ||
+ | "227"; | ||
+ | Zco=Zco["+"](cnts[(typeof i === "number" && i["<"](0)) ? cnts.length["+"](i) : i]["/"](gti[(typeof i === "number" && i["<"](0)) ? gti.length["+"](i) : i])); | ||
+ | } | ||
+ | } | ||
+ | "229"; | ||
+ | z0 = Natoms["/"](V)["*"](sigma)["*"](sqrt(2))["*"](sqrt(8["*"](k)["*"](T)["/"](pi)["/"](mass))); | ||
+ | "230"; | ||
+ | if ((nsteps === 0 || typeof nsteps === "object" && RS_equals(nsteps, 0))) { | ||
+ | print(" Time Coll. freq. Mean free path"); | ||
+ | } | ||
+ | "231"; | ||
+ | if (RS_equals(nsteps["%"](500), 0)) { | ||
+ | print(t, ncoll["/"](t)["/"](Natoms)["*"](2), z0, MFP["/"](Natoms), gmfp0); | ||
+ | } | ||
+ | "233"; | ||
+ | for (var RS_Index13 = 0; RS_Index13["<"](Natoms); RS_Index13++) { | ||
+ | i = RS_Index13; | ||
+ | "234"; | ||
+ | loc = apos[(typeof i === "number" && i["<"](0)) ? apos.length["+"](i) : i]; | ||
+ | "235"; | ||
+ | if (abs(loc.x)[">"](L["/"](2))) { | ||
+ | "236"; | ||
+ | if (loc.x["<"](0)) { | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].x = abs(p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].x); | ||
+ | } else { | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].x = abs(p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].x)["-u"](); | ||
+ | } | ||
+ | "239"; | ||
+ | } | ||
+ | if (abs(loc.y)[">"](L["/"](2))) { | ||
+ | "240"; | ||
+ | if (loc.y["<"](0)) { | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].y = abs(p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].y); | ||
+ | } else { | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].y = abs(p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].y)["-u"](); | ||
+ | } | ||
+ | "243"; | ||
+ | } | ||
+ | if (abs(loc.z)[">"](L["/"](2))) { | ||
+ | "244"; | ||
+ | if (loc.z["<"](0)) { | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].z = abs(p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].z); | ||
+ | } else { | ||
+ | p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].z = abs(p[(typeof i === "number" && i["<"](0)) ? p.length["+"](i) : i].z)["-u"](); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }; | ||
+ | if (!__main__.__module__) Object.defineProperties(__main__, { | ||
+ | __module__ : {value: null} | ||
+ | }); | ||
+ | |||
+ | ;$(function(){ window.__context = { glowscript_container: $("#glowscript").removeAttr("id") }; __main__() })})() | ||
+ | // END JAVASCRIPT | ||
+ | |||
+ | //--><!]]></script> | ||
+ | </div> |
Revision as of 15:21, 3 August 2020
Here you will find useful jupyter notebooks on this subject.
You can run the notebooks at the following URLs (choose: Notebook or Lab):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link type="text/css" href="https://s3.amazonaws.com/glowscript/css/redmond/2.1/jquery-ui.custom.css" rel="stylesheet" /> <link type="text/css" href="https://s3.amazonaws.com/glowscript/css/ide.css" rel="stylesheet" /> <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/lib/jquery/2.1/jquery.min.js"></script> <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/lib/jquery/2.1/jquery-ui.custom.min.js"></script> <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/package/glow.3.0.min.js"></script> <script type="text/javascript" src="https://s3.amazonaws.com/glowscript/package/RSrun.3.0.min.js"></script> <script type="text/javascript"><![CDATA><! ]></script>