diff options
Diffstat (limited to 'src/jnt/scimark2/Jacobi.java')
-rw-r--r-- | src/jnt/scimark2/Jacobi.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/jnt/scimark2/Jacobi.java b/src/jnt/scimark2/Jacobi.java new file mode 100644 index 0000000..69b8ada --- /dev/null +++ b/src/jnt/scimark2/Jacobi.java @@ -0,0 +1,40 @@ +package jnt.scimark2; + +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]; + } + } + } +} + |