36 #ifdef USE_NAIVE_MULTITHREAD 
   55 #define MINPIV   (1.0e-8) 
   68         volatile AO_TS_t *col_locks,
 
   72         integer i, j, k, pvr = 0, pvc, nr, nc, r;
 
   82         for (i = 0; i < neq; i++) {
 
   92                         mul = mulpiv = fapvr = 0.0;
 
  111                         for (k = 0; k < nr; k++) {
 
  114                                         fari = 
fabs(a[r][i]);
 
  121                         for (k = 0; k < nr; k++) {
 
  124                                         fari = 
fabs(a[r][i]);
 
  125                                         if (fari >= mulpiv && nzc[r] < nc) {
 
  135                         den = papvr[i] = 1.0/papvr[i];
 
  143                         while ((pvr = AO_int_load_full((
unsigned int *)&piv[i])) < 0);
 
  155                 for (k = 0; k < nr; k++) {
 
  158                         if (todo[r] == 0 || r%ncpu != task) {
 
  164                         mul = par[i] = par[i]*den;
 
  165                         for (j = 0; j < nc; j++) {
 
  171                                         par[pvc] -= mul*papvr[pvc];
 
  173                                         par[pvc] = -mul*papvr[pvc];
 
  174                                         ci[r][nzc[r]++] = pvc;
 
  176                                         while (atomic_inc_and_test((atomic_t *)&col_locks[pvc]));
 
  179                                         while (AO_test_and_set_full(&col_locks[pvc]) == AO_TS_CLEAR);
 
  181                                         ril[k][nril[k]++] = pvc;
 
  182                                         AO_CLEAR(&col_locks[pvc]);
 
  188                 AO_fetch_and_add1_full(&row_locks[i]);
 
  189                 while (AO_load_full(&row_locks[i]) < ncpu);
 
  192                         for (k = 0; k < nr; k++) {
 
  194                                 for (j = 0; j < nril[k]; j++) {
 
  196                                         ri[pvc][nzr[pvc]++] = r;
 
  215                 unsigned long *locks,
 
  226                 fwd[0] = rhs[piv[0]];
 
  228                 AO_store_full(locks, 1);
 
  231         for (i = 1; i < neq; i++) {
 
  233         for (i = 1 + task; i < neq; i+=ncpu) {
 
  235                 if (i%ncpu != task) { 
continue; }
 
  237                 nc = nzc[r = piv[i]];
 
  241                 for (k = 0; k < nc; k++) {
 
  244                                 while (!AO_load_full(&locks[c]));
 
  254                 AO_store_full(&locks[i], 1);
 
  257         AO_fetch_and_add1_full(&locks[neq]);
 
  258         while (AO_load_full(&locks[neq]) < ncpu);
 
  263                 sol[neq] = fwd[neq]*a[r][neq];
 
  264                 AO_store_full(&locks[neq], 0);
 
  266         for (i = neq - 1; i >= 0; i--) {
 
  268         for (i = neq - 1 - task; i >= 0; i-=ncpu) {
 
  270                 if (i%ncpu != task) { 
continue; }
 
  279                 for (k = 0; k < nc; k++) {
 
  280                         if ((c = pci[k]) > i) {
 
  281                                 while (AO_load_full(&locks[c]));
 
  292                 AO_store_full(&locks[i], 0);
 
  317         for (i = 0; i < elr; i++) {
 
  318                 if ((r = rowindx[i]) >= 0) {
 
  320                         for (k = 0; k < elc; k++) {
 
  322                                 if (!elmat[er + k] && c >= 0) {
 
  324                                                 par[
c] += elmat[er + k];
 
  326                                                 par[
c] = elmat[er + k];
 
  354         for (r = from; r <= to; r++) {
 
  358                         for (i = 0; i < nc; i++) {
 
  359                                 if (nz[r][c = ci[r][i]]) {
 
  364                                         gri[
c][gnzr[
c]++] = r;
 
  365                                         gci[r][gnzc[r]++] = 
c;
 
GradientExpression< UnaryExpr< FuncFabs, Expr > > fabs(const GradientExpression< Expr > &u)
static std::stack< cleanup * > c
static const doublereal a