summaryrefslogtreecommitdiff
path: root/src/jnt/scimark2/Jacobi.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jnt/scimark2/Jacobi.java')
-rw-r--r--src/jnt/scimark2/Jacobi.java40
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];
+ }
+ }
+ }
+}
+