21#include "fasp_functs.h"
53 INT myid, mybegin, myend, nthreads;
56 nthreads = fasp_get_num_threads();
61 printf(
"### ERROR: Vectors have different dimensions!\n");
67#pragma omp parallel private(myid,mybegin,myend,i) num_threads(nthreads)
69 myid = omp_get_thread_num();
71 for ( i = mybegin; i < myend; ++i ) ypt[i] += a*xpt[i];
76 for ( i = 0; i < m; ++i ) ypt[i] += a*xpt[i];
106 printf(
"### ERROR: Vectors have different dimensions!\n");
112 memcpy (zpt, ypt, m*
sizeof(
REAL));
132 const INT length = x->
row;
135 register REAL onenorm = 0.0;
147#pragma omp parallel for reduction(+:onenorm) private(i)
149 for ( i = 0; i < length; ++i ) onenorm +=
ABS(xpt[i]);
152 for ( i = 0; i < length; ++i ) onenorm +=
ABS(xpt[i]);
172 const INT length = x->
row;
175 register REAL twonorm = 0.0;
185#pragma omp parallel for reduction(+:twonorm) private(i)
187 for ( i = 0; i < length; ++i ) twonorm += xpt[i]*xpt[i];
190 for ( i = 0; i < length; ++i ) twonorm += xpt[i]*xpt[i];
193 return sqrt(twonorm);
213 register REAL infnorm = 0.0;
216 for ( i = 0; i < length; ++i ) infnorm =
MAX(infnorm,
ABS(xpt[i]));
239 const INT length = x->
row;
242 register REAL value = 0.0;
252#pragma omp parallel for reduction(+:value) private(i)
254 for ( i = 0; i < length; ++i ) value += xpt[i] * ypt[i];
257 for ( i = 0; i < length; ++i ) value += xpt[i] * ypt[i];
281 const INT length = x->
row;
285 REAL diff = 0.0, temp = 0.0;
288 if ( length != y->
row ) {
289 printf(
"### ERROR: Vectors have different dimensions!\n");
299#pragma omp parallel for reduction(+:temp,diff) private(i)
301 for ( i = 0; i < length; ++i ) {
302 temp += xpt[i]*xpt[i];
303 diff += pow(xpt[i]-ypt[i],2);
307 for ( i = 0; i < length; ++i ) {
308 temp += xpt[i]*xpt[i];
309 diff += pow(xpt[i]-ypt[i],2);
313 return sqrt(diff/temp);
void fasp_chkerr(const SHORT status, const char *fctname)
Check error status and print out error messages before quit.
void fasp_get_start_end(const INT procid, const INT nprocs, const INT n, INT *start, INT *end)
Assign Load to each thread.
void fasp_blas_darray_axpy(const INT n, const REAL a, const REAL *x, REAL *y)
y = a*x + y
void fasp_blas_dvec_axpy(const REAL a, const dvector *x, dvector *y)
y = a*x + y
void fasp_blas_dvec_axpyz(const REAL a, const dvector *x, const dvector *y, dvector *z)
z = a*x + y, z is a third vector (z is cleared)
REAL fasp_blas_dvec_norminf(const dvector *x)
Linf norm of dvector x.
REAL fasp_blas_dvec_norm1(const dvector *x)
L1 norm of dvector x.
REAL fasp_blas_dvec_relerr(const dvector *x, const dvector *y)
Relative difference between two dvector x and y.
REAL fasp_blas_dvec_dotprod(const dvector *x, const dvector *y)
Inner product of two vectors (x,y)
REAL fasp_blas_dvec_norm2(const dvector *x)
L2 norm of dvector x.
Main header file for the FASP project.
#define SHORT
FASP integer and floating point numbers.
#define MAX(a, b)
Definition of max, min, abs.
#define ERROR_DATA_STRUCTURE
#define TRUE
Definition of logic type.
Vector with n entries of REAL type.
REAL * val
actual vector entries