Ok, so I'm trying to fix this..

``````# include <cstdlib>
# include <iostream>
# include <iomanip>
# include <cmath>
# include <omp.h>

using namespace std;

int main ( void );
void jacobi ( int n, double a[], double b[], double x[], double x_old[] );
void r8vec_uniform_01 ( int n, int *seed, double r[] );

//****************************************************************************80

int main ( void )

//****************************************************************************80
//
//  Purpose:
//
//    MAIN is the main program for JACOBI.
//
{
double *a;
double *b;
int i;
int j;
int n = 500;
double row_sum;
int seed;
double *x;
double *x_old;

a = new double[n*n];
b = new double[n];
x = new double[n];
x_old = new double[n];

cout << "\n";
cout << "JACOBI\n";
cout << "  C++ version\n";
[B] cout << "  Number of threads = " << omp_get_max_threads ( ) << "\n";[/B]
cout << "  Problem size N = " << n << "\n";

seed = 123456789;

r8vec_uniform_01 ( n * n, &seed, a );

for ( i = 0; i < n; i++ )
{
row_sum = 0.0;
for ( j = 0; j < n; j++ )
{
row_sum = row_sum + fabs ( a[i+j*n] );
}
a[i+i*n] = 1.0 + 2.0 * row_sum;
}

for ( i = 0; i < n; i++ )
{
x[i] = ( double ) ( i + 1 );
}

for ( i = 0; i < n; i++ )
{
b[i] = 0.0;
for ( j = 0; j < n; j++ )
{
b[i] = b[i] + a[i+j*n] * x[j];
}
}

r8vec_uniform_01 ( n, &seed, x );

jacobi ( n, a, b, x, x_old );

delete [] a;
delete [] b;
delete [] x;
delete [] x_old;

return 0;
}
//****************************************************************************80

void jacobi ( int n, double a[], double b[], double x[], double x_old[] )

//****************************************************************************80
//
//  Purpose:
//
//    JACOBI carries out the Jacobi iteration.
//
{
double axi;
double diff;
double diff_tol;
int i;
int it;
int it_max = 100;
int j;
double r8_epsilon = 1.0E-14;
double wtime;
double wtime1;
double wtime2;

diff_tol = 0.0;
for ( i = 0; i < n; i++ )
{
diff_tol = diff_tol + fabs ( b[i] );
}
diff_tol = ( diff_tol + 1.0 ) * r8_epsilon;

[b]wtime1 = omp_get_wtime ( );[/b]

for ( it = 1; it <= it_max; it++ )
{

for ( i = 0; i < n; i++ )
{
x_old[i] = x[i];
}

for ( i = 0; i < n; i++ )
{
axi = 0.0;
for ( j = 0; j < n; j++ )
{
axi = axi + a[i+j*n] * x_old[j];
}
x[i] = x_old[i] + ( b[i] - axi ) / a[i+i*n];
}

diff = 0.0;
for ( i = 0; i < n; i++ )
{
diff = diff + fabs ( x[i] - x_old[i] );
}

cout << "  " << setw(8) << it
<< "  " << setw(14) << diff << "\n";

if ( diff <= diff_tol )
{
break;
}
}

wtime2 = omp_get_wtime ( );
wtime = wtime2 - wtime1;

cout << "\n";
cout << "DIFF     = " << diff << "\n";
cout << "DIFF_TOL = " << diff_tol << "\n";
cout << "Time     = " << wtime  << "\n";

for ( i = 0; i < 10; i++ )
{
cout << "  " << setw(8) << i
<< "  " << setw(14) << x[i] << "\n";
}

return;
}
//****************************************************************************80

void r8vec_uniform_01 ( int n, int *seed, double r[] )

//****************************************************************************80
//
//  Purpose:
//
//    R8VEC_UNIFORM_01 returns a unit pseudorandom vector.
//
//  Parameters:
//
//    Input, int N, the number of entries in the vector.
//
//    Input/output, int *SEED, a seed for the random number generator.
//
//    Output, double R[N], the vector of pseudorandom values.
//
{
int i;
int i4_huge = 2147483647;
int k;

if ( *seed == 0 )
{
cerr << "\n";
cerr << "R8VEC_UNIFORM_01 - Fatal error!\n";
cerr << "  Input value of SEED = 0.\n";
exit ( 1 );
}

for ( i = 0; i < n; i++ )
{
k = *seed / 127773;

*seed = 16807 * ( *seed - k * 127773 ) - k * 2836;

if ( *seed < 0 )
{
*seed = *seed + i4_huge;
}

r[i] = ( double ) ( *seed ) * 4.656612875E-10;
}

return;
}``````

I tried to fix the bold and declared it, but when I declare it, other errors show up. I don't get it. How do I fix this?

>> `omp_get_max_threads ( )` Spacing issue I think. Try `omp_get_max_threads( )`

I tried to fix the bold and declared it, but when I declare it, other errors show up. I don't get it. How do I fix this?

What errors are you getting? :icon_rolleyes:

>> `omp_get_max_threads ( )` Spacing issue I think. Try `omp_get_max_threads( )`

Whitespace is largely insignificant in C++, your suggestion won't change anything.

>>Whitespace is largely insignificant in C++, your suggestion won't change anything.

Yea I guess your right, I thought the compiler might have seen omp_get_max_threads as a function instead of a function call because the next character afterwards is a whitespace instead of a '('. It was just a wild guess.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.