1 /* Copyright (C) 2001-2007 Stephan Michels <stephan@vern.chem.tu-berlin.de> 2 * 3 * Contact: cdk-devel@lists.sf.net 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public License 7 * as published by the Free Software Foundation; either version 2.1 8 * of the License, or (at your option) any later version. 9 * All we ask is that proper credit is given for our work, which includes 10 * - but is not limited to - adding the above copyright notice to the beginning 11 * of your source code files, and to any copyright notice that you may distribute 12 * with programs based on this work. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 22 * 23 */ 24 package org.openscience.cdk.math.qm; 25 26 import org.openscience.cdk.interfaces.IAtom; 27 import org.openscience.cdk.math.Vector; 28 29 /** 30 * This class will generate a simple base set for a atom container. 31 * 32 * @author Stephan Michels <stephan@vern.chem.tu-berlin.de> 33 * @cdk.githash 34 * @cdk.created 2001-07-11 35 * @cdk.module qm 36 */ 37 public class SimpleBasisSet extends GaussiansBasis { 38 39 private final static double f1 = 0.1; 40 private final static double f2 = 0.3; 41 private final static double f3 = 0.9; 42 private final static double f4 = 2.7; 43 44 /** 45 * Create a base set 46 */ SimpleBasisSet(IAtom[] atoms)47 public SimpleBasisSet(IAtom[] atoms) { 48 int i, j; 49 int size = 0; 50 int atomicnumber; 51 for (i = 0; i < atoms.length; i++) { 52 atomicnumber = atoms[i].getAtomicNumber(); 53 if (atomicnumber <= 2) 54 size += 4; 55 else if (atomicnumber <= 18) 56 size += 4 + 12; 57 else 58 size += 4 + 12 + 12; 59 } 60 61 int[] nx = new int[size]; 62 int[] ny = new int[size]; 63 int[] nz = new int[size]; 64 double[] alpha = new double[size]; 65 Vector[] r = new Vector[size]; 66 67 Vector rN; 68 69 j = 0; 70 for (i = 0; i < atoms.length; i++) { 71 atomicnumber = atoms[i].getAtomicNumber(); 72 rN = new Vector(atoms[i].getPoint3d()); 73 if (atomicnumber <= 2) { 74 nx[j] = 0; 75 ny[j] = 0; 76 nz[j] = 0; 77 alpha[j] = f1; 78 r[j] = rN; 79 j++; 80 nx[j] = 0; 81 ny[j] = 0; 82 nz[j] = 0; 83 alpha[j] = f2; 84 r[j] = rN; 85 j++; 86 nx[j] = 0; 87 ny[j] = 0; 88 nz[j] = 0; 89 alpha[j] = f3; 90 r[j] = rN; 91 j++; 92 nx[j] = 0; 93 ny[j] = 0; 94 nz[j] = 0; 95 alpha[j] = f4; 96 r[j] = rN; 97 j++; 98 } else if (atomicnumber <= 18) { 99 nx[j] = 0; 100 ny[j] = 0; 101 nz[j] = 0; 102 alpha[j] = f1; 103 r[j] = rN; 104 j++; 105 nx[j] = 0; 106 ny[j] = 0; 107 nz[j] = 0; 108 alpha[j] = f2; 109 r[j] = rN; 110 j++; 111 nx[j] = 0; 112 ny[j] = 0; 113 nz[j] = 0; 114 alpha[j] = f3; 115 r[j] = rN; 116 j++; 117 nx[j] = 0; 118 ny[j] = 0; 119 nz[j] = 0; 120 alpha[j] = f4; 121 r[j] = rN; 122 j++; 123 124 nx[j] = 1; 125 ny[j] = 0; 126 nz[j] = 0; 127 alpha[j] = f1; 128 r[j] = rN; 129 j++; 130 nx[j] = 1; 131 ny[j] = 0; 132 nz[j] = 0; 133 alpha[j] = f2; 134 r[j] = rN; 135 j++; 136 nx[j] = 1; 137 ny[j] = 0; 138 nz[j] = 0; 139 alpha[j] = f3; 140 r[j] = rN; 141 j++; 142 nx[j] = 1; 143 ny[j] = 0; 144 nz[j] = 0; 145 alpha[j] = f4; 146 r[j] = rN; 147 j++; 148 149 nx[j] = 0; 150 ny[j] = 1; 151 nz[j] = 0; 152 alpha[j] = f1; 153 r[j] = rN; 154 j++; 155 nx[j] = 0; 156 ny[j] = 1; 157 nz[j] = 0; 158 alpha[j] = f2; 159 r[j] = rN; 160 j++; 161 nx[j] = 0; 162 ny[j] = 1; 163 nz[j] = 0; 164 alpha[j] = f3; 165 r[j] = rN; 166 j++; 167 nx[j] = 0; 168 ny[j] = 1; 169 nz[j] = 0; 170 alpha[j] = f4; 171 r[j] = rN; 172 j++; 173 174 nx[j] = 0; 175 ny[j] = 0; 176 nz[j] = 1; 177 alpha[j] = f1; 178 r[j] = rN; 179 j++; 180 nx[j] = 0; 181 ny[j] = 0; 182 nz[j] = 1; 183 alpha[j] = f2; 184 r[j] = rN; 185 j++; 186 nx[j] = 0; 187 ny[j] = 0; 188 nz[j] = 1; 189 alpha[j] = f3; 190 r[j] = rN; 191 j++; 192 nx[j] = 0; 193 ny[j] = 0; 194 nz[j] = 1; 195 alpha[j] = f4; 196 r[j] = rN; 197 j++; 198 } else { 199 nx[j] = 0; 200 ny[j] = 0; 201 nz[j] = 0; 202 alpha[j] = f1; 203 r[j] = rN; 204 j++; 205 nx[j] = 0; 206 ny[j] = 0; 207 nz[j] = 0; 208 alpha[j] = f2; 209 r[j] = rN; 210 j++; 211 nx[j] = 0; 212 ny[j] = 0; 213 nz[j] = 0; 214 alpha[j] = f3; 215 r[j] = rN; 216 j++; 217 nx[j] = 0; 218 ny[j] = 0; 219 nz[j] = 0; 220 alpha[j] = f4; 221 r[j] = rN; 222 j++; 223 224 nx[j] = 1; 225 ny[j] = 0; 226 nz[j] = 0; 227 alpha[j] = f1; 228 r[j] = rN; 229 j++; 230 nx[j] = 1; 231 ny[j] = 0; 232 nz[j] = 0; 233 alpha[j] = f2; 234 r[j] = rN; 235 j++; 236 nx[j] = 1; 237 ny[j] = 0; 238 nz[j] = 0; 239 alpha[j] = f3; 240 r[j] = rN; 241 j++; 242 nx[j] = 1; 243 ny[j] = 0; 244 nz[j] = 0; 245 alpha[j] = f4; 246 r[j] = rN; 247 j++; 248 249 nx[j] = 0; 250 ny[j] = 1; 251 nz[j] = 0; 252 alpha[j] = f1; 253 r[j] = rN; 254 j++; 255 nx[j] = 0; 256 ny[j] = 1; 257 nz[j] = 0; 258 alpha[j] = f2; 259 r[j] = rN; 260 j++; 261 nx[j] = 0; 262 ny[j] = 1; 263 nz[j] = 0; 264 alpha[j] = f3; 265 r[j] = rN; 266 j++; 267 nx[j] = 0; 268 ny[j] = 1; 269 nz[j] = 0; 270 alpha[j] = f4; 271 r[j] = rN; 272 j++; 273 274 nx[j] = 0; 275 ny[j] = 0; 276 nz[j] = 1; 277 alpha[j] = f1; 278 r[j] = rN; 279 j++; 280 nx[j] = 0; 281 ny[j] = 0; 282 nz[j] = 1; 283 alpha[j] = f2; 284 r[j] = rN; 285 j++; 286 nx[j] = 0; 287 ny[j] = 0; 288 nz[j] = 1; 289 alpha[j] = f3; 290 r[j] = rN; 291 j++; 292 nx[j] = 0; 293 ny[j] = 0; 294 nz[j] = 1; 295 alpha[j] = f4; 296 r[j] = rN; 297 j++; 298 299 nx[j] = 1; 300 ny[j] = 1; 301 nz[j] = 0; 302 alpha[j] = f1; 303 r[j] = rN; 304 j++; 305 nx[j] = 1; 306 ny[j] = 1; 307 nz[j] = 0; 308 alpha[j] = f2; 309 r[j] = rN; 310 j++; 311 nx[j] = 1; 312 ny[j] = 1; 313 nz[j] = 0; 314 alpha[j] = f3; 315 r[j] = rN; 316 j++; 317 nx[j] = 1; 318 ny[j] = 1; 319 nz[j] = 0; 320 alpha[j] = f4; 321 r[j] = rN; 322 j++; 323 324 nx[j] = 0; 325 ny[j] = 1; 326 nz[j] = 1; 327 alpha[j] = f1; 328 r[j] = rN; 329 j++; 330 nx[j] = 0; 331 ny[j] = 1; 332 nz[j] = 1; 333 alpha[j] = f2; 334 r[j] = rN; 335 j++; 336 nx[j] = 0; 337 ny[j] = 1; 338 nz[j] = 1; 339 alpha[j] = f3; 340 r[j] = rN; 341 j++; 342 nx[j] = 0; 343 ny[j] = 1; 344 nz[j] = 1; 345 alpha[j] = f4; 346 r[j] = rN; 347 j++; 348 349 nx[j] = 1; 350 ny[j] = 0; 351 nz[j] = 1; 352 alpha[j] = f1; 353 r[j] = rN; 354 j++; 355 nx[j] = 1; 356 ny[j] = 0; 357 nz[j] = 1; 358 alpha[j] = f2; 359 r[j] = rN; 360 j++; 361 nx[j] = 1; 362 ny[j] = 0; 363 nz[j] = 1; 364 alpha[j] = f3; 365 r[j] = rN; 366 j++; 367 nx[j] = 1; 368 ny[j] = 0; 369 nz[j] = 1; 370 alpha[j] = f4; 371 r[j] = rN; 372 j++; 373 } 374 } 375 // logger.debug("j="+j+" size="+size); 376 377 setBasis(nx, ny, nz, alpha, r, atoms); 378 } 379 } 380