File indexing completed on 2024-04-06 12:32:56
0001 #include "SOR.h"
0002
0003 double SOR_num_flops(int M, int N, int num_iterations) {
0004 double Md = (double)M;
0005 double Nd = (double)N;
0006 double num_iterD = (double)num_iterations;
0007
0008 return (Md - 1) * (Nd - 1) * num_iterD * 6.0;
0009 }
0010
0011 void SOR_execute(int M, int N, double omega, double **G, int num_iterations) {
0012 double omega_over_four = omega * 0.25;
0013 double one_minus_omega = 1.0 - omega;
0014
0015
0016
0017 int Mm1 = M - 1;
0018 int Nm1 = N - 1;
0019 int p;
0020 int i;
0021 int j;
0022 double *Gi;
0023 double *Gim1;
0024 double *Gip1;
0025
0026 for (p = 0; p < num_iterations; p++) {
0027 for (i = 1; i < Mm1; i++) {
0028 Gi = G[i];
0029 Gim1 = G[i - 1];
0030 Gip1 = G[i + 1];
0031 for (j = 1; j < Nm1; j++)
0032 Gi[j] = omega_over_four * (Gim1[j] + Gip1[j] + Gi[j - 1] + Gi[j + 1]) + one_minus_omega * Gi[j];
0033 }
0034 }
0035 }