src/qcsteadystate.cpp

00001 /***************************************************************************
00002  *   Quantum Construct (qC++)                                                                  *
00003  *   The Quantum Physics Computational Library                                         *
00004  *   Copyright (C) 2005 by Shekhar S. Chandra                                      *
00005  *   Shekhar.Chandra@sci.monash,edu.au                                     *
00006  *                                                                         *
00007  *   This program is free software; you can redistribute it and/or modify  *
00008  *   it under the terms of the GNU General Public License as published by  *
00009  *   the Free Software Foundation; either version 2 of the License, or     *
00010  *   (at your option) any later version.                                   *
00011  *                                                                         *
00012  *   This program is distributed in the hope that it will be useful,       *
00013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00015  *   GNU General Public License for more details.                          *
00016  *                                                                         *
00017  *   You should have received a copy of the GNU General Public License     *
00018  *   along with this program; if not, write to the                         *
00019  *   Free Software Foundation, Inc.,                                       *
00020  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00021  ***************************************************************************/
00022 /*
00023         Ver Info - QCSteadyState.cpp
00024         1.0.0 - Original Implementation
00025 */
00026 
00027 #include "qcsteadystate.h"
00028 #include "qclinearalgebra.h"
00029 
00030 QCSteadyState::QCSteadyState(void)
00031 {
00032         tolerance = 1e-10;
00033 }
00034 
00035 QCSteadyState::~QCSteadyState(void)
00036 {
00037         F.free();
00038 }
00039 
00040 void QCSteadyState::setConstant(QCComplexField<2>& field)
00041 {
00042         complexType tmp(1.0,0.0);
00043 
00044         for(int k = 0; k < field.noOfColumns(); k ++)
00045                 for(int j = 0; j < field.noOfRows(); j ++)
00046                         field.assignElement(j,k,tmp);
00047 }
00048 
00049 void QCSteadyState::usingTDGPFixedPoint(QCComplexField<2> &field, parameterType &deltaR, QCParameter &tdgpParameters)
00050 {
00051         parameterType sum = 0.0, oldSum = 1.0, r = 0.0;
00052         //It is assumed that Small Omega Squared is 1st Parameter, Mu is 2nd Parameter and g the 3rd Parameter.
00053         parameterType smallOmegaSq = tdgpParameters.getParameter(0), mu = tdgpParameters.getParameter(1), g = tdgpParameters.getParameter(2);
00054         int radialExtent = field.noOfColumns()-1;
00055 
00056         //Adjust functional array
00057         F.free();
00058         F.resize(radialExtent+1);
00059         F = 1.0;
00060 
00061         //Use Fixed Point method to acquire boundary value problem solution
00062         while(abs(sum - oldSum) > tolerance && radialExtent > 0)
00063         {
00064                 oldSum = sum;
00065                 sum = 0.0;
00066                 for(int j = 1; j < radialExtent; j ++)
00067                 {
00068                         r = j*deltaR;
00069                         F(j) = 0.5*(F(j+1)+F(j-1)+0.5*deltaR*(F(j+1)-F(j-1))/j) - deltaR*deltaR*F(j)*(g*F(j)*F(j) + 0.5*smallOmegaSq*r*r - mu);
00070                         sum += F(j);
00071                 }
00072                 F(radialExtent) = 0.0;
00073                 F(0) = 2*F(1) - F(2);
00074         }
00075         completedSolution = TDGPFixedPt;
00076 }
00077 
00078 void QCSteadyState::usingTDGPFixedPoint(QCComplexField<3> &field, parameterType &deltaR, QCParameter &tdgpParameters)
00079 {
00080         parameterType sum = 0.0, oldSum = 1.0, r = 0.0;
00081         //It is assumed that Small Omega Squared is 1st Parameter, Mu is 2nd Parameter and g the 3rd Parameter.
00082         parameterType smallOmegaSq = tdgpParameters.getParameter(0), mu = tdgpParameters.getParameter(1), g = tdgpParameters.getParameter(2);
00083         int radialExtent = field.noOfColumns()-1;
00084 
00085         //Adjust functional array
00086         F.free();
00087         F.resize(radialExtent+1);
00088         F = 1.0;
00089 
00090         //Use Fixed Point method to acquire boundary value problem solution
00091         while(abs(sum - oldSum) > tolerance && radialExtent > 0)
00092         {
00093                 oldSum = sum;
00094                 sum = 0.0;
00095                 for(int j = 1; j < radialExtent; j ++)
00096                 {
00097                         r = j*deltaR;
00098                         F(j) = 0.5*(F(j+1)+F(j-1)+0.5*deltaR*(F(j+1)-F(j-1))/j) - deltaR*deltaR*F(j)*(g*F(j)*F(j) + 0.5*smallOmegaSq*r*r - mu);
00099                         sum += F(j);
00100                 }
00101                 F(radialExtent) = 0.0;
00102                 F(0) = 2*F(1) - F(2);
00103         }
00104         completedSolution = TDGPFixedPt;
00105 }
00106 
00107 void QCSteadyState::usingTDGPVortexFixedPoint(QCComplexField<2> &field, parameterType &deltaR, QCParameter &tdgpParameters)
00108 {
00109         parameterType sum = 0.0, oldSum = 1.0, r = 0.0, frac1, frac2, internal, extra, jSq, jFrac;
00110         //It is assumed that Small Omega Squared is 1st Parameter, Mu is 2nd Parameter, g the 3rd Parameter, Omega the 6th and n the 7th.
00111         parameterType smallOmegaSq = tdgpParameters.getParameter(0), mu = tdgpParameters.getParameter(1), g = tdgpParameters.getParameter(2), Omega = tdgpParameters.getParameter(5), n = tdgpParameters.getParameter(6);
00112         int radialExtent = field.noOfColumns()-1, count = 0;
00113 
00114         //Adjust functional array
00115         F.free();
00116         F.resizeAndPreserve(radialExtent+1);
00117         F = 1.0;
00118         //cerr << F << endl;
00119         if(radialExtent > 0)
00120                 F(0) = 0.0;
00121 
00122         //Use Fixed Point method to acquire boundary value problem solution
00123         while(abs(sum - oldSum) > tolerance && radialExtent > 0)
00124         {
00125                 oldSum = sum;
00126                 sum = 0.0;
00127                 for(int j = 1; j < radialExtent; j ++)
00128                 {
00129                         r = j*deltaR;
00130                         internal = g*F(j)*F(j) + 0.5*smallOmegaSq*r*r - mu + n*Omega;
00131                         jFrac = (F(j+1)-F(j-1))/j;
00132                         frac1 = 0.5*deltaR*jFrac;
00133                         jSq = j*j;
00134                         frac2 = (n*n)/(jSq)*F(j);
00135                         extra = F(j+1)+F(j-1);
00136                         F(j) = 0.5*(extra+frac1-frac2) - deltaR*deltaR*F(j)*(internal);
00137                         //cerr << F(j) << endl;
00138 
00139                         //F(j) = 0.5*(F(j+1)+F(j-1)+0.5*deltaR*(F(j+1)-F(j-1))/j-(n*n)/(j*j)*F(j)) - deltaR*deltaR*F(j)*(g*F(j)*F(j) + 0.5*smallOmegaSq*r*r - mu + n*Omega);
00140                         sum += F(j);
00141                 }
00142                 //exit(0);
00143                 //cerr << count << " ";
00144                 //count ++;
00145                 F(radialExtent) = 0.0;
00146         }
00147         completedSolution = TDGPFixedPt;
00148 }
00149 
00150 void QCSteadyState::usingTDGPVortexFixedPoint(QCComplexField<3> &field, parameterType xOffset, parameterType yOffset, parameterType zOffset, parameterType &deltaX, parameterType &deltaY, parameterType &deltaZ, parameterType &deltaR, QCParameter &tdgpParameters)
00151 {
00152         parameterType sum = 0.0, oldSum = 1.0, r = 0.0, x = 0.0, y = 0.0, z = 0.0;
00153         //It is assumed that Small Omega Squared is 1st Parameter, Mu is 2nd Parameter, g the 3rd Parameter, Omega the 6th and n the 7th.
00154         parameterType smallOmegaSq = tdgpParameters.getParameter(0), mu = tdgpParameters.getParameter(1), g = tdgpParameters.getParameter(2), Omega = tdgpParameters.getParameter(5), n = tdgpParameters.getParameter(6);
00155         int radialExtent = field.noOfColumns()-1;
00156         parameterType m, rSquared;
00157         parameterType magnitude;
00158         int rInteger;
00159 
00160         //Adjust functional array
00161         F.free();
00162         F.resize(radialExtent+1);
00163         F = 1.0;
00164         if(radialExtent > 0)
00165                 F(0) = 0.0;
00166 
00167         for(int l = 0; l < field.height(); l ++)
00168         {
00169                 z = l*deltaZ - zOffset;
00170                 //Use Fixed Point method to acquire boundary value problem solution
00171                 while(abs(sum - oldSum) > tolerance && radialExtent > 0)
00172                 {
00173                         oldSum = sum;
00174                         sum = 0.0;
00175                         for(int j = 1; j < radialExtent; j ++)
00176                         {
00177                                 r = j*deltaR;
00178                                 F(j) = 0.5*(F(j+1)+F(j-1)+0.5*deltaR*(F(j+1)-F(j-1))/j-(n*n)/(j*j)*F(j)) - deltaR*deltaR*F(j)*(g*F(j)*F(j) + 0.5*smallOmegaSq*(r*r + z*z) - mu + n*Omega);
00179                                 sum += F(j);
00180                         }
00181                         F(radialExtent) = 0.0;
00182                 }
00183                 //Transfer Solution
00184                 for(int k = 0; k < field.noOfColumns(); k++)
00185                 {
00186                         y = (k)*deltaY - yOffset;
00187                         for(int j = 0; j < field.noOfRows(); j++)
00188                         {
00189                                 x = (j)*deltaX - xOffset;
00190                                 rSquared = x*x + y*y;
00191                                 m = sqrt(rSquared)/deltaR;
00192                                 rInteger = int(m);
00193                                 magnitude = F(rInteger) + (m-rInteger)*( F(rInteger+1) - F(rInteger) );
00194                                 field.assignElement(j,k,l,magnitude);
00195                         }
00196                 }
00197         }
00198 }
00199 
00200 void QCSteadyState::usingTDGPGaussSeidel(QCComplexField<2>& currentField, parameterType xOffset, parameterType yOffset, parameterType &h_x, parameterType &h_y, QCParameter &tdgpParameters)
00201 {
00202         //It is assumed that Small Omega Squared is 1st Parameter, Mu is 2nd Parameter, g the 3rd Parameter, hbar the 4th and m the 5th.
00203         /*parameterType x, y, omegaSq = tdgpParameters.getParameter(0), mu = tdgpParameters.getParameter(1), g = tdgpParameters.getParameter(2), hbar = tdgpParameters.getParameter(3), m = tdgpParameters.getParameter(4), inverseCoEff = 0.0;
00204         parameterType alpha = (hbar*hbar)/(8.0*m), dt = (h_x*h_x)/4.0;
00205         int xExtent = currentField.noOfRows()-1, yExtent = currentField.noOfColumns()-1;
00206         int maxIterations = static_cast<int> (0.25*10*(xExtent*xExtent));
00207         complexType Psi;
00208 
00209         setBoundaryVanish(currentField);
00210 
00211         for(int m = 0; m < maxIterations; m ++)
00212         {
00213                 for(int k = 1; k < yExtent; k ++)
00214                 {
00215                         y = (k)*h_y - yOffset;
00216                         for(int j = 1; j < xExtent; j ++)
00217                         {
00218                                 x = (j)*h_x - xOffset;
00219                                 Psi = currentField.retrieveElement(j,k);
00220                                 Psi =   Psi - alpha*(currentField.retrieveElement(j+1,k)+currentField.retrieveElement(j-1,k)+currentField.retrieveElement(j,k+1)+currentField.retrieveElement(j,k-1)-4.0*Psi)
00221                         + dt*Psi*(0.5*m*omegaSq*(x*x + y*y)+g*(Psi*Psi)-mu);
00222                         }
00223                 }
00224         }*/
00225 }
00226 
00227 void QCSteadyState::usingTDGPFastSI(QCComplexField<2> &field, parameterType &h_r, QCParameter &tdgpParameters)
00228 {
00229         //It is assumed that Small Omega Squared is 1st Parameter, Mu is 2nd Parameter, g the 3rd Parameter, Omega the 6th and n the 7th.
00230         /*parameterType h_t = 1e-4, omegaSq = tdgpParameters.getParameter(0), mu = tdgpParameters.getParameter(1), g = tdgpParameters.getParameter(2), hbar = tdgpParameters.getParameter(3), m = tdgpParameters.getParameter(4), n = tdgpParameters.getParameter(6);
00231         parameterType r = 0.0, alpha = (hbar*hbar*h_t)/(4.0*h_r*h_r*m), beta = (hbar*hbar*h_t)/(8.0*h_r*m), sum = 0.0, oldSum = 1.0;
00232         int radialExtent = field.noOfColumns()-1, maxIterations = 5;
00233         Array<parameterType,1> a(radialExtent),b(radialExtent),c(radialExtent),d(radialExtent),X(radialExtent);
00234         QCLinearAlgebra LA;
00235         parameterType Psi, oldPsi;
00236         Array<parameterType,1> G;
00237 
00238     //Adjust functional array
00239         F.free();
00240         F.resize(radialExtent+1);
00241         //for(int n = 0; n < radialExtent; n ++)
00242         //F(n) = 1.0;//(radialExtent - n)/100.0;
00243     F = 1.0;
00244         G.resize(radialExtent+1);
00245 
00246     //while(abs(sum - oldSum) > tolerance && radialExtent > 0)
00247         //{
00248     for(int n = 0; n < 5; n++)
00249     {
00250         //Boundary Conditions for Edges
00251         F(radialExtent-1) = 0.0;
00252             G = F;
00253             oldSum = sum;
00254             sum = 0.0;
00255         for(int m = 0; m < maxIterations; m ++)
00256         {
00257             for(int j = 1; j < radialExtent; j ++)
00258             {
00259                 r = (j)*h_r;
00260                 Psi = F(j);
00261                 oldPsi = G(j);
00262 
00263                 a(j) = alpha;
00264                 b(j) = 1.0 - 2.0*alpha;
00265                 c(j) = alpha;
00266                 d(j) = G(j) - alpha*G(j+1) + 2.0*alpha*G(j) - alpha*G(j-1)
00267                         - (beta/r)*(F(j+1) - F(j-1))
00268                         - (beta/r)*(G(j+1) - G(j-1))
00269                         + 0.5*h_t*(0.5*m*omegaSq*(r*r) + g*Psi*Psi - mu)*Psi
00270                         + 0.5*h_t*(0.5*m*omegaSq*(r*r) + g*oldPsi*oldPsi - mu)*oldPsi;
00271             }
00272             //Free Boundary Conditions
00273             b(1) = b(1) + 2.0*a(1);
00274             c(1) = c(1) - a(1);
00275             a(radialExtent-1) = a(radialExtent-1) - c(radialExtent-1);
00276             b(radialExtent-1) = b(radialExtent-1) + 2.0*c(radialExtent-1);
00277             //Solve Tridiagonal
00278             LA.solveTridiagonal(a,b,c,X,d);
00279             for(int j = 1; j < radialExtent; j ++)
00280             {
00281                 F(j) = X(j);
00282                 sum += F(j);
00283             }
00284         }
00285     }*/
00286         //}
00287 }
00288 
00289 void QCSteadyState::usingTDGPFastSI(QCComplexField<2>& currentField, parameterType xOffset, parameterType yOffset, parameterType &h_x, parameterType &h_y, QCParameter &tdgpParameters)
00290 {
00291     /*Array<complexType,2> oldField = *currentField.accessArray();
00292         int maxIterations = 5, xExtent = currentField.noOfRows()-1, yExtent = currentField.noOfColumns()-1;
00293         Array<complexType,1> a(xExtent),b(xExtent),c(xExtent),d(xExtent),X(xExtent);
00294         //It is assumed that Small Omega Squared is 1st Parameter, mu is the 2nd, g is 3rd Parameter and hbar the 4th Parameter and m the 5th in the QCParameter Class. All index referencing should be made C style.
00295     parameterType x, y, h_t, omegaSq = tdgpParameters.getParameter(0), g = tdgpParameters.getParameter(2), hbar = tdgpParameters.getParameter(3), m = tdgpParameters.getParameter(4);
00296     QCLinearAlgebra LA;
00297 
00298         //Important Constants
00299         x = 4.0*h_x*h_x*m; //x is used as tmp storage
00300         y = 4.0*h_y*h_y*m; //y is used as tmp storage
00301         complexType     alpha_x(0.0,(h_t*hbar)/x),
00302         alpha_y(0.0,(h_t*hbar)/y),
00303         gamma(0.0,(m*omegaSq)/(2.0*hbar)),
00304         beta(0.0,g/hbar),
00305         Psi, oldPsi;
00306 
00307         for(int m = 0; m < maxIterations; m ++)
00308         {
00309                 for(int k = 1; k < yExtent; k ++)
00310                 {
00311                         y = (k)*h_y - yOffset;
00312                         for(int j = 1; j < xExtent; j ++)
00313                         {
00314                                 x = (j)*h_x - xOffset;
00315                                 Psi = currentField.retrieveElement(j,k);
00316                                 oldPsi = oldField(j,k);
00317 
00318                                 a(j) = -alpha_x;
00319                                 b(j) = 1.0 + 2.0*alpha_x;
00320                                 c(j) = -alpha_x;
00321                                 d(j) = oldPsi
00322                                        + alpha_x*( oldField(j+1,k) + oldField(j-1,k)
00323                                                    + oldField(j,k+1) + oldField(j,k-1) - 4.0*oldPsi)
00324                                        - h_t*0.5*i/hbar*(0.5*m*omegaSq*(x*x + y*y) + g*norm(Psi))*Psi
00325                                        - h_t*0.5*i/hbar*(0.5*m*omegaSq*(x*x + y*y) + g*norm(oldPsi))*oldPsi;
00326                         }
00327                         //Free Boundary Conditions
00328                         b(1) = b(1) + 2.0*a(1);
00329                         c(1) = c(1) - a(1);
00330                         a(xExtent-1) = a(xExtent-1) - c(xExtent-1);
00331                         b(xExtent-1) = b(xExtent-1) + 2.0*c(xExtent-1);
00332                         //Solve Tridiagonal
00333                         LA.solveTridiagonal(a,b,c,X,d);
00334                         for(int j = 1; j < xExtent; j ++)
00335                                 currentField.assignElement(j,k,X(j));
00336                 }
00337 
00338                 for(int j = 1; j < xExtent; j ++)
00339                 {
00340                         for(int k = 1; k < yExtent; k ++)
00341                         {
00342                                 a(k) = -alpha_y;
00343                                 b(k) = 1.0 + 2.0*alpha_y;
00344                                 c(k) = -alpha_y;
00345                                 d(k) = currentField.retrieveElement(j,k);
00346                         }
00347                         //Free Boundary Conditions
00348                         b(1) = b(1) + 2.0*a(1); //DO NOT USE CONTRACTED OPERATORS HERE (like =- etc.)
00349                         c(1) = c(1) - a(1);
00350                         a(yExtent-1) = a(yExtent-1) - c(yExtent-1);
00351                         b(yExtent-1) = b(yExtent-1) + 2.0*c(yExtent-1);
00352                         //Solve Tridiagonal
00353                         LA.solveTridiagonal(a,b,c,X,d);
00354                         for(int k = 1; k < yExtent; k ++)
00355                                 currentField.assignElement(j,k,X(k));
00356                 }
00357                 //Boundary Conditions for Edges
00358                 setBoundaryVanish(currentField);
00359         }*/
00360 }
00361 
00362 void QCSteadyState::transferSolutionTo(QCComplexField<2> &field, parameterType xOffset, parameterType yOffset, parameterType &deltaX, parameterType &deltaY, parameterType &deltaR)
00363 {
00364         parameterType x, y;
00365         parameterType l, rSquared;
00366         parameterType magnitude;
00367         int rInteger;
00368 
00369         if(completedSolution == TDGPFixedPt)
00370         {
00371                 for(int k = 0; k < field.noOfColumns(); k++)
00372                 {
00373                         y = (k)*deltaY - yOffset;
00374                         for(int j = 0; j < field.noOfRows(); j++)
00375                         {
00376                                 x = (j)*deltaX - xOffset;
00377                                 rSquared = x*x + y*y;
00378                                 l = sqrt(rSquared)/deltaR;
00379                                 rInteger = int(l);
00380                                 magnitude = F(rInteger) + (l-rInteger)*( F(rInteger+1) - F(rInteger) );
00381                                 field.assignElement(j,k,magnitude);
00382                         }
00383                 }
00384         }
00385         else if(completedSolution == TDGPCartesian)
00386         {
00388         }
00389 }
00390 
00391 void QCSteadyState::transferSolutionTo(QCComplexField<3> &field, parameterType xOffset, parameterType yOffset, parameterType zOffset, parameterType &deltaX, parameterType &deltaY, parameterType &deltaZ, parameterType &deltaR)
00392 {
00393         parameterType x, y, z;
00394         parameterType m, rSquared;
00395         parameterType magnitude;
00396         int rInteger;
00397 
00398         if(completedSolution == TDGPFixedPt)
00399         {
00400                 for(int l = 0; l < field.height(); l ++)
00401                 {
00402                         z = (l)*deltaZ - zOffset;
00403                         for(int k = 0; k < field.noOfColumns(); k++)
00404                         {
00405                                 y = (k)*deltaY - yOffset;
00406                                 for(int j = 0; j < field.noOfRows(); j++)
00407                                 {
00408                                         x = (j)*deltaX - xOffset;
00409                                         rSquared = x*x + y*y + z*z;
00410                                         m = sqrt(rSquared)/deltaR;
00411                                         rInteger = int(m);
00412                                         magnitude = F(rInteger) + (m-rInteger)*( F(rInteger+1) - F(rInteger) );
00413                                         field.assignElement(j,k,l,magnitude);
00414                                 }
00415                         }
00416                 }
00417         }
00418         else if(completedSolution == TDGPCartesian)
00419         {
00421         }
00422 }
00423 
00424 bool QCSteadyState::output1DSolution(const char* fileName, parameterType &deltaR)
00425 {
00426         parameterType r;
00427         ofstream outFile(fileName,ios::out);
00428 
00429         if(outFile.fail())
00430         {
00431                 cerr << "File Error: " << fileName << endl;
00432                 return false;
00433         }
00434         else
00435         {
00436                 //Plots half the function has its assumed to be symmetric
00437                 for(int j = 0; j < F.extent(firstDim)/2; j++)
00438                 {
00439                         r = j*deltaR;
00440                         outFile << r << "," << F(j) << endl;
00441                 }
00442                 outFile.close();
00443                 return true;
00444         }
00445 }
00446 
00447 void QCSteadyState::setBoundaryVanish(QCComplexField<2> &field)
00448 {
00449         int xExtent = field.noOfRows()-1, yExtent = field.noOfColumns()-1;
00450 
00451         //Phase Gradient Zero at Boundary
00452         for(int j = 1; j < xExtent; j ++)
00453         {
00454                 field.assignElement(j,0,complexZero);
00455                 field.assignElement(j,yExtent,complexZero);
00456         }
00457         for(int k = 0; k <= yExtent; k ++)
00458         {
00459                 field.assignElement(0,k,complexZero);
00460                 field.assignElement(xExtent,k,complexZero);
00461         }
00462 }
00463 
00464 void QCSteadyState::setBoundaryFree(QCComplexField<2> &field)
00465 {
00466         int xExtent = field.noOfRows()-1, yExtent = field.noOfColumns()-1;
00467 
00468         for(int k = 1; k < xExtent; k ++)
00469         {
00470                 field.assignElement(k,0,2.0*field.retrieveElement(k,1) - field.retrieveElement(k,2));
00471                 field.assignElement(k,yExtent,2.0*field.retrieveElement(k,yExtent-1) - field.retrieveElement(k,yExtent-2));
00472         }
00473         for(int l = 0; l <= yExtent; l ++)
00474         {
00475                 field.assignElement(0,l,2.0*field.retrieveElement(1,l) - field.retrieveElement(2,l));
00476                 field.assignElement(xExtent,l,2.0*field.retrieveElement(xExtent-1,l) - field.retrieveElement(xExtent-2,l));
00477         }
00478         field.assignElement(0,0,2.0*field.retrieveElement(1,1) - field.retrieveElement(2,2));
00479         field.assignElement(0,yExtent,2.0*field.retrieveElement(1,yExtent-1) - field.retrieveElement(2,yExtent-2));
00480         field.assignElement(xExtent,0,2.0*field.retrieveElement(xExtent-1,1) - field.retrieveElement(xExtent-2,2));
00481         field.assignElement(xExtent,yExtent,2.0*field.retrieveElement(xExtent-1,yExtent-1) - field.retrieveElement(xExtent-2,yExtent-2));
00482 }

Generated on Sat May 13 13:22:49 2006 for Quantum Construct (qC++) by  doxygen 1.4.6-NO