/* From: "COMPUTATIONAL PHYSICS, 2nd Ed" by RH Landau, MJ Paez, and CC Bordeianu Copyright Wiley-VCH, 2007. Electronic Materials copyright: R Landau, Oregon State Univ, 2007; MJ Paez, Univ Antioquia, 2007; and CC Bordeianu, Univ Bucharest, 2007. Support by National Science Foundation */ // Tune.java: eigenvalue solution for performace tuning public class Tune { public static void main(String[] argv) { final int Ldim = 2051; int i, j, iter = 0; double [][] ham = new double [Ldim] [Ldim]; double [] coef = new double [Ldim]; double [] sigma = new double [Ldim]; double err, ener, ovlp, step = 0., time; time = System.currentTimeMillis(); // Initialize time // Init matrix & vector for ( i = 1; i <= Ldim-1; i++ ) { for ( j=1; j <= Ldim-1; j++ ) { if (Math.abs(j-i) >10) ham[j][i] = 0. ; else ham[j][i] = Math.pow(0.3, Math.abs(j-i)); } ham[i][i] = i ; coef[i] = 0.; } coef[1] = 1.; err = 1.; iter = 0 ; // Start iteration while (iter < 15 && err > 1.e-6) { iter = iter + 1; ener = 0. ; ovlp = 0.; // Compute E & normalize for ( i= 1; i <= Ldim-1; i++ ) { ovlp = ovlp + coef[i]*coef[i] ; sigma[i] = 0. ; for (j= 1; j <= Ldim-1; j++) sigma[i] = sigma[i]+coef[j]*ham[j][i]; ener = ener + coef[i]*sigma[i] ; } ener = ener/ovlp; for ( i = 1; i <= Ldim-1; i++ ) { coef[i] = coef[i]/Math.sqrt(ovlp) ; sigma[i] = sigma[i]/Math.sqrt(ovlp) ; } err = 0.; // Update for ( i = 2; i <= Ldim-1; i++ ) { step = (sigma[i] - ener*coef[i])/(ener-ham[i][i]) ; coef[i] = coef[i] + step ; err = err + step*step ; } err = Math.sqrt(err) ; System.out.println ("iter, ener, err " + iter + ", " + ener + ", " + err); } time = (System.currentTimeMillis() - time)/1000; // Elapsed t System.out.println("time = " + time + "s"); } }