{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/floom/integrator.js"],"names":["Integrator","grid","prototype","updateStateAndGradientOf","particle","p","cellX","Math","floor","position","x","boundaries","Min","cellY","y","px","gx","py","gy","s","sx","sy","prepareParticle","node","getOrCreateAt","integrate","fn","i","call","undefined"],"mappings":"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","file":"integrator.js","sourcesContent":["\tvar Integrator = function(grid) {\n\t\tthis.grid = grid;\n\t};\n\n\tIntegrator.prototype.updateStateAndGradientOf = function(particle) {\n\t\tvar p = particle;\n\t\t// determine cell index for mesh\n\t\tp.cellX = Math.floor(p.position.x - this.grid.boundaries.Min.x - 0.5); // get cell x\n\t\tp.cellY = Math.floor(p.position.y - this.grid.boundaries.Min.y - 0.5); // get cell y\n\n\t\tvar x = p.cellX - (p.position.x - this.grid.boundaries.Min.x);\n\t\tp.px[0] = (0.5 * x * x + 1.5 * x + 1.125);\n\t\tp.gx[0] = (x++ + 1.5);\n\t\tp.px[1] = (-x * x + 0.75);\n\t\tp.gx[1] = (-2.0 * (x++));\n\t\tp.px[2] = (0.5 * x * x - 1.5 * x + 1.125);\n\t\tp.gx[2] = (x - 1.5);\n\n\t\tvar y = p.cellY - (p.position.y - this.grid.boundaries.Min.y);\n\t\tp.py[0] = (0.5 * y * y + 1.5 * y + 1.125);\n\t\tp.gy[0] = (y++ + 1.5);\n\t\tp.py[1] = (-y * y + 0.75);\n\t\tp.gy[1] = (-2.0 * (y++));\n\t\tp.py[2] = (0.5 * y * y - 1.5 * y + 1.125);\n\t\tp.gy[2] = (y - 1.5);\n\n\t\t// using quadratic interpolation\n\t\t// indices refer to corresponding adjacent cell\n\t\t\n\t\t// y  +-+-+-+\n\t\t//  2 |4|3|2|\n\t\t//    +-+-+-+\n\t\t//  1 |5|0|1|\n\t\t//    +-+-+-+\n\t\t//  0 |6|7|8|\n\t\t//    +-+-+-+\n\t\t//   /\n\t\t//  /  0 1 2 x\n\t\t\n\t\t// state variable\n\t\tp.s[0] = p.px[1] * p.py[1];\n\t\tp.s[1] = p.px[2] * p.py[1];\n\t\tp.s[2] = p.px[2] * p.py[2];\n\t\tp.s[3] = p.px[1] * p.py[2];\n\t\tp.s[4] = p.px[0] * p.py[2];\n\t\tp.s[5] = p.px[0] * p.py[1];\n\t\tp.s[6] = p.px[0] * p.py[0];\n\t\tp.s[7] = p.px[1] * p.py[0];\n\t\tp.s[8] = p.px[2] * p.py[0];\n\t\t\n\t\t// gradient in x axis\n\t\tp.sx[0] = p.gx[1] * p.py[1];\n\t\tp.sx[1] = p.gx[2] * p.py[1];\n\t\tp.sx[2] = p.gx[2] * p.py[2];\n\t\tp.sx[3] = p.gx[1] * p.py[2];\n\t\tp.sx[4] = p.gx[0] * p.py[2];\n\t\tp.sx[5] = p.gx[0] * p.py[1];\n\t\tp.sx[6] = p.gx[0] * p.py[0];\n\t\tp.sx[7] = p.gx[1] * p.py[0];\n\t\tp.sx[8] = p.gx[2] * p.py[0];\n\n\t\t// gradient in y axis\n\t\tp.sy[0] = p.px[1] * p.gy[1];\n\t\tp.sy[1] = p.px[2] * p.gy[1];\n\t\tp.sy[2] = p.px[2] * p.gy[2];\n\t\tp.sy[3] = p.px[1] * p.gy[2];\n\t\tp.sy[4] = p.px[0] * p.gy[2];\n\t\tp.sy[5] = p.px[0] * p.gy[1];\n\t\tp.sy[6] = p.px[0] * p.gy[0];\n\t\tp.sy[7] = p.px[1] * p.gy[0];\n\t\tp.sy[8] = p.px[2] * p.gy[0];\n\t};\n\t\n\t// cache the nodes a particle is adjacent to as a particles attribute\n\tIntegrator.prototype.prepareParticle = function(particle) {\n\t\tparticle.node[0] = this.grid.getOrCreateAt(particle.cellX+1, particle.cellY+1);\n\t\tparticle.node[1] = this.grid.getOrCreateAt(particle.cellX+2, particle.cellY+1);\n\t\tparticle.node[2] = this.grid.getOrCreateAt(particle.cellX+2, particle.cellY+2);\n\t\tparticle.node[3] = this.grid.getOrCreateAt(particle.cellX+1, particle.cellY+2);\n\t\tparticle.node[4] = this.grid.getOrCreateAt(particle.cellX,   particle.cellY+2);\n\t\tparticle.node[5] = this.grid.getOrCreateAt(particle.cellX,   particle.cellY+1);\n\t\tparticle.node[6] = this.grid.getOrCreateAt(particle.cellX,   particle.cellY  );\n\t\tparticle.node[7] = this.grid.getOrCreateAt(particle.cellX+1, particle.cellY  );\n\t\tparticle.node[8] = this.grid.getOrCreateAt(particle.cellX+2, particle.cellY  );\n\t};\n\t\n\tIntegrator.prototype.integrate = function(particle, fn) {\n\t\tfor(var i = 0; i < 9; i++)\n\t\t\tfn.call(undefined, particle, particle.node[i], particle.s[i], particle.sx[i], particle.sy[i]);\n\t};\n\t\n\texport default Integrator;\n"]}