| 493 | } |
| 494 | |
| 495 | real N_VMin(N_Vector x) |
| 496 | { |
| 497 | integer N; |
| 498 | real min, *xd, gmin; |
| 499 | machEnvType machenv; |
| 500 | |
| 501 | N = x->length; |
| 502 | xd = x->data; |
| 503 | min = xd[0]; |
| 504 | machenv = x->machEnv; |
| 505 | |
| 506 | #ifndef _OPENMP |
| 507 | for (integer i=1; i < N; i++, xd++) { |
| 508 | if ((*xd) < min) min = *xd; |
| 509 | } |
| 510 | #else |
| 511 | #pragma omp parallel |
| 512 | { |
| 513 | real min2 = min; |
| 514 | #pragma omp for nowait |
| 515 | for (integer i=0; i < N; i++) { |
| 516 | if (xd[i] < min) min = xd[i]; |
| 517 | } |
| 518 | #pragma omp critical |
| 519 | { |
| 520 | if(min2 < min) |
| 521 | min = min2; |
| 522 | } |
| 523 | } |
| 524 | #endif |
| 525 | |
| 526 | gmin = PVecAllReduce(min, 3, machenv); |
| 527 | return(gmin); |
| 528 | } |
| 529 | |
| 530 | |
| 531 | real N_VWL2Norm(N_Vector x, N_Vector w) |
no test coverage detected