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 &lt;stephan@vern.chem.tu-berlin.de&gt;
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