52 VPUBLIC
void Vxcopy(
int *
nx,
int *
ny,
int *
nz,
double *x,
double *y) {
61 #pragma omp parallel for private(i,j,k) 62 for(k=2; k<=*
nz-1; k++)
63 for(j=2; j<=*
ny-1; j++)
64 for(i=2; i<=*
nx-1; i++)
65 VAT3(y, i, j, k) = VAT3(x, i, j, k);
73 MAT3(y, *
nx - 2, *
ny - 2, *
nz - 2);
78 for(k=2; k<=*
nz-1; k++)
79 for(j=2; j<=*
ny-1; j++)
80 for(i=2; i<=*
nx-1; i++)
81 VAT3(y, i - 1, j - 1, k - 1) = VAT3(x, i, j, k);
93 MAT3(x, *
nx - 2, *
ny - 2, *
nz - 2);
99 for(k=2; k<=*
nz-1; k++)
100 for(j=2; j<=*
ny-1; j++)
101 for(i=2; i<=*
nx-1; i++)
102 VAT3(y, i, j, k) = VAT3(x, i - 1, j - 1, k - 1);
108 double *alpha,
double *x,
double *y) {
118 for(k=2; k<=*
nz-1; k++)
119 for(j=2; j<=*
ny-1; j++)
120 for(i=2; i<=*
nx-1; i++)
121 VAT3(y, i, j, k) += *alpha * VAT3(x, i, j, k);
137 for(k=2; k<=*
nz-1; k++)
138 for(j=2; j<=*
ny-1; j++)
139 for(i=2; i<=*
nx-1; i++)
140 xnrm1 += VABS(VAT3(x, i, j, k));
158 for(k=2; k<=*
nz-1; k++)
159 for(j=2; j<=*
ny-1; j++)
160 for(i=2; i<=*
nx-1; i++)
161 xnrm2 += VAT3(x, i, j, k) * VAT3(x, i, j, k);
169 double *x,
double *y) {
180 for(k=2; k<=*
nz-1; k++)
181 for(j=2; j<=*
ny-1; j++)
182 for(i=2; i<=*
nx-1; i++)
183 xdot += VAT3(x, i, j, k) * VAT3(y, i, j, k);
197 #pragma omp parallel for private(i) 205 double *x,
double *gxc,
double *gyc,
double *gzc) {
211 MAT3(gxc, *
ny, *
nz, 2);
212 MAT3(gyc, *
nx, *
nz, 2);
213 MAT3(gzc, *
nx, *
ny, 2);
226 for (k=1; k<=*
nz; k++) {
227 for (j=1; j<=*
ny; j++) {
228 VAT3(x, 1, j, k) = VAT3(gxc, j, k, 1);
229 VAT3(x, *
nx, j, k) = VAT3(gxc, j, k, 2);
234 for (k=1; k<=*
nz; k++) {
235 for (i=1; i<=*
nx; i++) {
236 VAT3(x, i, 1 ,k) = VAT3(gyc, i, k, 1);
237 VAT3(x, i, *
ny, k) = VAT3(gyc, i, k, 2);
242 for (j=1; j<=*
ny; j++) {
243 for (i=1; i<=*
nx; i++) {
244 VAT3(x, i, j, 1) = VAT3(gzc, i, j, 1);
245 VAT3(x, i, j, *
nz) = VAT3(gzc, i, j, 2);
260 for (k=1; k<=*
nz; k++) {
261 for (j=1; j<=*
ny; j++) {
262 VAT3(x, 1, j, k) = 0.0;
263 VAT3(x, *
nx, j, k) = 0.0;
268 for (k=1; k<=*
nz; k++) {
269 for(i=1; i<=*
nx; i++) {
270 VAT3(x, i, 1, k) = 0.0;
271 VAT3(x, i, *
ny, k) = 0.0;
276 for (j=1; j<=*
ny; j++) {
277 for (i=1; i<=*
nx; i++) {
278 VAT3(x, i, j, 1) = 0.0;
279 VAT3(x, i, j, *
nz) = 0.0;
288 int n, i, ii, ipara, ivect, iflag;
299 xdum = (double)(VRAND);
302 for (ii=1; ii<=nproc; ii++)
303 for (i=1+(ipara*(ii-1)); i<=ipara*ii; i++)
304 VAT(x, i) = (double)(VRAND);
307 for (i=ipara*nproc+1; i<=n; i++)
308 VAT(x, i) = (double)(VRAND);
313 VPUBLIC
void Vxscal(
int *
nx,
int *
ny,
int *
nz,
double *fac,
double *x) {
319 for (k=2; k<=*
nz-1; k++)
320 for (j=2; j<=*
ny-1; j++)
321 for (i=2; i<=*
nx-1; i++)
322 VAT3(x, i, j, k) *= *fac;
328 int *ipc,
double *rpc,
double *ac) {
332 MAT2(ac, *
nx * *
ny * *
nz, 1);
337 numdia = VAT(ipc, 11);
341 RAT2(ac, 1, 1), RAT2(ac, 1, 2), RAT2(ac, 1, 3), RAT2(ac, 1, 4));
342 }
else if (numdia == 27) {
345 RAT2(ac, 1, 1), RAT2(ac, 1, 2), RAT2(ac, 1, 3), RAT2(ac, 1, 4),
346 RAT2(ac, 1, 5), RAT2(ac, 1, 6),
347 RAT2(ac, 1, 7), RAT2(ac, 1, 8), RAT2(ac, 1, 9), RAT2(ac, 1, 10),
348 RAT2(ac, 1, 11), RAT2(ac, 1, 12), RAT2(ac, 1, 13), RAT2(ac, 1, 14));
350 Vnm_print(2,
"Vprtmatd: invalid stencil type given: %d\n", numdia);
356 VPUBLIC
void Vprtmatd7(
int *
nx,
int *
ny,
int *
nz,
357 int *ipc,
double *rpc,
358 double *oC,
double *oE,
double *oN,
double *uC) {
370 n = (*
nx - 2) * (*
ny - 2) * (*
nz - 2);
372 Vnm_print(2,
"Vprtmatd7: Dimension of matrix = %d\n", n);
373 Vnm_print(2,
"Vprtmatd7: Begin diagonal matrix\n");
376 for (k=2; k<=*
nz-1; k++)
377 for (j=2; j<=*
ny-1; j++)
378 for (i=2; i<=*
nx-1; i++)
379 Vnm_print(2,
"Vprtmatd7: (%d,%d,%d) - oC=%g, oE=%g, oN=%g, uC=%g\n",
380 VAT3(oC,i,j,k), VAT3(oE,i,j,k), VAT3(oN,i,j,k), VAT3(uC,i,j,k));
383 Vnm_print(2,
"Vprtmatd7: End diagonal matrix\n");
388 VEXTERNC
void Vprtmatd27(
int *
nx,
int *
ny,
int *
nz,
389 int *ipc,
double *rpc,
390 double *oC,
double *oE,
double *oN,
double *uC,
391 double *oNE,
double *oNW,
392 double *uE,
double *uW,
double *uN,
double *uS,
393 double *uNE,
double *uNW,
double *uSE,
double *uSW) {
415 n = (*
nx - 2) * (*
ny - 2) * (*
nz - 2);
417 Vnm_print(2,
"Vprtmatd27: Dimension of matrix = %d\n", n);
418 Vnm_print(2,
"Vprtmatd27: Begin diagonal matrix\n");
421 for (k=2; k<=*
nz-1; k++)
422 for (j=2; j<=*
ny-1; j++)
423 for (i=2; i<=*
nx-1; i++)
424 Vnm_print(2,
"Vprtmatd7: (%d,%d,%d) - oC = %g, oE = %g, " 425 "oNW = %g, oN = %g, oNE = %g, uSW = %g, uS = %g, " 426 "uSE = %g, uW = %g, uC = %g, uE = %g, uNW = %g, " 427 "uN = %g, uNE = %g\n",
428 VAT3( oC, i, j, k), VAT3( oE, i, j, k),
429 VAT3(oNW, i, j, k), VAT3( oN, i, j, k),
430 VAT3(oNE, i, j, k), VAT3(uSW, i, j, k),
431 VAT3( uS, i, j, k), VAT3(uSE, i, j, k),
432 VAT3( uW, i, j, k), VAT3( uC, i, j, k),
433 VAT3( uE, i, j, k), VAT3(uNW, i, j, k),
434 VAT3( uN, i, j, k), VAT3(uNE, i, j, k) );
437 Vnm_print(2,
"Vprtmatd27: End diagonal matrix\n");
440 VPUBLIC
void Vlinesearch(
int *
nx,
int *
ny,
int *
nz,
442 int *ipc,
double *rpc,
443 double *ac,
double *cc,
double *fc,
444 double *p,
double *x,
double *r,
445 double *ap,
double *zk,
double *zkp1) {
446 VABORT_MSG0(
"Not translated yet");
VPUBLIC void VfboundPMG00(int *nx, int *ny, int *nz, double *x)
Initialize a grid function to have a zero boundary value.
VPUBLIC void Vxscal(int *nx, int *ny, int *nz, double *fac, double *x)
Scale operation for a grid function with boundary values.
VPUBLIC void VfboundPMG(int *ibound, int *nx, int *ny, int *nz, double *x, double *gxc, double *gyc, double *gzc)
Initialize a grid function to have a certain boundary value,.
VPUBLIC void Vazeros(int *nx, int *ny, int *nz, double *x)
Zero out operation for a grid function, including boundary values.
VPUBLIC void Vxcopy(int *nx, int *ny, int *nz, double *x, double *y)
A collection of useful low-level routines (timing, etc).
VPUBLIC double Vxdot(int *nx, int *ny, int *nz, double *x, double *y)
Inner product operation for a grid function with boundary values.
VPUBLIC void Vxaxpy(int *nx, int *ny, int *nz, double *alpha, double *x, double *y)
saxpy operation for a grid function with boundary values.
VPUBLIC void Vxcopy_small(int *nx, int *ny, int *nz, double *x, double *y)
Copy operation for a grid function with boundary values. Quite simply copies one 3d matrix to another...
VPUBLIC void Vaxrand(int *nx, int *ny, int *nz, double *x)
Fill grid function with random values, including boundary values.
VPUBLIC double Vxnrm2(int *nx, int *ny, int *nz, double *x)
Norm operation for a grid function with boundary values.
VPUBLIC double Vxnrm1(int *nx, int *ny, int *nz, double *x)
Norm operation for a grid function with boundary values.
VPUBLIC void Vxcopy_large(int *nx, int *ny, int *nz, double *x, double *y)
Copy operation for a grid function with boundary values. Quite simply copies one 3d matrix to another...
VPUBLIC void Vprtmatd(int *nx, int *ny, int *nz, int *ipc, double *rpc, double *ac)