Source: chemistry.js

/*
 * rational.js - Javascript tools and libraries based around rational numbers.
 * Copyright (C) 2013 Dylan Ferris
 *
 * This file is part of rational.js.
 *
 * rational.js is free software: you may redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * rational.js is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with rational.js.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * @class Chemistry
 * @name chemistry
 */
var chemistry = {};

/**
 * Returns the quantum numbers of the nth electron, starting at n = 0
 *
 * @param {Integer} n the number of electrons before this one
 * @returns {Array} [n, l, m_l, m_s]
 */
chemistry.quantum_numbers_of_atoms_electron = function(n) {
	switch (n) {
		
		// 1s
		case 0:		return [1, 0, +0, +1/2];
		case 1:		return [1, 0, +0, -1/2]; // He
		
		// 2s
		case 2:		return [2, 0, +0, +1/2];
		case 3:		return [2, 0, +0, -1/2];
		
		// 2p
		case 4:		return [2, 1, +0, +1/2];
		case 5:		return [2, 1, +1, +1/2];
		case 6:		return [2, 1, -1, +1/2];
		case 7:		return [2, 1, +0, -1/2];
		case 8:		return [2, 1, +1, -1/2];
		case 9:		return [2, 1, -1, -1/2]; // Ne
		
		// 3s
		case 10:	return [3, 0, +0, +1/2];
		case 11:	return [3, 0, +0, -1/2];
		
		// 3p
		case 12:	return [3, 1, +0, +1/2];
		case 13:	return [3, 1, +1, +1/2];
		case 14:	return [3, 1, -1, +1/2];
		case 15:	return [3, 1, +0, -1/2];
		case 16:	return [3, 1, +1, -1/2];
		case 17:	return [3, 1, -1, -1/2]; // Ar
		
		// 3d
		case 18:	return [3, 2, +0, +1/2];
		case 19:	return [3, 2, +1, +1/2];
		case 20:	return [3, 2, -1, +1/2];
		case 21:	return [3, 2, +2, +1/2];
		case 22:	return [3, 2, -2, +1/2];
		case 23:	return [3, 2, +0, -1/2];
		case 24:	return [3, 2, +1, -1/2];
		case 25:	return [3, 2, -1, -1/2];
		case 26:	return [3, 2, +2, -1/2];
		case 27:	return [3, 2, -2, -1/2];
		
		// 4s
		case 28:	return [4, 0, +0, +1/2];
		case 29:	return [4, 0, +0, -1/2];
		
		// 4p
		case 30:	return [4, 1, +0, +1/2];
		case 31:	return [4, 1, +1, +1/2];
		case 32:	return [4, 1, -1, +1/2];
		case 33:	return [4, 1, +0, -1/2];
		case 34:	return [4, 1, +1, -1/2];
		case 35:	return [4, 1, -1, -1/2]; // Kr
		
		// 5s
		case 36:	return [5, 0, +0, +1/2];
		case 37:	return [5, 0, +0, -1/2];
		
		// 4d
		case 38:	return [4, 2, +0, +1/2];
		case 39:	return [4, 2, +1, +1/2];
		case 40:	return [4, 2, -1, +1/2];
		case 41:	return [4, 2, +2, +1/2];
		case 42:	return [4, 2, -2, +1/2];
		case 43:	return [4, 2, +0, -1/2];
		case 44:	return [4, 2, +1, -1/2];
		case 45:	return [4, 2, -1, -1/2];
		case 46:	return [4, 2, +2, -1/2];
		case 47:	return [4, 2, -2, -1/2];
		
		// 5p
		case 48:	return [5, 1, +0, +1/2];
		case 49:	return [5, 1, +1, +1/2];
		case 50:	return [5, 1, -1, +1/2];
		case 51:	return [5, 1, +0, -1/2];
		case 52:	return [5, 1, +1, -1/2];
		case 53:	return [5, 1, -1, -1/2]; // Xe
		
		// 4f
		case 54:	return [4, 3, +0, +1/2];
		case 55:	return [4, 3, +1, +1/2];
		case 56:	return [4, 3, -1, +1/2];
		case 57:	return [4, 3, +2, +1/2];
		case 58:	return [4, 3, -2, +1/2];
		case 59:	return [4, 3, +3, +1/2];
		case 60:	return [4, 3, -3, +1/2];
		case 61:	return [4, 3, +0, -1/2];
		case 62:	return [4, 3, +1, -1/2];
		case 63:	return [4, 3, -1, -1/2];
		case 64:	return [4, 3, +2, -1/2];
		case 65:	return [4, 3, -2, -1/2];
		case 66:	return [4, 3, +3, -1/2];
		case 67:	return [4, 3, -3, -1/2];
				
		// 5d
		case 68:	return [5, 2, +0, +1/2];
		case 69:	return [5, 2, +1, +1/2];
		case 70:	return [5, 2, -1, +1/2];
		case 71:	return [5, 2, +2, +1/2];
		case 72:	return [5, 2, -2, +1/2];
		case 73:	return [5, 2, +0, -1/2];
		case 74:	return [5, 2, +1, -1/2];
		case 75:	return [5, 2, -1, -1/2];
		case 76:	return [5, 2, +2, -1/2];
		case 77:	return [5, 2, -2, -1/2];
		
		// 6s
		case 78:	return [6, 0, +0, +1/2];
		case 79:	return [6, 0, +0, -1/2];
		
		// 6p
		case 80:	return [6, 1, +0, +1/2];
		case 81:	return [6, 1, +1, +1/2];
		case 82:	return [6, 1, -1, +1/2];
		case 83:	return [6, 1, +0, -1/2];
		case 84:	return [6, 1, +1, -1/2];
		case 85:	return [6, 1, -1, -1/2]; // Rn
		
		// 5f
		case 86:	return [5, 3, +0, +1/2];
		case 87:	return [5, 3, +1, +1/2];
		case 88:	return [5, 3, -1, +1/2];
		case 89:	return [5, 3, +2, +1/2];
		case 90:	return [5, 3, -2, +1/2];
		case 91:	return [5, 3, +3, +1/2];
		case 92:	return [5, 3, -3, +1/2];
		case 93:	return [5, 3, +0, -1/2];
		case 94:	return [5, 3, +1, -1/2];
		case 95:	return [5, 3, -1, -1/2];
		case 96:	return [5, 3, +2, -1/2];
		case 97:	return [5, 3, -2, -1/2];
		case 98:	return [5, 3, +3, -1/2];
		case 99:	return [5, 3, -3, -1/2];
		
		// 6d
		case 100:	return [6, 2, +0, +1/2];
		case 101:	return [6, 2, +1, +1/2];
		case 102:	return [6, 2, -1, +1/2];
		case 103:	return [6, 2, +2, +1/2];
		case 104:	return [6, 2, -2, +1/2];
		case 105:	return [6, 2, +0, -1/2];
		case 106:	return [6, 2, +1, -1/2];
		case 107:	return [6, 2, -1, -1/2];
		case 108:	return [6, 2, +2, -1/2];
		case 109:	return [6, 2, -2, -1/2];
		
		// 7s
		case 110:	return [7, 0, +0, +1/2];
		case 111:	return [7, 0, +0, -1/2];
		
		// 7p
		case 112:	return [7, 1, +0, +1/2];
		case 113:	return [7, 1, +1, +1/2];
		case 114:	return [7, 1, -1, +1/2];
		case 115:	return [7, 1, +0, -1/2];
		case 116:	return [7, 1, +1, -1/2];
		case 117:	return [7, 1, -1, -1/2]; // Uuo
	
	}
}

if(typeof(exports) !== 'undefined') {
	exports.chemistry = chemistry;
}