diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..22a826d --- /dev/null +++ b/.npmignore @@ -0,0 +1,5 @@ +scripts + +.idea +.babelrc +.eslint* \ No newline at end of file diff --git a/README.md b/README.md index 5eab5bd..f6605ee 100644 --- a/README.md +++ b/README.md @@ -154,9 +154,13 @@ You may instantiate the `Varshni3` class as follows: let varshni = new potprox.Varshni3({d0: 0.0368, r0: 5.389, b: 0.0597}); ``` -### Potential class methods +### Potential class members -All the classes in the `potprox` object have a few common methods listed below. +All the classes in the `potprox` object have a few members listed below. + +#### `type` + +The *static* read-only property containing the name of the potential class (e.g. `"LennardJones"`, `"Morse"`, `"Buckingham"` etc.). #### `from(data [, settings])` diff --git a/dist/potprox.js b/dist/potprox.js index 7cd8877..d015983 100644 --- a/dist/potprox.js +++ b/dist/potprox.js @@ -1,3 +1,5 @@ +// potprox v0.5.1 +// https://amphiluke.github.io/potprox/ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.potprox = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o} data - Coordinates for approximation @@ -242,6 +266,13 @@ class LennardJones { instanceData.get(this).sigma = value; } + get r0() { + return 1.122462048309373 * this.sigma; + } + set r0(value) { + this.sigma = value / 1.122462048309373; + } + /** * Calculate the energy for the given interatomic distance * @param {Number} r @@ -259,7 +290,7 @@ class LennardJones { } toJSON() { - return {type: "LennardJones", epsilon: this.epsilon, sigma: this.sigma}; + return {type: LennardJones.type, epsilon: this.epsilon, sigma: this.sigma}; } } @@ -275,6 +306,17 @@ class Morse { this.a = a; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Morse"; + } + /** * Create an instance of the Morse potential via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -433,7 +475,7 @@ class Morse { } toJSON() { - return {type: "Morse", d0: this.d0, r0: this.r0, a: this.a}; + return {type: Morse.type, d0: this.d0, r0: this.r0, a: this.a}; } } @@ -449,6 +491,17 @@ class Rydberg { this.b = b; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Rydberg"; + } + /** * Create an instance of the Rydberg potential via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -608,7 +661,7 @@ class Rydberg { } toJSON() { - return {type: "Rydberg", d0: this.d0, r0: this.r0, b: this.b}; + return {type: Rydberg.type, d0: this.d0, r0: this.r0, b: this.b}; } } @@ -624,6 +677,17 @@ class Varshni3 { this.b = b; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Varshni3"; + } + /** * Create an instance of the Varshni potential (III) via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -782,19 +846,23 @@ class Varshni3 { } toJSON() { - return {type: "Varshni3", d0: this.d0, r0: this.r0, b: this.b}; + return {type: Varshni3.type, d0: this.d0, r0: this.r0, b: this.b}; } } module.exports = Varshni3; },{}],6:[function(require,module,exports){ -let potprox = { - LennardJones: require("./potentials/lennard-jones.js"), - Buckingham: require("./potentials/buckingham.js"), - Morse: require("./potentials/morse.js"), - Rydberg: require("./potentials/rydberg.js"), - Varshni3: require("./potentials/varshni3.js") -}; +let potentialClasses = [ + require("./potentials/lennard-jones.js"), + require("./potentials/buckingham.js"), + require("./potentials/morse.js"), + require("./potentials/rydberg.js"), + require("./potentials/varshni3.js") +]; + +let potprox = Object.create(null); + +potentialClasses.forEach(potentialClass => potprox[potentialClass.type] = potentialClass); // Other properties of the potprox object are non-enumerable to avoid mixing them with // potential classes when using such methods as Object.keys, Object.values etc. diff --git a/dist/potprox.min.js b/dist/potprox.min.js index 16c5d48..ca8bc2e 100644 --- a/dist/potprox.min.js +++ b/dist/potprox.min.js @@ -1 +1,3 @@ -(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.potprox=a()}})(function(){return function b(c,d,e){function a(h,i){if(!d[h]){if(!c[h]){var j="function"==typeof require&&require;if(!i&&j)return j(h,!0);if(g)return g(h,!0);var k=new Error("Cannot find module '"+h+"'");throw k.code="MODULE_NOT_FOUND",k}var f=d[h]={exports:{}};c[h][0].call(f.exports,function(b){var d=c[h][1][b];return a(d?d:b)},f,f.exports,b,c,d,e)}return d[h].exports}for(var g="function"==typeof require&&require,f=0;fb.length)throw new Error("Too little points. Approximation is impossible");b=b.slice().sort((a,b)=>a.r-b.r);let c=Number.POSITIVE_INFINITY,f=1;for(let{r:a,e:d}of b)d=f||0>e.e||0>g.e));a++);let h;if(e&&g&&e.ra&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.a=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get a(){return c.get(this).a}set a(a){if(!Number.isFinite(a))throw new TypeError("The 'a' parameter should be a finite number");if(0>=a)throw new RangeError("The 'a' parameter should be greater than 0");c.get(this).a=a}at(b){if("number"!=typeof b)throw new TypeError("Distance should be a number");if(0>b)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,a:e}=this;return c/(e-6)*(6*Math.exp(e*(1-b/d))-e*Math.pow(d/b,6))}toJSON(){return{type:"Buckingham",d0:this.d0,r0:this.r0,a:this.a}}}b.exports=d},{}],2:[function(a,b){let c=new WeakMap;class d{constructor({epsilon:a=1,sigma:b=1}={}){c.set(this,{}),this.epsilon=a,this.sigma=b}static from(c){if(!Array.isArray(c))throw new TypeError("Approximated data should be an array of points");if(3>c.length)throw new Error("Too little points. Approximation is impossible");let f=0,g=0,h=0,i=0,j=0;for(let{r:a,e:b}of c)f+=Math.pow(a,-24),g+=Math.pow(a,-18),h+=b*Math.pow(a,-12),i+=Math.pow(a,-12),j+=b*Math.pow(a,-6);let e=(j-g*h/f)/(i-g*g/f),b=(h-g*e)/f,k=Math.pow(-b/e,1/6),l=b/(4*Math.pow(k,12));return new d({epsilon:l,sigma:k})}get epsilon(){return c.get(this).epsilon}set epsilon(a){if(!Number.isFinite(a))throw new TypeError("The 'epsilon' parameter should be a finite number");if(0>=a)throw new RangeError("The 'epsilon' parameter should be greater than zero");c.get(this).epsilon=a}get sigma(){return c.get(this).sigma}set sigma(a){if(!Number.isFinite(a))throw new TypeError("The 'sigma' parameter should be a finite number");if(0>=a)throw new RangeError("The 'sigma' parameter should be greater than zero");c.get(this).sigma=a}at(a){if("number"!=typeof a)throw new TypeError("Distance should be a number");if(0>a)throw new RangeError("Distance shouldn't be less than zero");let{epsilon:b,sigma:c}=this;return 4*b*(Math.pow(c/a,12)-Math.pow(c/a,6))}toJSON(){return{type:"LennardJones",epsilon:this.epsilon,sigma:this.sigma}}}b.exports=d},{}],3:[function(a,b){let c=new WeakMap;class d{constructor({d0:b=1,r0:d=1,a:e=1}={}){c.set(this,{}),this.d0=b,this.r0=d,this.a=e}static fastFrom(b){if(!Array.isArray(b))throw new TypeError("Approximated data should be an array of points");if(3>b.length)throw new Error("Too little points. Approximation is impossible");let c=Number.POSITIVE_INFINITY,f=1;for(let{r:a,e:d}of b)df?e=Math.log(1-b)/(f-a):aa&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.a=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get a(){return c.get(this).a}set a(a){if(!Number.isFinite(a))throw new TypeError("The 'a' parameter should be a finite number");if(0>=a)throw new RangeError("The 'a' parameter should be greater than zero");c.get(this).a=a}at(b){if("number"!=typeof b)throw new TypeError("Distance should be a number");if(0>b)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,a:e}=this,a=1-Math.exp(e*(d-b));return c*a*a-c}toJSON(){return{type:"Morse",d0:this.d0,r0:this.r0,a:this.a}}}b.exports=d},{}],4:[function(a,b){let c=new WeakMap;class d{constructor({d0:a=1,r0:d=1,b:e=2}={}){c.set(this,{}),this.d0=a,this.r0=d,this.b=e}static fastFrom(a){if(!Array.isArray(a))throw new TypeError("Approximated data should be an array of points");if(3>a.length)throw new Error("Too little points. Approximation is impossible");a=a.slice().sort((a,b)=>a.r-b.r);let c=Number.POSITIVE_INFINITY,f=1;for(let{r:b,e:d}of a)d=f||0>e.e||0>g.e));b++);let h;if(e&&g&&e.rb&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.b=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get b(){return c.get(this).b}set b(a){if(!Number.isFinite(a))throw new TypeError("The 'b' parameter should be a finite number");if(1>=a)throw new RangeError("The 'b' parameter should be greater than 1");c.get(this).b=a}at(a){if("number"!=typeof a)throw new TypeError("Distance should be a number");if(0>a)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,b:e}=this,b=e*(a-d)/d;return-c*(1+b)*Math.exp(-b)}toJSON(){return{type:"Rydberg",d0:this.d0,r0:this.r0,b:this.b}}}b.exports=d},{}],5:[function(a,b){let c=new WeakMap;class d{constructor({d0:a=1,r0:d=1,b:e=1}={}){c.set(this,{}),this.d0=a,this.r0=d,this.b=e}static fastFrom(a){if(!Array.isArray(a))throw new TypeError("Approximated data should be an array of points");if(3>a.length)throw new Error("Too little points. Approximation is impossible");let c=Number.POSITIVE_INFINITY,f=1;for(let{r:b,e:d}of a)df?e=Math.log(b/f*(1-a))/(f*f-b*b):bb&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.b=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get b(){return c.get(this).b}set b(a){if(!Number.isFinite(a))throw new TypeError("The 'b' parameter should be a finite number");if(0>=a)throw new RangeError("The 'b' parameter should be greater than zero");c.get(this).b=a}at(a){if("number"!=typeof a)throw new TypeError("Distance should be a number");if(0>a)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,b:e}=this,b=1-d/a*Math.exp(e*(d*d-a*a));return c*b*b-c}toJSON(){return{type:"Varshni3",d0:this.d0,r0:this.r0,b:this.b}}}b.exports=d},{}],6:[function(a,b){let c={LennardJones:a("./potentials/lennard-jones.js"),Buckingham:a("./potentials/buckingham.js"),Morse:a("./potentials/morse.js"),Rydberg:a("./potentials/rydberg.js"),Varshni3:a("./potentials/varshni3.js")};Object.defineProperty(c,"utils",{configurable:!0,value:a("./utils.js")}),b.exports=c},{"./potentials/buckingham.js":1,"./potentials/lennard-jones.js":2,"./potentials/morse.js":3,"./potentials/rydberg.js":4,"./potentials/varshni3.js":5,"./utils.js":7}],7:[function(a,b){b.exports={rSqr(a,b){let c=0,d=0;for(let{r:f,e:g}of a){c+=g;let a=g-b.at(f);d+=a*a}c/=a.length;let f=0;for(let{e:d}of a){let a=d-c;f+=a*a}return 1-d/f}}},{}]},{},[6])(6)}); +// potprox v0.5.1 +// https://amphiluke.github.io/potprox/ +(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.potprox=a()}})(function(){return function b(c,d,e){function a(h,i){if(!d[h]){if(!c[h]){var j="function"==typeof require&&require;if(!i&&j)return j(h,!0);if(g)return g(h,!0);var k=new Error("Cannot find module '"+h+"'");throw k.code="MODULE_NOT_FOUND",k}var f=d[h]={exports:{}};c[h][0].call(f.exports,function(b){var d=c[h][1][b];return a(d?d:b)},f,f.exports,b,c,d,e)}return d[h].exports}for(var g="function"==typeof require&&require,f=0;fb.length)throw new Error("Too little points. Approximation is impossible");b=b.slice().sort((a,b)=>a.r-b.r);let c=Number.POSITIVE_INFINITY,f=1;for(let{r:a,e:d}of b)d=f||0>e.e||0>g.e));a++);let h;if(e&&g&&e.ra&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.a=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get a(){return c.get(this).a}set a(a){if(!Number.isFinite(a))throw new TypeError("The 'a' parameter should be a finite number");if(0>=a)throw new RangeError("The 'a' parameter should be greater than 0");c.get(this).a=a}at(b){if("number"!=typeof b)throw new TypeError("Distance should be a number");if(0>b)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,a:e}=this;return c/(e-6)*(6*Math.exp(e*(1-b/d))-e*Math.pow(d/b,6))}toJSON(){return{type:d.type,d0:this.d0,r0:this.r0,a:this.a}}}b.exports=d},{}],2:[function(a,b){let c=new WeakMap;class d{constructor({epsilon:a=1,sigma:b=1}={}){c.set(this,{}),this.epsilon=a,this.sigma=b}static get type(){return"LennardJones"}static from(c){if(!Array.isArray(c))throw new TypeError("Approximated data should be an array of points");if(3>c.length)throw new Error("Too little points. Approximation is impossible");let f=0,g=0,h=0,i=0,j=0;for(let{r:a,e:b}of c)f+=Math.pow(a,-24),g+=Math.pow(a,-18),h+=b*Math.pow(a,-12),i+=Math.pow(a,-12),j+=b*Math.pow(a,-6);let e=(j-g*h/f)/(i-g*g/f),b=(h-g*e)/f,k=Math.pow(-b/e,1/6),l=b/(4*Math.pow(k,12));return new d({epsilon:l,sigma:k})}get epsilon(){return c.get(this).epsilon}set epsilon(a){if(!Number.isFinite(a))throw new TypeError("The 'epsilon' parameter should be a finite number");if(0>=a)throw new RangeError("The 'epsilon' parameter should be greater than zero");c.get(this).epsilon=a}get sigma(){return c.get(this).sigma}set sigma(a){if(!Number.isFinite(a))throw new TypeError("The 'sigma' parameter should be a finite number");if(0>=a)throw new RangeError("The 'sigma' parameter should be greater than zero");c.get(this).sigma=a}get r0(){return 1.122462048309373*this.sigma}set r0(a){this.sigma=a/1.122462048309373}at(a){if("number"!=typeof a)throw new TypeError("Distance should be a number");if(0>a)throw new RangeError("Distance shouldn't be less than zero");let{epsilon:b,sigma:c}=this;return 4*b*(Math.pow(c/a,12)-Math.pow(c/a,6))}toJSON(){return{type:d.type,epsilon:this.epsilon,sigma:this.sigma}}}b.exports=d},{}],3:[function(a,b){let c=new WeakMap;class d{constructor({d0:b=1,r0:d=1,a:e=1}={}){c.set(this,{}),this.d0=b,this.r0=d,this.a=e}static get type(){return"Morse"}static fastFrom(b){if(!Array.isArray(b))throw new TypeError("Approximated data should be an array of points");if(3>b.length)throw new Error("Too little points. Approximation is impossible");let c=Number.POSITIVE_INFINITY,f=1;for(let{r:a,e:d}of b)df?e=Math.log(1-b)/(f-a):aa&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.a=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get a(){return c.get(this).a}set a(a){if(!Number.isFinite(a))throw new TypeError("The 'a' parameter should be a finite number");if(0>=a)throw new RangeError("The 'a' parameter should be greater than zero");c.get(this).a=a}at(b){if("number"!=typeof b)throw new TypeError("Distance should be a number");if(0>b)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,a:e}=this,a=1-Math.exp(e*(d-b));return c*a*a-c}toJSON(){return{type:d.type,d0:this.d0,r0:this.r0,a:this.a}}}b.exports=d},{}],4:[function(a,b){let c=new WeakMap;class d{constructor({d0:a=1,r0:d=1,b:e=2}={}){c.set(this,{}),this.d0=a,this.r0=d,this.b=e}static get type(){return"Rydberg"}static fastFrom(a){if(!Array.isArray(a))throw new TypeError("Approximated data should be an array of points");if(3>a.length)throw new Error("Too little points. Approximation is impossible");a=a.slice().sort((a,b)=>a.r-b.r);let c=Number.POSITIVE_INFINITY,f=1;for(let{r:b,e:d}of a)d=f||0>e.e||0>g.e));b++);let h;if(e&&g&&e.rb&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.b=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get b(){return c.get(this).b}set b(a){if(!Number.isFinite(a))throw new TypeError("The 'b' parameter should be a finite number");if(1>=a)throw new RangeError("The 'b' parameter should be greater than 1");c.get(this).b=a}at(a){if("number"!=typeof a)throw new TypeError("Distance should be a number");if(0>a)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,b:e}=this,b=e*(a-d)/d;return-c*(1+b)*Math.exp(-b)}toJSON(){return{type:d.type,d0:this.d0,r0:this.r0,b:this.b}}}b.exports=d},{}],5:[function(a,b){let c=new WeakMap;class d{constructor({d0:a=1,r0:d=1,b:e=1}={}){c.set(this,{}),this.d0=a,this.r0=d,this.b=e}static get type(){return"Varshni3"}static fastFrom(a){if(!Array.isArray(a))throw new TypeError("Approximated data should be an array of points");if(3>a.length)throw new Error("Too little points. Approximation is impossible");let c=Number.POSITIVE_INFINITY,f=1;for(let{r:b,e:d}of a)df?e=Math.log(b/f*(1-a))/(f*f-b*b):bb&&Math.abs(m)>j&&Math.abs(n)>k);return f.d0=g,f.r0=h,f.b=i,f}get d0(){return c.get(this).d0}set d0(a){if(!Number.isFinite(a))throw new TypeError("The 'd0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'd0' parameter should be greater than zero");c.get(this).d0=a}get r0(){return c.get(this).r0}set r0(a){if(!Number.isFinite(a))throw new TypeError("The 'r0' parameter should be a finite number");if(0>=a)throw new RangeError("The 'r0' parameter should be greater than zero");c.get(this).r0=a}get b(){return c.get(this).b}set b(a){if(!Number.isFinite(a))throw new TypeError("The 'b' parameter should be a finite number");if(0>=a)throw new RangeError("The 'b' parameter should be greater than zero");c.get(this).b=a}at(a){if("number"!=typeof a)throw new TypeError("Distance should be a number");if(0>a)throw new RangeError("Distance shouldn't be less than zero");let{d0:c,r0:d,b:e}=this,b=1-d/a*Math.exp(e*(d*d-a*a));return c*b*b-c}toJSON(){return{type:d.type,d0:this.d0,r0:this.r0,b:this.b}}}b.exports=d},{}],6:[function(a,b){let c=[a("./potentials/lennard-jones.js"),a("./potentials/buckingham.js"),a("./potentials/morse.js"),a("./potentials/rydberg.js"),a("./potentials/varshni3.js")],d=Object.create(null);c.forEach((a)=>d[a.type]=a),Object.defineProperty(d,"utils",{configurable:!0,value:a("./utils.js")}),b.exports=d},{"./potentials/buckingham.js":1,"./potentials/lennard-jones.js":2,"./potentials/morse.js":3,"./potentials/rydberg.js":4,"./potentials/varshni3.js":5,"./utils.js":7}],7:[function(a,b){b.exports={rSqr(a,b){let c=0,d=0;for(let{r:f,e:g}of a){c+=g;let a=g-b.at(f);d+=a*a}c/=a.length;let f=0;for(let{e:d}of a){let a=d-c;f+=a*a}return 1-d/f}}},{}]},{},[6])(6)}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 92b1678..e4f603b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "potprox", - "version": "0.5.0", + "version": "0.5.1", "lockfileVersion": 1, "dependencies": { "acorn": { @@ -157,10 +157,100 @@ "optional": true }, "babel-cli": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", - "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", - "dev": true + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "dependencies": { + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "dependencies": { + "core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "dependencies": { + "core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + } + } }, "babel-code-frame": { "version": "6.22.0", @@ -169,16 +259,80 @@ "dev": true }, "babel-core": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", - "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", - "dev": true + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "dependencies": { + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + } + } }, "babel-generator": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", - "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", - "dev": true + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "dependencies": { + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + } + } }, "babel-helper-evaluate-path": { "version": "0.1.0", @@ -366,12 +520,6 @@ "integrity": "sha1-/isdKU6wXodSTrk3JN6m4sPWb6E=", "dev": true }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "dev": true - }, "babel-preset-babili": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/babel-preset-babili/-/babel-preset-babili-0.1.4.tgz", @@ -379,10 +527,30 @@ "dev": true }, "babel-register": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", - "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", - "dev": true + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "dependencies": { + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true + }, + "core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + } + } }, "babel-runtime": { "version": "6.23.0", @@ -434,9 +602,9 @@ "optional": true }, "bn.js": { - "version": "4.11.7", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz", - "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, "brace-expansion": { @@ -521,9 +689,9 @@ "dev": true }, "buffer": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", - "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.7.tgz", + "integrity": "sha512-NeeHXWh5pCbPQCt2/6rLvXqapZfVsqw/YgRgaHpT3H9Uzgs+S0lSg5SQzouIuDvcmlQRqBe8hOO2scKCu3cxrg==", "dev": true }, "buffer-xor": { @@ -808,22 +976,70 @@ "dev": true }, "eslint": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.3.0.tgz", - "integrity": "sha1-/NfJY3a780yF7mftABKimWQrEI8=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.5.0.tgz", + "integrity": "sha1-u3XTuL3pf7XhPvzVOXRGd/6wGcM=", "dev": true, "dependencies": { + "acorn": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true + }, "concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true }, + "espree": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", + "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", + "dev": true + }, + "js-yaml": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", + "dev": true + }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true } } }, @@ -833,20 +1049,6 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true }, - "espree": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", - "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", - "dev": true, - "dependencies": { - "acorn": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", - "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", - "dev": true - } - } - }, "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", @@ -884,9 +1086,9 @@ "dev": true }, "evp_bytestokey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", - "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz", + "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==", "dev": true }, "expand-brackets": { @@ -986,667 +1188,10 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "functional-red-black-tree": { @@ -1977,12 +1522,6 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, - "js-yaml": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", - "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", - "dev": true - }, "jschardet": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.0.tgz", @@ -2099,6 +1638,20 @@ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "dev": true }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true + } + } + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -2166,13 +1719,6 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "nan": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "dev": true, - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2303,9 +1849,9 @@ "dev": true }, "pbkdf2": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", - "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", + "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", "dev": true }, "pify": { @@ -2502,9 +2048,9 @@ "dev": true }, "resolve": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", - "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", "dev": true }, "resolve-from": { diff --git a/package.json b/package.json index 0ecb0f8..045a308 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "potprox", - "version": "0.5.0", + "version": "0.5.1", "description": "Approximation of computed data with empirical pair potentials", "main": "src/potprox.js", "scripts": { "lint": "eslint src/**/*.js", "test": "echo \"Error: no test specified\" && exit 1", - "build": "browserify src/potprox.js --standalone potprox -o dist/potprox.js && babel dist/potprox.js -o dist/potprox.min.js" + "build": "node scripts/build.js" }, "repository": { "type": "git", @@ -25,11 +25,13 @@ "bugs": { "url": "https://github.com/Amphiluke/potprox/issues" }, - "homepage": "https://github.com/Amphiluke/potprox#readme", + "homepage": "https://amphiluke.github.io/potprox/", "devDependencies": { - "babel-cli": "^6.24.1", + "babel-cli": "^6.26.0", + "babel-core": "^6.26.0", "babel-preset-babili": "0.1.4", "browserify": "^14.4.0", - "eslint": "^4.3.0" + "eslint": "^4.5.0", + "through2": "^2.0.3" } } diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 0000000..a31db8b --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,34 @@ +let fs = require("fs"); +let through2 = require("through2"); +let browserify = require("browserify"); +let babel = require("babel-core"); +let pkg = require("../package.json"); + +function transform(transpile = false) { + let contents = ""; + let transformFn = (chunk, enc, cb) => { + contents += chunk; + cb(); + }; + let flushFn = (cb) => { + let code = `// ${pkg.name} v${pkg.version}\n// ${pkg.homepage}\n`; + if (transpile) { + // disable the minify-builtins plugin as it generates global variables + code += babel.transform(contents, {presets: [["babili", {builtIns: false}]]}).code; + } else { + code += contents; + } + cb(null, code); + }; + return through2({objectMode: true}, transformFn, flushFn); +} + +let bundleStream = browserify("./src/potprox.js", {standalone: "potprox"}).bundle(); + +bundleStream + .pipe(transform()) + .pipe(fs.createWriteStream("./dist/potprox.js")); + +bundleStream + .pipe(transform(true)) + .pipe(fs.createWriteStream("./dist/potprox.min.js")); \ No newline at end of file diff --git a/src/potentials/buckingham.js b/src/potentials/buckingham.js index d571231..df331b6 100644 --- a/src/potentials/buckingham.js +++ b/src/potentials/buckingham.js @@ -8,6 +8,17 @@ class Buckingham { this.a = a; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Buckingham"; + } + /** * Create an instance of the Buckingham potential via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -172,7 +183,7 @@ class Buckingham { } toJSON() { - return {type: "Buckingham", d0: this.d0, r0: this.r0, a: this.a}; + return {type: Buckingham.type, d0: this.d0, r0: this.r0, a: this.a}; } } diff --git a/src/potentials/lennard-jones.js b/src/potentials/lennard-jones.js index 8c673ed..1264767 100644 --- a/src/potentials/lennard-jones.js +++ b/src/potentials/lennard-jones.js @@ -7,6 +7,17 @@ class LennardJones { this.sigma = sigma; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "LennardJones"; + } + /** * Create an instance of the Lennard-Jones potential via approximation of input data * @param {Array.<{r: Number, e: Number}>} data - Coordinates for approximation @@ -61,6 +72,13 @@ class LennardJones { instanceData.get(this).sigma = value; } + get r0() { + return 1.122462048309373 * this.sigma; + } + set r0(value) { + this.sigma = value / 1.122462048309373; + } + /** * Calculate the energy for the given interatomic distance * @param {Number} r @@ -78,7 +96,7 @@ class LennardJones { } toJSON() { - return {type: "LennardJones", epsilon: this.epsilon, sigma: this.sigma}; + return {type: LennardJones.type, epsilon: this.epsilon, sigma: this.sigma}; } } diff --git a/src/potentials/morse.js b/src/potentials/morse.js index 196302d..8d9e650 100644 --- a/src/potentials/morse.js +++ b/src/potentials/morse.js @@ -8,6 +8,17 @@ class Morse { this.a = a; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Morse"; + } + /** * Create an instance of the Morse potential via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -166,7 +177,7 @@ class Morse { } toJSON() { - return {type: "Morse", d0: this.d0, r0: this.r0, a: this.a}; + return {type: Morse.type, d0: this.d0, r0: this.r0, a: this.a}; } } diff --git a/src/potentials/rydberg.js b/src/potentials/rydberg.js index 42cbdbd..239f414 100644 --- a/src/potentials/rydberg.js +++ b/src/potentials/rydberg.js @@ -8,6 +8,17 @@ class Rydberg { this.b = b; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Rydberg"; + } + /** * Create an instance of the Rydberg potential via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -167,7 +178,7 @@ class Rydberg { } toJSON() { - return {type: "Rydberg", d0: this.d0, r0: this.r0, b: this.b}; + return {type: Rydberg.type, d0: this.d0, r0: this.r0, b: this.b}; } } diff --git a/src/potentials/varshni3.js b/src/potentials/varshni3.js index ecaeee8..903d992 100644 --- a/src/potentials/varshni3.js +++ b/src/potentials/varshni3.js @@ -8,6 +8,17 @@ class Varshni3 { this.b = b; } + /** + * The name of the potential class. To be used instead of + * `instance.constructor.name` (since in the minified version names are mangled) + * @type {String} + * @readonly + * @static + */ + static get type() { + return "Varshni3"; + } + /** * Create an instance of the Varshni potential (III) via approximation of input data. * This method performs fast initial approximation and is not very accurate. @@ -166,7 +177,7 @@ class Varshni3 { } toJSON() { - return {type: "Varshni3", d0: this.d0, r0: this.r0, b: this.b}; + return {type: Varshni3.type, d0: this.d0, r0: this.r0, b: this.b}; } } diff --git a/src/potprox.js b/src/potprox.js index 0270a66..e7267f5 100644 --- a/src/potprox.js +++ b/src/potprox.js @@ -1,10 +1,14 @@ -let potprox = { - LennardJones: require("./potentials/lennard-jones.js"), - Buckingham: require("./potentials/buckingham.js"), - Morse: require("./potentials/morse.js"), - Rydberg: require("./potentials/rydberg.js"), - Varshni3: require("./potentials/varshni3.js") -}; +let potentialClasses = [ + require("./potentials/lennard-jones.js"), + require("./potentials/buckingham.js"), + require("./potentials/morse.js"), + require("./potentials/rydberg.js"), + require("./potentials/varshni3.js") +]; + +let potprox = Object.create(null); + +potentialClasses.forEach(potentialClass => potprox[potentialClass.type] = potentialClass); // Other properties of the potprox object are non-enumerable to avoid mixing them with // potential classes when using such methods as Object.keys, Object.values etc.