package org.gwtnode.examples.scimark.impl; public class Jacobi { public static final double num_flops(int M, int N, int num_iterations) { double Md = (double) M; double Nd = (double) N; double num_iterD = (double) num_iterations; return (Md-1)*(Nd-1)*num_iterD*6.0; } public static final void SOR(double omega, double G[][], int num_iterations) { int M = G.length; int N = G[0].length; double omega_over_four = omega * 0.25; double one_minus_omega = 1.0 - omega; // update interior points // int Mm1 = M-1; int Nm1 = N-1; for (int p=0; p<num_iterations; p++) { for (int i=1; i<Mm1; i++) { double[] Gi = G[i]; double[] Gim1 = G[i-1]; double[] Gip1 = G[i+1]; for (int j=1; j<Nm1; j++) Gi[j] = omega_over_four * (Gim1[j] + Gip1[j] + Gi[j-1] + Gi[j+1]) + one_minus_omega * Gi[j]; } } } }