/* $RCSfile$ * $Author$ * $Date$ * $Revision$ * * Copyright (C) 2001-2007 Stephan Michels <stephan@vern.chem.tu-berlin.de> * * Contact: cdk-devel@lists.sf.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * All we ask is that proper credit is given for our work, which includes * - but is not limited to - adding the above copyright notice to the beginning * of your source code files, and to any copyright notice that you may distribute * with programs based on this work. * * This program 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * */ package org.openscience.cdk.math.qm; import org.openscience.cdk.math.IFunction; import org.openscience.cdk.math.Matrix; import org.openscience.cdk.math.Vector; /** * At this time this class does not work correcly. * The theory were from {@cdk.cite MAR89}. * @cdk.githash * * @author Stephan Michels <stephan@vern.chem.tu-berlin.de> * @cdk.created 2001-07-02 * @cdk.module qm */ public class FourierGridBasis implements IBasis { private int N; private double minx; private double maxx; private double dx; private IFunction potential; private double Tl; private int N2; public FourierGridBasis(int N, double minx, double maxx, IFunction potential) { this.N = N; this.minx = minx; this.maxx = maxx; dx = (maxx-minx)/N; this.potential = potential; //Tl = (2/m)*(hdash*Math.PI/(N*dx))*(hdash*Math.PI/(N*dx)); Tl = 2*(Math.PI/(N*dx))*(Math.PI/(N*dx))/10; N2 = (N-1)/2; /*S = calcS(); T = calcT(); V = calcV();*/ } public int getSize() { return N; } public double getMinX() { return minx; } public double getMaxX() { return maxx; } public double getMinY() { return -1d; } public double getMaxY() { return +1d; } public double getMinZ() { return -1d; } public double getMaxZ() { return +1d; } public double getValue(int index, double x, double y, double z) { if ((index*dx+minx<=x) && (x<=index*dx+maxx+dx)) return 1d; return 0d; } public Vector getValues(int index, Matrix m) { if (m.columns<1) return null; Vector result = new Vector(m.columns); for(int i=0; i<m.columns; i++) if ((index*dx+minx<=m.matrix[0][i]) && (m.matrix[0][i]<=index*dx+maxx+dx)) result.vector[i] = 1d; else result.vector[i] = 0d; return result; } public double calcS(int i, int j) { if (i==j) return 1d; return 0d; } /*public Matrix calcS() { int i,j; Matrix S = new Matrix(N,N); for(i=0; i<N; i++) for(j=0; j<N; j++) if (i==j) S.matrix[i][j] = 1d; else S.matrix[i][j] = 0d; return S; }*/ public double calcJ(int i, int j) { double result = 0d; for(int l=1; l<=N2; l++) result += Math.cos(l*2*Math.PI*(i-j)/N)*Tl*l*l; return result * 2d/N; } /*public Matrix calcT() { int i,j,l; Matrix T = new Matrix(N,N); double Tl = (2/m)*(hdash*Math.PI/(N*dx))*(hdash*Math.PI/(N*dx)); int n = (N-1)/2; for(i=0; i<N; i++) for(j=0; j<N; j++) { T.matrix[i][j] = 0d; for(l=1; l<=n; l++) T.matrix[i][j] += Math.cos(l*2*Math.PI*(i-j)/N)*Tl*l*l; T.matrix[i][j] *= 2d/N; } return T; }*/ public double calcV(int i, int j) { if (i==j) return potential.getValue(minx+dx*i, 0d, 0d); return 0d; } /*public Matrix calcV() { int i,j; Matrix V = new Matrix(N,N); for(i=0; i<N; i++) for(j=0; j<N; j++) V.matrix[i][j] = 0d; for(i=0; i<N; i++) V.matrix[i][i] = potential.getValue(minx+dx*i, 0d, 0d); return V; }*/ /*public Matrix getS() { return S; } public Matrix getT() { return T; } public Matrix getV() { return V; }*/ public double calcI(int i, int j, int k, int l) { return 0d; } }