Fast Auxiliary Space Preconditioning 2.7.7 Aug/28/2022
AuxArray.c
Go to the documentation of this file.
1
14#include <math.h>
15
16#ifdef _OPENMP
17#include <omp.h>
18#endif
19
20#include "fasp.h"
21#include "fasp_functs.h"
22
23/*---------------------------------*/
24/*-- Public Functions --*/
25/*---------------------------------*/
26
41void fasp_darray_set (const INT n,
42 REAL *x,
43 const REAL val)
44{
45 SHORT use_openmp = FALSE;
46
47#ifdef _OPENMP
48 INT nthreads = 1;
49
50 if ( n > OPENMP_HOLDS ) {
51 use_openmp = TRUE;
52 nthreads = fasp_get_num_threads();
53 }
54#endif
55
56 if (val == 0.0) {
57 if (use_openmp) {
58#ifdef _OPENMP
59 INT mybegin,myend,myid;
60#pragma omp parallel for private(myid,mybegin,myend)
61 for (myid = 0; myid < nthreads; myid ++) {
62 fasp_get_start_end(myid, nthreads, n, &mybegin, &myend);
63 memset(&x[mybegin], 0x0, sizeof(REAL)*(myend-mybegin));
64 }
65#endif
66 }
67 else
68 memset(x, 0x0, sizeof(REAL)*n);
69 }
70 else {
71 INT i;
72
73 if (use_openmp) {
74#ifdef _OPENMP
75 INT mybegin,myend,myid;
76#pragma omp parallel for private(myid,mybegin,myend,i)
77 for (myid = 0; myid < nthreads; myid ++) {
78 fasp_get_start_end(myid, nthreads, n, &mybegin, &myend);
79 for (i=mybegin; i<myend; ++i) x[i]=val;
80 }
81#endif
82 }
83 else {
84 for (i=0; i<n; ++i) x[i] = val;
85 }
86 }
87}
88
103void fasp_iarray_set (const INT n,
104 INT *x,
105 const INT val)
106{
107 SHORT use_openmp = FALSE;
108
109#ifdef _OPENMP
110 INT nthreads = 1;
111
112 if ( n > OPENMP_HOLDS ) {
113 use_openmp = TRUE;
114 nthreads = fasp_get_num_threads();
115 }
116#endif
117
118 if (val == 0) {
119 if (use_openmp) {
120#ifdef _OPENMP
121 INT mybegin,myend,myid;
122#pragma omp parallel for private(myid, mybegin, myend)
123 for (myid = 0; myid < nthreads; myid ++) {
124 fasp_get_start_end(myid, nthreads, n, &mybegin, &myend);
125 memset(&x[mybegin], 0, sizeof(INT)*(myend-mybegin));
126 }
127#endif
128 }
129 else {
130 memset(x, 0, sizeof(INT)*n);
131 }
132 }
133 else {
134 INT i;
135
136 if (use_openmp) {
137#ifdef _OPENMP
138 INT mybegin,myend,myid;
139#pragma omp parallel for private(myid, mybegin, myend,i)
140 for (myid = 0; myid < nthreads; myid ++) {
141 fasp_get_start_end(myid, nthreads, n, &mybegin, &myend);
142 for (i=mybegin; i<myend; ++i) x[i]=val;
143 }
144#endif
145 }
146 else {
147 for (i=0; i<n; ++i) x[i]=val;
148 }
149 }
150}
151
164void fasp_darray_cp (const INT n,
165 const REAL *x,
166 REAL *y)
167{
168 memcpy(y, x, n*sizeof(REAL));
169}
170
171
184void fasp_iarray_cp (const INT n,
185 const INT *x,
186 INT *y)
187{
188 memcpy(y, x, n*sizeof(INT));
189}
190
191/*---------------------------------*/
192/*-- End of File --*/
193/*---------------------------------*/
void fasp_darray_set(const INT n, REAL *x, const REAL val)
Set initial value for an array to be x=val.
Definition: AuxArray.c:41
void fasp_iarray_set(const INT n, INT *x, const INT val)
Set initial value for an array to be x=val.
Definition: AuxArray.c:103
void fasp_darray_cp(const INT n, const REAL *x, REAL *y)
Copy an array to the other y=x.
Definition: AuxArray.c:164
void fasp_iarray_cp(const INT n, const INT *x, INT *y)
Copy an array to the other y=x.
Definition: AuxArray.c:184
void fasp_get_start_end(const INT procid, const INT nprocs, const INT n, INT *start, INT *end)
Assign Load to each thread.
Definition: AuxThreads.c:92
Main header file for the FASP project.
#define REAL
Definition: fasp.h:67
#define SHORT
FASP integer and floating point numbers.
Definition: fasp.h:63
#define INT
Definition: fasp.h:64
#define OPENMP_HOLDS
Definition: fasp_const.h:260
#define TRUE
Definition of logic type.
Definition: fasp_const.h:61
#define FALSE
Definition: fasp_const.h:62